双向Quine链


9

PPCG还没有足够的藜...

挑战:

您的任务是创建一个程序“ A0”。当该程序在没有输入的情况下运行时,它什么也不输出。用输入运行该程序时,输出“ A1”。无输入运行“ A1”时,输出“ A0”。通过输入运行“ A1”时,输出“ A2”。几乎没有输入时,“ A(k)”将输出“ A(k-1)”,有输入时,将输出“ A(k + 1)”。

细节

我相信这个挑战很简单;真的没有其他规则。顺便说一句,每个程序必须至少包含1个字节。您可以假设输入将仅包含ASCII字符,并且可以根据需要忽略空格,但是您可以不指定特定的输入。输出可能会输出到STDOUT或STDERR,但是所有程序都必须输出到同一程序。另一个可能还包含文本(因此您可以输出到STDOUT,然后退出并出现错误)。感谢@Dennis指出这一点。

所有程序都必须使用相同的语言,并且每个程序都必须与其他程序唯一。

得分等于程序“ A0”的长度。由于这是代码高尔夫挑战赛,因此最低分获胜!


由单个字符的不同,我悲哀地预言,大多数意见将有A(k)和第(k + 1)被添加到越来越多的字符串:(
SPARR

@Sparr不幸的是,这可能会发生。:(哦,我不知道该如何制定明确的规则
。– HyperNeutrino

如果我正确地解释了这一点,则只能输出到我不厌烦的两个之一。如果我们将所需的输出打印到STDOUT,则STDERR是否必须为空?因为通常允许错误退出。
丹尼斯

所有程序都必须不同吗?问题不是这样。

4
另外,我是否可以建议使用更具表达力的标题,例如“双向Quine链”?除了打印其他程序的程序外,“ super meta quine”并没有说太多,而且将来将很难搜索到这一挑战。
Martin Ender

Answers:


1

,28字节

V Y"I#qSti0+i?`V Y`.RPyRtiu"

在线尝试!

说明

这是已知最短的Pip quine的修改版本V Y"`V Y`.RPy"。该方法通过定义字符串,将其拉入y变量,然后求值来工作。进行评估时,字符串采用repr的形式y(因此将yin 的值包装在双引号中)并将模式文字连接`V Y`到其前面。

我们的策略是把一个0在节目中,然后替换010,如果有输入,或更换100如果没有输入。(因此,A(ķ)将包含许多由ķ 1楼的后面是0)010方便,因为有内置变量(it使用实际位数,分别地)与这些值,所以我们可以参考它们而不。

因此RPy,我们希望而不是,是否需要RP yRit输入RP yRti。我们可以通过交换和的值来组合这两种情况ti如果存在input(I#q Sti),则可以这样做RP yRti。(我们必须测试#q,输入的长度,因为类似0的输入是错误的。)

现在,我们只需要0在代码中获取文字并处理A0的特殊情况,即不产生任何输出。两者都可以通过测试0+i并返回u是否为假来解决:

  • 对于任何k > 0,A(k)中的数字将为非零,因此为真(例如110+i)。
  • 对于k = 0,A(k)中的数字将为零:
    • 如果有输入,i并且t被交换并且i为10,0+i则仍然是正确的。
    • 如果没有输入,i则仍为0,并且0+i为false。代替quine核心,我们输出u,这是nil的内置变量。打印nil不产生任何输出。

做得好!奇迹般有效。
HyperNeutrino

1

Python 2,93字节

有一个尾随换行符。

p=1+2*bool(input())-1;s='print"p=%r+2*bool(input())-1;s=%r*(p>0);exec s"%(p,s)'*(p>0);exec s

尝试输入 | 无需输入即可尝试

这是从对类似问题的回答中修改而来的。

如果有输入,它将增加p。因此,产生的程序会p=2+...p=3+...等等。


这不会将0识别为输入
fəˈnɛtɪk

@LliwTelracs输入必须用引号引起来(必须是一个字符串)。请参阅答案中的超链接。
mbomb007'2

正因为如此,你的程序也适用于字符串的所有数值0以外
fənɛtɪk

1
@LliwTelracs好吧,那就不要尝试使用数字了。根据共识,我可以使用input()并要求输入内容用引号引起来,而不是使用raw_input()。如果要输入零,请使用"0"
mbomb007'2

不错的解决方案!我期望大多数答案的长度会无限增加(从技术上讲,这个答案确实有,但不是同一意思)。做得好!
HyperNeutrino
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.