双重奎因:quine!dlroW,olleH


13

编写一个程序,该程序在运行时将输出其自己的源代码,而没有其他任何输出。看起来很简单,对吧?

问题是,当源代码反向时,您的程序必须输出“ Hello,World!”。完全没有引号。

这是代码高尔夫球,因此最低字节数为准。

编辑:您的奎纳必须是适当的奎纳。



4
@Mego是公平的,这不是我在这里谈论的那种泛泛的奎因,因为这不是“源代码的打印功能X”。也就是说,它所面临的挑战可能与其他“当您逆转程序...时”挑战没有太大不同。
Martin Ender

1
@MartinBüttner与您描述的挑战非常相似,我认为同样的道理也适用。
Mego

Answers:


8

Y,19个字节

Upxp"!dlroW ,olleH"

U捕获一个字符串,从头U开始直到U遇到下一个字符串为止,在这种情况下为源代码。p打印项目,并且x是终止链接。反转时,它看起来像:

"Hello, World!"pxpU

这将捕获字符串并使用进行打印,并p再次使用终止程序x

在这里尝试!


4
UU隐式推送?ಠ_ಠ
SP3000

1
@ Sp3000它的制作是为了使程序可以自行修改。从技术上讲,该U命令是“链链接捕获命令”。它不是用于配对的,但这不会阻止我将其用于配对。:P
Conor O'Brien

1
我不确定这算不算合适的菜。我们的定义要求程序的一部分对程序的不同部分进行U...编码,但仅对其进行编码U...
丹尼斯

@Dennis定义编码?我认为该p位完成了输出,这是编码的一部分。
科纳·奥布赖恩

1
我把编码的东西产生的输出,所以px不会算。例如,即使代码必须打印出来,最短的SMBF quine仍然被认为是作弊quine。也许值得马丁提出澄清。
丹尼斯

20

JavaScript(ES6),42 38字节

f=_=>/\//g&&"f="+f||"!dlroW ,olleH">=_

倒转

_=>"Hello, World!"||f+"=f"&&g//\/>=_=f

说明

反转后,它将成为返回字符串的匿名函数Hello, World!

正则表达式/\//g在反转时成为注释,这使语法无效>=_=f的内容可以在反转代码中注释掉。


这很聪明。:)我不会想到这一点。
ericw31415 '16

3
+1只是为了让眼睛浮躁:=_=
Darrel Hoffman

6

JavaScript(ES6),71个字节

trela=a=>alert("trela="+trela+"\ntrela\n``")//
`!dlroW ,olleH`
trela
``

怎么运行的:

第1行定义trela了在运行时输出程序源代码的功能。第2行是未分配的字符串,不执行任何操作。第3行和第4行调用trela滥用模板字符串语法。

反转:

``
alert
`Hello, World!`
//)"``n\alertn\"+alert+"=alert"(trela>=a=alert

怎么运行的:

第1行是未分配的字符串,不执行任何操作。第2行和第3行滥用了模版字符串语法进行打印Hello, World!。第4行是注释。


我看到JavaScript似乎在语法上还有一些余地。好吧,至少比Python多。真好。
R. Kap

空是``不必要的吗?
Rɪᴋᴇʀ

@EasterlyIrk否,有必要trela在转发版本中调用该函数(将打印
奎恩

@jrich哦,我没有意识到那``是争论。凉。
Rɪᴋᴇʀ

2
我觉得我应该习惯trela在这里看看...> _>
Conor O'Brien



2

返回,94字节

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'

反转:

'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"

Try it here.

输出到STDOUT。在找到更好的quine框架之前,现在必须这样做。

说明

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"

这包含奎因字符串。相反,它被推入堆栈但不输出。

34¤¤,,,,,,,,,,,,,

这会将报价char推入堆栈,并输出两次结果,直到没有剩余输出为止。相反,这将打印堆栈中已经存在的字符代码。

% 'H'e'l'l'o',' 'w'o'r'l'd'!'

这将弹出顶部的堆栈项(相反,这将弹出一个空格字符),并将一系列的字符代码压入堆栈(相反,这些字符随后将由一系列的打印,)。


我不知道这是真的很疯狂的RETURN代码,还是普通的RETURN代码._。
Downgoat

都; _; 我哭泣
Mama Fun

2

裂变2、42字节

@MartinBüttner在这个答案中无耻地改编了出色的奎因

'!+O!'!d'!l'!r'!o'!W'! '!,'!o'!!l'!e'!H'R"

在线尝试

并扭转

"R'H!'e!'l!!'o!',!' !'W!'o!'r!'l!'d!'!O+!'

在线尝试

在quine版本中,原子从R标题右侧开始。"开始打印模式,该模式将自动包装到下一个模式"。这会打印出所有内容,除了"'!+将原子设置为char "O打印出来并销毁结束程序的原子。

反转版本从原子的R每个位置重新开始,并在不破坏原子的情况下将其Hello, World打印!出来。对于最后的角色!,印刷品O会破坏原子。


1

Javascript ES6,55个字节

$=_=>`$=${$};$()//"!dlroW ,olleH"`;$()//"!dlroW ,olleH"

确实很简单。


0

Python 2,131字节

向前:

print(lambda x:x+repr(x)+")#'!dlroW ,olleH' tnirp")('print(lambda x:x+repr(x)+")#\'!dlroW ,olleH\' tnirp")(')#'!dlroW ,olleH' tnirp

相反:

print 'Hello, World!'#)'()"print '\Hello, World!'\#)"+)x(rper+x:x adbmal(tnirp'()"print 'Hello, World!'#)"+)x(rper+x:x adbmal(tnirp

前半部分是一个单行的quine,后跟a #来形成注释,以将前半部分与较简单的后半部分分开。


改编这个Python quine可以得到_='_=%r;print _%%_#"!dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
Sp3000 '16

0

C,108字节

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}//};)"!dlroW ,olleH"(stup{)(niam

我假设是C99
尼尔

0

Python 2,70个字节

_='_=%r;print _%%_#"dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
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.