订单数量


10

编写一个程序,当以不同的语言运行时,以每种语言输出不同的代码字节排列。确切的源代码计为一个排列。

这里的“不同语言”可以是不同的版本(Py 2和Py 3)或不同的标准标志。不同的输出会强制使用不同的版本。

适当的Quine规则适用于每种语言的程序。您的分数计算为(Language count)^6/(Code length in bytes),分数越高越好。

样品:

如果您的代码是,AAB并且以三种不同的语言运行,则返回ABAAABAAB,则其得分为2^6/3(仅是两种AAB计数之一)。如果ABA没有意义,那很好。


1
什么才算是另一种语言?
Laikoni '18

4
适当的奎因的哪个定义适用?(马丁的,或ais523的,或者也许在这些元线程一些其他的定义是什么?)做适当的奎因规则仅适用于该计划的解释实际基内斯?(就其价值而言,我认为通过执行适当的Quine规则不会大大改善这一挑战。)
Lynn

澄清一下,以您的示例为例-如果我的代码以语言1和语言2进行AAB打印,则我认为当将其视为语言1程序时,它必须是正确的quine,并且对它的解释没有任何进一步的限制,例如语言2程序。那正确吗?AABABA
林恩

1
代码长度是以字符还是字节为单位?我们应该如何处理不同的字符编码?
dylnan '18 -4-12

1
字节和字符呢?
dylnan '18

Answers:


10

Befunge-98> <> 高尔> <> 裂变Wumpus基数蜂蜡爱丽丝分数:8 6 /88 = 2978.909

"65*4+059*$!#.39*0jp2+'Wk,@ ''5&.'\d&o@o&88#+\@ol?!,'.'0.6'!+Ox,++tttt=++%-$#}.6~.F4*`*R

在Befunge中尝试一下! 在> <>中尝试! 在Gol> <>中尝试! 在裂变中尝试! 在Wumpus中尝试一下! 在Cardinal中尝试! 在蜂蜡中尝试! 在爱丽丝中尝试!

验证!

许多2D语言,都在滥用包装文字。因此,输出的差异为:

