写回文-Polyglot-Quine


25

写“palipolyquine”:一个程序,它是一个奎因,一个通晓多种语言,以及回文

规则:

  • 多语言的语言数量比代码大小更可取。
  • 如果出现平局,则最短的答案(以字节为单位)获胜。
  • 多种语言和Quine规则请参见此处:写一个Polyquine

我的例子(我有一个带有测试的Freaky-Sources库):

C#/ Java(1747字节):

/**///\u000A\u002F\u002A
using System;//\u002A\u002F
class Program{public static void//\u000A\u002F\u002A
Main//\u002A\u002Fmain
(String[]z){String s="`**?`@#_^using System;?_#^class Program{public static void?@#_^Main?_#main^(String[]z){String s=!$!,t=s;int i;int[]a=new int[]{33,94,38,64,35,95,96,63,36};String[]b=new String[]{!&!!,!&n!,!&&!,!&@!,!&#!,!&_!,!`!,!?!,s};for(i=0;i<9;i++)t=t.?@#_^Replace?_#replace^(!!+(char)a[i],b[i]);t+='*';for(i=872;i>=0;i--)t=t+t?@#_^[i];Console.Write?_#.charAt(i);System.out.printf^(t);}}/",t=s;int i;int[]a=new int[]{33,94,38,64,35,95,96,63,36};String[]b=new String[]{"\"","\n","\\","\\u000A","\\u002F","\\u002A","/","//",s};for(i=0;i<9;i++)t=t.//\u000A\u002F\u002A
Replace//\u002A\u002Freplace
(""+(char)a[i],b[i]);t+='*';for(i=872;i>=0;i--)t=t+t//\u000A\u002F\u002A
[i];Console.Write//\u002A\u002F.charAt(i);System.out.printf
(t);}}/*/}};)t(
ftnirp.tuo.metsyS;)i(tArahc.F200u\A200u\//etirW.elosnoC;]i[
A200u\F200u\A000u\//t+t=t)--i;0=>i;278=i(rof;'*'=+t;)]i[b,]i[a)rahc(+""(
ecalperF200u\A200u\//ecalpeR
A200u\F200u\A000u\//.t=t)++i;9<i;0=i(rof;}s,"//","/","A200u\\","F200u\\","A000u\\","\\","n\",""\"{][gnirtS wen=b][gnirtS;}63,36,69,59,53,46,83,49,33{][tni wen=a][tni;i tni;s=t,"/}};)t(^ftnirp.tuo.metsyS;)i(tArahc.#_?etirW.elosnoC;]i[^_#@?t+t=t)--i;0=>i;278=i(rof;'*'=+t;)]i[b,]i[a)rahc(+!!(^ecalper#_?ecalpeR^_#@?.t=t)++i;9<i;0=i(rof;}s,!?!,!`!,!_&!,!#&!,!@&!,!&&!,!n&!,!!&!{][gnirtS wen=b][gnirtS;}63,36,69,59,53,46,83,49,33{][tni wen=a][tni;i tni;s=t,!$!=s gnirtS{)z][gnirtS(^niam#_?niaM^_#@?diov citats cilbup{margorP ssalc^#_?;metsyS gnisu^_#@`?**`"=s gnirtS{)z][gnirtS(
niamF200u\A200u\//niaM
A200u\F200u\A000u\//diov citats cilbup{margorP ssalc
F200u\A200u\//;metsyS gnisu
A200u\F200u\A000u\///**/

可以在ideone.com上进行编译:C#Java


2
制作聚喹有什么规定吗?有什么限制吗?如果这个问题原样存在,那么可能的解决方案是1(简单的)解决方案(它将1在这里以多种语言输出,并且是回文的)。
clismique

我添加了更多正式规则。
伊万·科胡金

2
啊,酷。好吧,祝你第一次挑战!但是,还有其他一些事情:您实际上并不需要那里的代码块,并且可能应该将规则从其他挑战迁移到此处。
clismique

1
5语言的999字节答案是否​​比4语言的100字节答案好?
ETHproductions 2013年

@ETHproductions,我想是的。添加新语言比减少行数更难。
伊万·科胡金

Answers:


14

CJam / GolfScript,2种语言,50字节

