站在长长的奎因线旁


28

或:建立垂直的麦片

受到启发站在长排线上

您的任务是构建一个垂直的quine,并使其线长度尽可能短。

计分

最短的行长(不包括换行符)获胜,同时使用标准作为决胜局。

行长确定为程序中最长的行,不包括换行符。

例如:

$_=
Q.
P

行长为3,字节数为8,而:

Q
$
_
P

行长为1,字节数为7(假设没有尾随换行符)。

规则

提篮必须符合提篮的社区定义

禁止出现标准漏洞


受此启发的挑战规则是否也适用于此?(“ 所有换行符都必须有意义。必须删除可以删除的换行符,并且不影响输出的直接串联相邻的换行符。 ”)
Kevin Cruijssen

6
@KevinCruijssen不,我希望这个挑战有更多的自由来鼓励更短的行长!在另一项挑战中,这是我想改变的一件事!
Dom Hastings '18

Answers:


31

Lenguage,线路长度为0,≈1.01×10 805字节

源代码包括

10124204951141713202533972929121310016060433092338061822344361345785088607872212687519180665846846689047959498775873817205954910072327976407177053174071436371843670134990737172675632938993247496933911137703773908536875512359091727633452506044935740750830240213878294804481182083555147915724921824921475110508228264569693355158523956426011218344830576542194309867719995259333487662608933990607888012376767799159279952780093033761421596267435996052643805835600325453580090964941176722519904997142820547696122795384058768166716813179490118821654787005844786013890425692181280317909786461426684986082270532414940905922244777135016193088362341771414388821075092853157152933099269703875111747946164773211049512395358715902962437487134522781505709420586981997748912591875626029183292826655753251235587052422561943

换行,它编码随后的Brainfuck程序。

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

源代码大部分与@ jimmy23013的辐射软化的Lenguage quine相同,最后减去.++++++++++.[-]替换.为打印换行符而不是空字节,并在第1行对数据部分进行了相应更改。


我知道这是不可避免的!我确实想要一个包容性的问题。我想知道是否有人能战胜这个……
Dom Hastings '18

主啊,这种语言的定义是为什么代码保龄球不能被人们很好地接受,这肯定是很酷的。。。不敢相信“ Hello World”会需要"about 1.75*10**76 yottabytes in ASCII"
Magic Octopus Urn


您可以使用]++++++++ ++.-->
jimmy23013 '18

28

JavaScript中,线路长度为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)`

说明

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() { ...让我们访问co空间(_),和括号(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(有点短,产生,这要归功于[].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!


我的头此刻感觉很糟,所以请询问我在此解释中犯的任何错误或遗漏的事情,休息后我会尽快与您联系...


真好!尽管确实不是JS程序员,但我可以从阅读的有关JSFuck的内容中猜测其要点,但我想特别解释一下这一f=行。
与Orjan约翰森

1
@ØrjanJohansen对不起,我一直在尝试为整个事情写一个解释,但是进展并不顺利,所以我将很快回答您的问题:这是设置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)"
ETHproductions

太好了,现在我明白了!您可能会提到 0+{}0[E]串连到以获得bm
与Orjan约翰森

的确不错!尽管我们使用了simar方法,但比我的尝试小得多!
Dom Hastings '18

@DomHastings很久以来,该链接甚至都不起作用;-)
ETHproductions '18

15

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。外部花括号可以消除单个声明中换行符之后的其他缩进。



12

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•


2
我只想说的是...•_•
corsiKa '18

6

Haskell + CPP,行长 2,705237字节

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


1
将其更改为可以节省大量的时间main=putStr$(:"\\\n")=<<s++show s;s="<data>"在线尝试!
与Orjan约翰森

5

铁锈,线长:5,字节: 301 299

在线尝试

尽管看起来很奇怪,但这不是一种深奥的编程语言,只是存在很多格式行噪声。

选择垂直长度为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,
'}'
)}

不是水平长度吗?
anatolyg '18

@anatolyg固定
Konrad Borowski

没有语法高亮显示的原始字符串嵌套使其无法解释。我认为cargo fmt这对您都没有帮助……
CAD97,18年

@ CAD97如果要语法突出显示,play.rust-lang.org会正确突出显示这,这就是为什么我使用它而不是TIO的“在线尝试”链接。
Konrad Borowski




2

红色,线长:10,49字节

s: [prin [
    "s:"
    mold s
    "do s"
]] do s

在线尝试!

实际上这是一个Rebol quine

说明:Red / Rebol mold遵循将4个空格偏移的编码样式。

s: [prin [     ; s is a block; print the following: 
    "s:"       ; literal "s:"
    mold s     ; the representation of the block itself - all between []
    "do s"     ; literal "do s"
]] do s        ; evaluate the block


2

RProgN 2,L = 1,B = 15字节

«
Ø
.
`
-
S
`
.

这等效于该程序:

«Ø.`
-S`
.

分解

«首先将隐式表示程序其余部分的函数推入堆栈,然后继续执行。Ø.向该函数附加一个空字符串,从而对该字符串进行字符串化。由于换行符是无操作的,所以它总是像等效程序那样严格化。`\n-从字符串中删除所有换行符,现在看起来像«Ø.`=S`.S然后将其转换为一个包含单个字符`\n.的堆栈,并通过换行符将其加入堆栈,并返回所需的程序。

在线尝试!


2

欠载行长1,20字节

(
:
a
S
S
)
:
a
S
S

在线尝试!

这只是附加了换行符的标准Underload quine。需要像TIO这样的实现,它忽略未知的命令字符。

其中的部分()是放在堆栈上的字符串文字:a将其复制,将顶部的堆栈条目括在括号中并S打印。


2

Perl 5,259个字节


$
_
=
p
.
r
.
i
.
n
.
t
.
q
{

'
$
_
=
p
.
r
.
i
.
n
.
t
.
q
{
'
,
&
{
I
.
"
X
0
y
h
~
"
^
"
E
O
0

y
"
.
x
}
(
$
_
,
6
,
-
1
)
,
'
}
;
&
{
I
.
"
X
0
o
k
h
~
"
.
(
Y
|
p
)
^
"
E
O
0
|
f
s
o
"
}
'
}
;
&
{
I
.
"
X
0
o
k
h
~
"
.
(
Y
|
p
)
^
"
E
O
0
|
f
s
o
"
}

在线尝试!

验证


1

Javascript(ES6 REPL),完整程序,行长:3,字节数:31

(
f=
_=>
`(
f=
${f
}
)
()`
)
()

这是@ kamoroso94对独立完整程序的回答的一部分。

如果有人发现一种剥离某些字节而不增加行长的方法,请随时发表评论:)


请注意,除非您在REPL中运行它,否则它实际上并不会输出任何东西。我将其称为JavaScript(ES6 REPL)
ETHproductions '18

哦,射击,习惯了Chrome控制台的方式...
Brian H.

1

Pip,线长1,35字节


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.