> <>,高尔> <>和Befunge-98的所有打印的代码向后(除"),以在不同的位置,最后三个字符R*"O"*"R*分别。Beeswax也具有向后的代码,但是后三个字符插入输出的第一部分。爱丽丝大多是倒退,除了所有的转义字符('\")移到前面来代替。

Wumpus是唯一实际奎因,裂变放"的代码,而不是开始的结束,和红衣主教放"之间05附近展开。

不同排列的证明

说明:

Befunge-98:

"  Wrapping string literal pushes all other characters + a space to the stack
 65*4+  Push " to the stack
      059*$!#.39*0j   Push 1,27 to the stack
                   p  Pops the top three values of the stack (27,1,34)
                    2+  Adds 2 to the space to make "
                      'Wk,@  Prints the top 88 characters of the stack and terminates

> <>和Gol> <>:

老实说,我在这里没有做太多事情。这两种语言的执行之间唯一的区别是@命令,该命令针对每种语言以不同的方式旋转堆栈的前三个值。

"  Wrapping string literal pushes all other characters to the stack
 65*4+  Push 34 (") to the stack
      059*$!#.  Jump to cell 45,0
                                   \@  Rotate the top three values of the stack 
                                     ol?!,'.'0.  Output the whole stack, ending in a divide by 0/stack underflow error

裂变

 "............R  Spawn a pointer going right

 "  Switch to printing mode and print every other character
 "  Switch off printing mode
  6  Teleport to other 6
 "........6'!+O   Print the "

ump

"  Bouncing string literal
 65*4+  Push a (")
      059*$!#.   Push 0 and jump to cell 0,45
                                        \  Reflect off mirror
                                       +   Add 0 to top of stack
                                 @o&88#    Print the top 88 characters of the stack

红衣主教:

                                 %   Spawn two pointer going left/right (up/down despawn immediately)
                                  -$  Right pointer jumps to cell -1,0
                      x,++tttt=++     Left pointer prints "
"  While right pointer switches to print mode and prints the code

蜂蜡:

 "................*`*   Spawn pointers going in every direction
                        Every other * also spawns pointers, but they do nothing
                   `    Turn on print mode for two of the pointers going in different directions
                        This prints everything but the `
          #}.6~.F4*     Print a `

爱丽丝:

"  Wrapping string literal pushes all other characters to the stack
   Except 's and mirrors
 65*4+  Push " to the stack
      059*$!#.  Does nothing
              39*0j  Jumps to cell 39,0
                         ''5&.    Push ' and duplicate it 5 times
                              '\  Push \
                                d&o@  Print the whole stack

6

Perl 5中红宝石,JavaScript的(铬),PHPPython 2中Python 3中,1206个字节,6分6 /1206 = 38.6865671641791

q=1//2;s=+0;s|0;"/.__id__;#";_="""q=1//2;s=+0;s|0;"/.__id__;#";_={0}{1}{0};R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q={0}{2}{0};print(_.format(Q,_,q[0:-12]+R,"%"))""";R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q="""|;#<?ob_end_clean();
eval($_='"$t"?0?[$q=37 .chr+113 .chr+38 .chr,$p=(96 .chr+39 .chr)*4,$n=10 .chr,$s=39 .chr*12,$S=34 .chr*3]:eval("printf=console.log;c=String.fromCharCode;$q=c(96);$p=c(37,113,38,39).repeat(4);$n=c(10);$s=c(39).repeat(12);$S=c(34,34,34)"):[]?[$q=q(!g)^PA,$p=HARHARHARHAR^od2od2od2od2,$n=R^X,$s=bbbbbbbbbbbb^EEEEEEEEEEEE,$S=hhh^JJJ]:[$q=O^h,$p=str_repeat(RHa3^w9GS,4),$n=R^X,$s=str_repeat(b^E,12),$S=HHH^jjj];//#');printf($x='q=1//2;s=+0;s|0;"/.__id__;#";_=%7$sq=1//2;s=+0;s|0;"/.__id__;#";_={0}{1}{0};R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q={0}{2}{0};print(_.format(Q,_,q[0:-12]+R,"%8$s"))%7$s;R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q=%7$s|;#<?ob_end_clean();%5$seval($_=%3$s%1$s%3$s);printf($x=%3$s%2$s%3$s,$_,$x,$q,$p,$n,$s,$S,"%8$s",![]||([]+[])?$n:"");//#%4$s%6$s%7$s;print(_.format(Q,_,q[0:-12]+R,"%8$s"))%9$s',$_,$x,$q,$p,$n,$s,$S,"%",![]||([]+[])?$n:"");//#`q&%`q&%`q&%`q&%''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))

在线验证Perl,Ruby,PHP,Python 2和Python 3!

注意:在Chrome的Inspector控制台中运行上述程序(似乎支持的位置参数console.log)会返回正确的程序。

说明

结果比我希望的要长得多,而且我的生活也变得更加艰难,因此我可能会继续修补它。我也想添加更多的语言,但是我需要找到一些不介意的东西$...

这是非常标准的奎因格式,其中报价在使用的计算是为每种语言有一点不同:在Ruby中%q&使用,使用PHP ',JavaScript的(Node.js的)利用了`和Perl 5使用q(...... )。因为只有引号引起了变化,所以该程序的其余部分仍然可以执行,并且每种语言都有效。Python 2和3围绕"""用于Python 2和 '''Python 3 的先前程序进行包装。

生成的Perl和Ruby程序不是标准的quines,每次迭代都添加了额外的q/ %qs,但是第一个程序正确返回了。

结果是:

  • Perl的5:
    eval($_=q&... q&);printf($x=q&... q&,... );//#'%`'%`'%`'%`''''''''''''"""...
  • 红宝石:
    eval($_=%q&... %q&);printf($x=%q&... %q&,... );//#`'`'`'`'''''''''''''"""...
  • JavaScript(Chrome):
    eval($_=`... `);printf($x=`... `,... );//#%q&'%q&'%q&'%q&'''''''''''''"""...
  • PHP:
    eval($_='... ');printf($x='... ',... );//#`q&%`q&%`q&%`q&%''''''''''''"""...
  • Python的2:
    ... _="""... """;... q="""...''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))
  • Python的3:
    ... _='''... ''';... q='''...""""""""""""''';print(_.format(Q,_,q[0:-12]+R,"%"))

我做了很多工作,希望这里不要错过任何关键。我还有很长一段路要走到Jo King的得分附近...


2

果冻,和中号,2 6 /14 = 4.57

1Ɗṙ@“1Ɗṙ@ȮṾ”ȮṾ

在果冻中尝试!

在M中尝试!

Ɗṙ@ȮṾ1“Ɗṙ@ȮṾ1” 在果冻

1Ɗṙ@ȮṾ“1Ɗṙ@ȮṾ” 在M中


我不确定木炭是否算作适当的
木瓜

@ H.PWiz我要添加一条评论说。我会问OP
dylnan

@ l4m2您认为木炭程序是正确的方法吗?如果没有,我将删除。
dylnan '18

我想这就像Quine在PHP中一样?
l4m2

@ l4m2不知道,我不知道PHP。我认为它适用于大多数ASCII文本
dylnan


1

击/ GolfScript,72个字节,2分6 /72 = 8/9(〜0.888 ...)

.~0 () 
{ 
    declare "-f" @* ".~0" " ()
 "+@n.;
    echo '.~0;'
}
.~0;

前两行包含一个尾随空格。

在Bash中在线尝试。
在GolfScript中在线尝试。

只需修改@ jimmy23013的“ 编写聚喹啉 ”挑战的答案即可。所做的修改是删除第三行之后的尾随空格,然后更改\n"+@n.;\n "+@n;

Bash将这样打印第1行和第2行:

.~0 ()    <- Trailing space
{         <- Trailing space

GolfScript将像这样打印第1行和第2行:

.~0 ()   <- No trailing space
 {       <- Both leading and trailing space

这里的基础程序,Bash输出和GolfScript输出分别用换行符替换为\n

.~0 () \n{ \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;
.~0 () \n{ \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;
.~0 ()\n { \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;

      ^^^ Note the difference here
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.