{`"0$~e#"+0$-1%"":n}0$~e##e~$0}n:""%1-$0+"#e~$0"`{

尝试CJam! 在GolfScript中尝试!

呵呵,这个答案出奇的长了。

说明

通过显示如何将每种语言的基本奎因变成回文的多语种奎因,这可能是最简单的解释。

因此,两种语言的基本原理是:

{".~"}.~

{"_~"}_~

分别在GolfScript和CJam中。由于CJam最初受到GolfScript的启发(但此后偏离了很多),因此这些功能非常相似。我们注意到的第一个区别是.用于复制堆栈的顶部用于复制_。避免使用此问题的常用技巧是使用0$,因为这两种语言都具有“ copy-nth-item-on-stack”运算符$。因此,我们得到了{"0$~"}0$~,尽管在GolfScript中这仍然需要尾随换行符。但是最后让我们担心。

首先,我们需要使其成为回文。显而易见的解决方案是在注释后面添加源代码,然后将其反向放置。这非常简单,因为CJam e#用于注释,并且在GolfScript中e中什么也不做,#而是注释。因此,如果我们附加e#...适用于两种语言。这是我们得到的:

{"0$~"}0$~e##e~$0}"~$0"{

当然,实际上并没有从头开始打印零件e#。我们可以从源代码本身很容易地重建它。两种语言都可以使用将初始块转换为字符串,`"0$~"使用+后面,以便我们在单个字符串中获得完整的未镜像源代码。要追加镜像副本,我们要做的就是0$再次复制该字符串,然后使用反转该字符串-1%,这在两种语言中都适用。所以现在我们有了这个:

{`"0$~e#"+0$-1%}0$~e##e~$0}%1-$0+"#e~$0"`{

这是CJam中的有效回文奎因,也可在GolfScript中使用,但仍会打印出令人讨厌的尾随换行符。

防止这种情况的通常方法是为分配一个空字符串n,因为GolfScript真正所做的是n在末尾打印其内容。所以我们需要的是"":n。那么CJam呢?值得庆幸的是,这根本不起作用。""也是一个空字符串(或空列表,它们在CJam中是相同的),并在该列表上:映射运算符n(带有换行符的打印)。但是,由于列表为空,因此将操作员映射到列表上根本没有任何作用。因此,我们可以摆脱换行,而不会弄乱CJam,并得到最终解决方案:

{`"0$~e#"+0$-1%"":n}0$~e##e~$0}n:""%1-$0+"#e~$0"`{

5

Perl 5 / Ruby / PHP / JavaScript(浏览器),4种语言,513字节

$_='$z=0?"$&".next: eval("printf=console.log;atob`JCc`");printf("%s_=%s%s%s;eval(%s_);//#//;)_%s(lave;%s%s%s=_%s",$d=$z[0]||h^L,$q=$z[1]||h^O,$_,$q,$d,$d,$q,"0"?$_.split("").reverse().join(""):~~reverse,$q,$d)';eval($_);//#//;)_$(lave;')d$,q$,esrever~~:)""(nioj.)(esrever.)""(tilps._$?"0",q$,d$,d$,q$,_$,O^h||]1[z$=q$,L^h||]0[z$=d$,"s%_=s%s%s%;eval(s%_);//#//;)_s%(lave;s%s%s%=_s%"(ftnirp;)"`cCJ`bota;gol.elosnoc=ftnirp"(lave :txen."&$"?0=z$'=_$

在线尝试Perl!
在线尝试!
在线尝试PHP!
在线验证!

$_='$z=0?"$&".next: eval("printf=console.log;atob`JCc`");printf("%s_=%s%s%s;eval(%s_);//#//;)_%s(lave;%s%s%s=_%s",$d=$z[0]||h^L,$q=$z[1]||h^O,$_,$q,$d,$d,$q,"0"?$_.split("").reverse().join(""):~~reverse,$q,$d)';eval($_);//#//;)_$(lave;')d$,q$,esrever~~:)""(nioj.)(esrever.)""(tilps._$?"0",q$,d$,d$,q$,_$,O^h||]1[z$=q$,L^h||]0[z$=d$,"s%_=s%s%s%;eval(s%_);//#//;)_s%(lave;s%s%s%=_s%"(ftnirp;)"`cCJ`bota;gol.elosnoc=ftnirp"(lave :txen."&$"?0=z$'=_$

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.