或:建立垂直的麦片
受到启发站在长排线上。
您的任务是构建一个垂直的quine,并使其线长度尽可能短。
计分
最短的行长(不包括换行符)获胜,同时使用代码高尔夫标准作为决胜局。
行长确定为程序中最长的行,不包括换行符。
例如:
$_=
Q.
P
行长为3,字节数为8,而:
Q
$
_
P
行长为1,字节数为7(假设没有尾随换行符)。
规则
提篮必须符合提篮的社区定义。
禁止出现标准漏洞。
受到启发站在长排线上。
您的任务是构建一个垂直的quine,并使其线长度尽可能短。
最短的行长(不包括换行符)获胜,同时使用代码高尔夫标准作为决胜局。
行长确定为程序中最长的行,不包括换行符。
例如:
$_=
Q.
P
行长为3,字节数为8,而:
Q
$
_
P
行长为1,字节数为7(假设没有尾随换行符)。
提篮必须符合提篮的社区定义。
禁止出现标准漏洞。
Answers:
源代码包括
10124204951141713202533972929121310016060433092338061822344361345785088607872212687519180665846846689047959498775873817205954910072327976407177053174071436371843670134990737172675632938993247496933911137703773908536875512359091727633452506044935740750830240213878294804481182083555147915724921824921475110508228264569693355158523956426011218344830576542194309867719995259333487662608933990607888012376767799159279952780093033761421596267435996052643805835600325453580090964941176722519904997142820547696122795384058768166716813179490118821654787005844786013890425692181280317909786461426684986082270532414940905922244777135016193088362341771414388821075092853157152933099269703875111747946164773211049512395358715902962437487134522781505709420586981997748912591875626029183292826655753251235587052422561943
换行,它编码随后的Brainfuck程序。
>>++++++++>+++>+++>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>++++++++>++++>++++++++>++++>+++++++>++>+++>+>+++>++>+++>+++>+>+>+>+>+>+>+>+>++++>++++>+++++++>+>++++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++++>+>+>+>+>+>+>+>+>+>+>++++++++>++++>+++++++>+++++++>+>+>+++>+>+>+>++++++++>+++>+++++++>+>+++>+>+++>+>+++>+>++++++++>++++>++++++++>++++>++++++++>++++>++++>+>+++>+++>++>+++++++>+++++++>+>+>+>++++++++>+++>+>++++++++>++++>+>+++>++>+++++++>++>+++++++>++++>++++>++++++++>+++>++++++++>+++>+++>+>++++>++++>++>+++++++>+++>+++>++++++++>++++>+>+++>++>+++++++>++++>++++>+++++++>+++>+++>+++>+++>++++++++>++++>++++>+>+++>+>+++>++>+++++++>+++++++
[
[->+>+<<]
>>>>[<<[->+<]>>[-<<+>>]>]
<<[-[->+<]+>]+++
[[->>+<<]<]<
]
+>+>+>+
[>]+++>++
[
[<]++++++++++.[-]
>[-]>[-]>[-]>[-]
<+[<<++++++++>>->+>-[<]<]
++++++++>++++++++>+++++++>>
]
源代码大部分与@ jimmy23013的辐射软化的Lenguage quine相同,最后减去.
,++++++++++.[-]
替换.
为打印换行符而不是空字节,并在第1行对数据部分进行了相应更改。
"about 1.75*10**76 yottabytes in ASCII"
]++++++++ ++.-->
[
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)`
ew。来这里兜风,因为这将是一次危险的旅程。
在意识到使用JSF ***可以轻松实现之前,我花了很长时间试图弄清楚如何解决长度为1的挑战(没有内置(无论如何直接),关键字,甚至没有箭头功能)。评估任何JavaScript代码,同时避免使用任何多字节令牌。但是,JSF解决方案很容易长成千上万个字节,即使不是成千上万。值得庆幸的是,我们不仅仅限于()[]+!
我们—我们拥有所有ASCII!
我决定首先打高尔夫,这是JSF的基本组成部分,可以将这些字符构建为字符串以“解锁更多功能”。我们不能直接使用字符串来获取字符,因为这将需要长度为3的行。因此,我们从JSF窃取了一个技巧,从可以用单字节令牌构建的文字中获取了一些字符:
JSF*** Used here Value Chars unlocked
!![] !0 true true
![] !1 false fals
[][[]] t.a undefined ndi
从中我们可以向外扩展,[].find
以Function对象开始。这个转换成字符串function find() { ...
让我们访问c
,o
空间(_
),和括号(y
和z
)。也许更重要的是,我们现在可以访问它constructor
的Function
函数-听起来似乎很简单,它使我们能够通过构建字符串,将其传递给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
(有点短,产生,这要归功于[].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()
,将完成的代码提供给结果,瞧,我们有一个JavaScript quine,每行不超过一个char!
我的头此刻感觉很糟,所以请询问我在此解释中犯的任何错误或遗漏的事情,休息后我会尽快与您联系...
f=
行。
f
单个反引号的一种复杂方法。该行本身等效于f=atob("12Array")[1]
。另一个技巧是q
实际上将f
第一行中的字母设置为该字母,因此在该F(...)
行中f
,由于变量f
不再设置为该字母,因此我可以使用它将字母放入所评估的字符串中。在a+l+e+r+t+y+a+P+q+P+a+P+q+z
相当于"alert(a+f+a+f)"
。
0+{}
并0[E]
串连到以获得b
和m
。
{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。外部花括号可以消除单个声明中换行符之后的其他缩进。
"
_
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•
。
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\
=\
"\
在线尝试!使用-CPP
启用C预处理程序的标志,使我们可以在行的末尾使用反斜杠以在下一行继续它。
实际的代码是main=putStr$(:"\\\n")=<<s++show s;s="<data>"
。
编辑:随意-468字节,感谢ØrjanJohansen!
尽管看起来很奇怪,但这不是一种深奥的编程语言,只是存在很多格式行噪声。
选择垂直长度为5才能使用print
。我不认为有一种垂直长度较短的打印方法,声明C函数使用extern
关键字,长度stdout
为6个字节,长度write
为5个字节,长度no_main
为7个字节(主要是一个函数;)。
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,
'}'
)}
cargo fmt
这对您都没有帮助……
f=
_=>
`f=
${f
}`
(
f=
_=>
`(
f=
${f
}
)
()`
)
()
这是@ kamoroso94对独立完整程序的回答的一部分。
如果有人发现一种剥离某些字节而不增加行长的方法,请随时发表评论:)
V
Y
"
[
`
V
Y
`
y
]
.
C
:
3
.
4
"
基于已知的最短的Pip quine ,V Y"`V Y`.RPy"
。将其压缩为线长1的主要困难是RP
,不能将其分成两行。但是在这种情况下,所有RP
(repr)所做的工作都是将字符串用双引号引起来,我们可以直接执行此操作。
以下是基于水平版本的说明:
V Y"[`V Y`y].C:3. 4"
Y" " Yank this string into the variable y
V and eval it
The code that is eval'd:
[ ] Build a list containing:
`V Y` this Pattern object (used for regex, but here useful as a
string-like object that doesn't need double quotes)
y y, the whole string
3. 4 Concatenate 3 and 4 to make 34 (since the 2-digit number won't work
in the vertical version)
C: Convert to ASCII character (: forces the precedence lower than .)
. Concatenate the " to the end of each list element
The resulting list is printed, concatenated together, with a
trailing newline