태그 보관물: code-challenge

code-challenge

긴 quine 라인에 대항하십시오 한 짧은 선 길이로

또는 : 수직 quine을 구축하십시오

긴 선에 맞서 싸우 십시오 .

당신의 임무는 가능한 한 짧은 선 길이로 수직 퀴니를 만드는 것입니다.

채점

기준을 타이 브레이커로 사용하여 줄 길이를 줄이면 줄 바꿈이 가장 짧습니다 .

줄 길이는 줄 바꿈 문자를 제외한 프로그램에서 가장 긴 줄로 결정됩니다.

예를 들면 다음과 같습니다.

$_=
Q.
P

행 길이는 3이고 바이트 수는 8입니다.

Q
$
_
P

줄 길이가 1이고 바이트 수가 7입니다 (후행 줄 바꿈이 없다고 가정).

규칙

Quines는 quine의 커뮤니티 정의를 충족해야합니다 .

표준 허점 은 금지되어 있습니다.



답변

Lenguage , 선 길이 0, ≈ 1.01 × 10 805 바이트

소스 코드는

10124204951141713202533972929121310016060433092338061822344361345785088607872212687519180665846846689047959498775873817205954910072327976407177053174071436371843670134990737172675632938993247496933911137703773908536875512359091727633452506044935740750830240213878294804481182083555147915724921824921475110508228264569693355158523956426011218344830576542194309867719995259333487662608933990607888012376767799159279952780093033761421596267435996052643805835600325453580090964941176722519904997142820547696122795384058768166716813179490118821654787005844786013890425692181280317909786461426684986082270532414940905922244777135016193088362341771414388821075092853157152933099269703875111747946164773211049512395358715902962437487134522781505709420586981997748912591875626029183292826655753251235587052422561943

linefeeds는 다음에 나오는 brainfuck 프로그램을 인코딩합니다.

>>++++++++>+++>+++>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>++++++++>++++>++++++++>++++>+++++++>++>+++>+>+++>++>+++>+++>+>+>+>+>+>+>+>+>++++>++++>+++++++>+>++++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++++>+>+>+>+>+>+>+>+>+>+>++++++++>++++>+++++++>+++++++>+>+>+++>+>+>+>++++++++>+++>+++++++>+>+++>+>+++>+>+++>+>++++++++>++++>++++++++>++++>++++++++>++++>++++>+>+++>+++>++>+++++++>+++++++>+>+>+>++++++++>+++>+>++++++++>++++>+>+++>++>+++++++>++>+++++++>++++>++++>++++++++>+++>++++++++>+++>+++>+>++++>++++>++>+++++++>+++>+++>++++++++>++++>+>+++>++>+++++++>++++>++++>+++++++>+++>+++>+++>+++>++++++++>++++>++++>+>+++>+>+++>++>+++++++>+++++++
[
    [->+>+<<]
    >>>>[<<[->+<]>>[-<<+>>]>]
    <<[-[->+<]+>]+++
    [[->>+<<]<]<
]
+>+>+>+
[>]+++>++
[
    [<]++++++++++.[-]
    >[-]>[-]>[-]>[-]
    <+[<<++++++++>>->+>-[<]<]
    ++++++++>++++++++>+++++++>>
]

소스 코드는 대부분 @ jimmy23013의 방사선으로 부드럽게 된 Lenguage quine 과 동일 .합니다. 마지막으로 빼고 null 바이트 대신 줄 바꿈을 인쇄하고 1 줄의 데이터 섹션에 해당하는 변경 사항을 ++++++++++.[-]대체 .합니다.


답변

자바 스크립트, 라인 길이 1 960 956 928 바이트


