Bir Palindrome-Polyglot-Quine Yazın


25

Bir olan bir program: Bir "palipolyquine" yazın Quine , bir Polyglot'u ve palindrom .

Kurallar:

  • Çok dilli dillerin sayısı kod boyutundan daha fazla tercih edilir.
  • En kısa cevap (bayt cinsinden), beraberlik durumunda kazanır.
  • Polyglot ve Quine kuralları buraya bakınız: Bir Polyquine yazın .

Örneğim ( Testlerle dolu bir Freaky Kaynakları var):

C # / Java (1747 bayt):

/**///\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\///**/

İdeone.com adresinde mevcut olan derleme: C # , Java .


2
Poly-quine yapımında herhangi bir kural var mı? Herhangi bir sınırlama var mı? Bu soru olduğu gibi ise, olası (önemsiz) bir çözüm 1( 1burada birçok dilde çıkacak ve palindromik).
Clismique 15:16

Daha resmi kurallar ekledim.
Ivan Kochurkin

2
Ah guzel. İlk zorlukta iyi şanslar! Yine de bazı şeyler daha var: orada kod bloğuna gerçekten ihtiyacınız yok ve muhtemelen kuralları diğer meydan okumadan buraya geçirmelisiniz.
clismique 15:16

1
5 dilli, 999 baytlık bir cevap 4 dilli, 100 baytlık bir cevabı geçiyor mu?
ETHProductions

@ETProductions, evet düşünüyorum. Satır sayısını azaltmak yerine, yeni dil eklemek daha zordur.
Ivan Kochurkin

Yanıtlar:


14

CJam / GolfScript , 2 dil, 50 bayt

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

Deneyin CJam! GolfScript'te deneyin!

Huh, bu şaşırtıcı bir şekilde uzun zamandır cevapsız kaldı.

açıklama

Her dilde temel dizimi palindromik bir poliglot dizisine nasıl dönüştürdüğümü göstererek bunu açıklamak muhtemelen en kolay yoldur.

Yani her iki dilde de temel quines:

{".~"}.~

{"_~"}_~

GolfScript ve CJam'de sırasıyla. Bunlar, CJam'ın aslında GolfScript'ten esinlenilmiş olması (ancak o zamandan beri çok sapma) olması nedeniyle oldukça benzer. Fark ettiğimiz ilk fark, birinin .yığının tepesini ve diğer kullanımlarını çoğaltmak için kullandığıdır _. Bu sorunu önlemek için yaygın bir püf noktası kullanmaktır 0$, çünkü her iki dilde de "yığın-öge üzerine kopyala" operatörü vardır $. Bu yüzden {"0$~"}0$~, bunun GolfScript'te hala takip eden bir satır akışına ihtiyacı olmasına rağmen, anladık. Ama sonunda bunun için endişelenelim.

İlk önce onu bir palindrom yapmalıyız. Bunun açık çözümü bir yorum eklemek ve kaynak kodunu tersine çevirmektir. Bu oldukça basit, çünkü CJam e#yorumlar için kullanıyor ve GolfScript'te ehiçbir şey yapmıyor ve #bir yorum. Eğer eklersek, e#...bu her iki dilde de işe yarar . İşte elimizde ne var:

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

Tabii ki, bu aslında parçayı baştan yazdırmıyore# . Bunu kaynak kodunun kendisinden kolayca başarabiliriz. Her iki dil içinde bir dize içine ilk bloğu açabilirsiniz `ve ekleme "0$~"ile bir kısmını +biz tek dizede tüm unmirrored kaynak kodu almak böylece. Yansıtılmış bir kopya eklemek için tek yapmamız gereken dizeyi 0$tekrar ile kopyalamak ve sonra -1%her iki dilde de çalışan tersini yapmaktır . Öyleyse şimdi elimizde:

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

Bu, CJam’da geçerli bir palindromik quine ve aynı zamanda GolfScript’te de çalışıyor ancak yine de sinir bozucu takip eden bir satır akışını yazdırıyor.

Bunu engellemenin genel yolu, boş bir dize atamaktır n, çünkü GolfScript gerçekte ne yaparsa nsonunda içeriği yazdırır . Yani ihtiyacımız olan şey "":n. Peki ya CJam? Neyse ki, bu hiçbir şey yapmaz. ""ayrıca boş bir dizedir (ya da boş bir liste, bunlar CJam'da aynı şeydir) ve :işleci nlisteye (satır besleme ile yazdırır) eşler . Ancak liste boş olduğundan, bir işleci haritaya koymak hiçbir şey yapmaz. Bu nedenle, CJam ile uğraşmadan kurcalardan kurtulabiliriz ve son çözüme ulaşabiliriz:

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

5

Perl 5 / Ruby / PHP / JavaScript (Tarayıcı), 4 dil, 513 bayt

$_='$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$'=_$

Online Perl'i deneyin!
Çevrimiçi deneyin!
PHP'yi çevrimiçi olarak deneyin!
Çevrimiçi olarak doğrulayın!

$_='$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$'=_$

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.