[
t
,
r
,
u
,
e
,
f
,
a
,
l
,
s
]
=
!
0
+
[
!
1
]
;
[
,
n
,
d
,
,
q
,
i
]
=
t
.
a
+
t
V
=
[
]
[
f
+
i
+
n
+
d
]
;
[
,
,
,
c
,
,
,
o
,
,
_
,
,
,
,
,
y
,
z
]
=
V
+
0
F
=
V
[
E
=
c
+
o
+
n
+
s
+
t
+
r
+
u
+
c
+
t
+
o
+
r
]
P
=
(
1
+
e
+
2
+
3
-
4
+
t
)
[
2
]
f
=
F
(
r
+
e
+
t
+
u
+
r
+
n
+
_
+
a
+
t
+
o
+
(
0
+
{
}
)
[
3
]
)
(
)
(
3
*
4
+
[
]
[
E
]
[
n
+
a
+
(
0
[
E
]
+
0
)
[
9
+
2
]
+
e
]
)
[
1
]
F
(
a
,
a
+
l
+
e
+
r
+
t
+
y
+
a
+
P
+
q
+
P
+
a
+
P
+
q
+
z
)
`
[
t
,
r
,
u
,
e
,
f
,
a
,
l
,
s
]
=
!
0
+
[
!
1
]
;
[
,
n
,
d
,
,
q
,
i
]
=
t
.
a
+
t
V
=
[
]
[
f
+
i
+
n
+
d
]
;
[
,
,
,
c
,
,
,
o
,
,
_
,
,
,
,
,
y
,
z
]
=
V
+
0
F
=
V
[
E
=
c
+
o
+
n
+
s
+
t
+
r
+
u
+
c
+
t
+
o
+
r
]
P
=
(
1
+
e
+
2
+
3
-
4
+
t
)
[
2
]
f
=
F
(
r
+
e
+
t
+
u
+
r
+
n
+
_
+
a
+
t
+
o
+
(
0
+
{
}
)
[
3
]
)
(
)
(
3
*
4
+
[
]
[
E
]
[
n
+
a
+
(
0
[
E
]
+
0
)
[
9
+
2
]
+
e
]
)
[
1
]
F
(
a
,
a
+
l
+
e
+
r
+
t
+
y
+
a
+
P
+
q
+
P
+
a
+
P
+
q
+
z
)
`

더 읽기 쉬운 버전으로 quine이됩니다 (매우 줄 바꿈 제거).


[t,r,u,e,f,a,l,s]=!0+[!1];[,n,d,,q,i]=t.a+t
V=[][f+i+n+d];[,,,c,,,o,,_,,,,,y,z]=V+0
F=V[E=c+o+n+s+t+r+u+c+t+o+r]
P=(1+e+2+3-4+t)[2]
f=F(r+e+t+u+r+n+_+a+t+o+(0+{})[3])()(3*4+[][E][n+a+(0[E]+0)[9+2]+e])[1]
F(a,a+l+e+r+t+y+a+P+q+P+a+P+q+z)`
[t,r,u,e,f,a,l,s]=!0+[!1];[,n,d,,q,i]=t.a+t
V=[][f+i+n+d];[,,,c,,,o,,_,,,,,y,z]=V+0
F=V[E=c+o+n+s+t+r+u+c+t+o+r]
P=(1+e+2+3-4+t)[2]
f=F(r+e+t+u+r+n+_+a+t+o+(0+{})[3])()(3*4+[][E][n+a+(0[E]+0)[9+2]+e])[1]
F(a,a+l+e+r+t+y+a+P+q+P+a+P+q+z)`

설명

아휴. 위험한 여행이 될 것이기 때문에 여기에 타십시오.

나는 길이 1 노 (직접, 어쨌든) 내장 기능, 키워드 이러한 문제를 해결하거나 화살표를하는 방법을 알아 내려고 오랜 시간을 보낸이와 쉽게 가능하다는 것을 실현 기능을-전에 JSF *** , 한 캔 멀티 바이트 토큰을 피하면서 JavaScript 코드를 평가하십시오. 그러나 JSF 솔루션은 수십 또는 수십만이 아니라도 수천 바이트 길이가 될 수 있습니다. 고맙게도, 우리는 단지 그에 국한되지 않습니다. ()[]+!우리는 모든 ASCII를 사용할 수 있습니다!

먼저 JSF의 필수 구성 요소 인 “더 많은 기능을 잠금 해제”하기 위해 문자열로 만들 수있는 문자를 골라 시작하기로 결정했습니다. 문자열을 사용하여 길이가 3 인 줄이 필요한 문자를 직접 사용할 수 없으므로 대신 JSF에서 트릭을 훔쳐서 1 바이트 토큰으로 작성할 수있는 리터럴에서 몇 개의 문자를 가져옵니다.

JSF***   Used here   Value        Chars unlocked
!![]     !0          true         true
![]      !1          false        fals
[][[]]   t.a         undefined    ndi

이것으로부터 [].findFunction 객체 인로 시작하여 바깥쪽으로 확장 할 수 있습니다 . 문자열이 변환하는 것은 function find() { ...우리에게 액세스를 제공 c, o공간 ( _) 괄호 ( yz). 아마도 더 중요한 것은 이제 우리는 그것 constructorFunction함수에 접근 할 수있게되었다 .이 함수는 처음에는 소리가 나는 것처럼 문자열을 만들고에 전달한 Function()다음 생성 된 함수를 호출하여 코드를 실행하는 기능을 제공한다 .

아마도 프로그램 자체에서 사용되는 전반적인 방법을 언급해야 할 것입니다. 2015 년 현재, JavaScript에는 ” 태그 된 템플릿 “이라는이 멋진 기능이 있습니다.이 기능 은 문자열에서 이스케이프되지 않은 줄 바꿈을 허용 할뿐만 아니라 문자열 리터럴을 사용하여 직접 함수를 호출 할 수 있도록합니다 ( myFunc`abc`;대략 myFunc(["abc"])). 프로그램에서 마지막으로 함수 호출을 넣으면 일반적인 구조는 다음과 같습니다.

code;func`code;func`

func그 다음에는 모두 인수가 출력되고 그 뒤에 백틱, 그 다음에 다시 인수, 그리고 두 번째 백틱이 출력됩니다. 인수가 a있고 백틱이 저장되어 있다고 가정하면 f코드로이를 수행 할 수 있습니다 alert(a+f+a+f). 그러나 현재 우리는 누락 +되고 역행 자체 가 없습니다 . +(에 저장 됨 P)은 어렵지 않습니다. 우리는 JSF에서 또 다른 트릭을 훔쳐 문자열을 만들고 1e23숫자로 변환 한 다음 다시 문자열로 바꾸고 "1e+23".

백틱을 얻는 것은 조금 더 복잡합니다. 처음에는 취득하려 String.fromCharCode하지만, 찾는 C밝혀졌다 거의 어려운로한다. 다행히 atob얻기 쉬운 정도이다 ( Function("return atob")(); b에서 생성되어 0+{}제공되는 [object Object])와 적절한 마법 문자열이 발견되면, 모든 ASCII 문자를 제공 할 수 있습니다. 짧은 스크립트가 준 12A편리하게 찾을 수있는 옵션 중 하나로서 12Array(A가 생성하는 짧은 비트, 덕분에 [].constructor[n+a+m+e], m에서 발견된다 0 .constructor+0: "function Number() { ...").

마지막으로 모든 것을 하나로 묶습니다. 백틱을 variable에 할당 f하지만 함수 문자열에서 직접 사용할 수 없으므로 variable q을 문자로 설정 f하고 대신 사용합니다. 이것은 우리의 최종 문자열을 만든다 a+l+e+r+t+y+a+P+q+P+a+P+q+z, 또는 "alert(a+f+a+f)". 그런 다음이에 Function()피드를 제공하고 완성 된 코드를 결과에 피드하면 voila, 한 줄에 하나 이상의 문자가 포함 된 JavaScript quine이 있습니다!


지금은 머리가 끔찍한 느낌이 들기 때문에이 설명에서 실수 나 내가 놓친 것들에 대해 문의하십시오. 휴식을 취한 후 다시 연락 드리겠습니다.


답변

Haskell , 라인 길이 6, 400 343 336 바이트

{main=
putStr
$s++(s
>>=(++
":\n")
.show)
++
"[]}";
s='{':
'm':
'a':
'i':
'n':
'=':
'\n':
'p':
'u':
't':
'S':
't':
'r':
'\n':
'$':
's':
'+':
'+':
'(':
's':
'\n':
'>':
'>':
'=':
'(':
'+':
'+':
'\n':
'"':
':':
'\\':
'n':
'"':
')':
'\n':
'.':
's':
'h':
'o':
'w':
')':
'\n':
'+':
'+':
'\n':
'"':
'[':
']':
'}':
'"':
';':
'\n':
's':
'=':
[]}

온라인으로 사용해보십시오! 나는 길을 알지 못 putStr하므로 줄 길이는 6입니다. 바깥 쪽 중괄호는 단일 선언 내에서 줄 바꿈 후 다른 요구되는 들여 쓰기를 제거 할 수 있습니다.


답변

> <> , 22 바이트, 줄 길이 1

/
v
o
a
o
^
}
-
d
:
"

온라인으로 사용해보십시오!

Emigna 덕분에 -6 바이트 .


답변

CJam , 줄 길이 1, 16 13 바이트

"
_
p
"

_
p

온라인으로 사용해보십시오!

표준 quine에 줄{"_~"}_~ 바꿈을 삽입하는 것이 더 짧은 표준 quine "_p"␊_p도 올바른 일을한다는 것은 작은 기적입니다 . (감사합니다, 마틴!) 마지막 줄 바꿈이 필요합니다.

설명 (줄 바꿈)

"•_•p•"        Push that string.
       ••      Do nothing.
         _     Duplicate the string.
          •    Do nothing.
           p   Pop it and print it with quotes and a newline: "•_•p•"•
            •  Do nothing.

종료시 스택에 남은 내용이 인쇄 ( •_•p•)되어 총 출력이 산출 "•_•p•"••_•p•됩니다.


답변

하스켈 + CPP, 라인 길이 2, 705 (237) 바이트

m\
a\
i\
n\
=\
p\
u\
t\
S\
t\
r\
$\
(\
:\
"\
\\
\\
\\
n\
"\
)\
=\
<\
<\
s\
+\
+\
s\
h\
o\
w\
 \
s\
;\
s\
=\
"\
m\
a\
i\
n\
=\
p\
u\
t\
S\
t\
r\
$\
(\
:\
\\
"\
\\
\\
\\
\\
\\
\\
n\
\\
"\
)\
=\
<\
<\
s\
+\
+\
s\
h\
o\
w\
 \
s\
;\
s\
=\
"\

온라인으로 사용해보십시오! -CPPC 전처리 기를 활성화 하는 플래그 를 사용하면 줄 끝에서 백 슬래시를 사용하여 다음 줄에서 계속할 수 있습니다.

실제 코드는 main=putStr$(:"\\\n")=<<s++show s;s="<data>" 입니다.

편집 : Ørjan Johansen 덕분에 캐주얼 -468 바이트 !


답변

녹, 줄 길이 : 5, 바이트 : 301 299

온라인으로 사용해보십시오

외형에도 불구하고이 언어는 난해한 프로그래밍 언어가 아니며 많은 포맷 라인 노이즈가 있습니다.

사용할 수 있도록 세로 길이 5를 선택했습니다 print. 세로 길이가 짧고 C 함수가 extern키워드를 사용한다고 선언하고 stdout6 바이트 길이, write5 바이트 길이, no_main7 바이트 길이 (메인은 일반적으로 함수;) 라고 인쇄하는 방법이 없다고 생각합니다 .

fn
main
(){
let
t=(
r#"fn
main
(){
let
t=("#
,r#")
;
print
!(
r#"{}
r#"{
}"{}
,r#"{
}"{},
r#"{
}"{}
{}{}{
}{
}""#,
r#"
,t.0,
t.0,
'#',
t.1,
'#',
t.2,
'#',
t.1,
'#',
t.2,
'}'
)"#
)
;
print
!(
r#"{}
r#"{
}"{}
,r#"{
}"{},
r#"{
}"{}
{}{}{
}{
}"#
,t.0,
t.0,
'#',
t.1,
'#',
t.2,
'#',
t.1,
'#',
t.2,
'}'
)}