เขียน Palindrome-Polyglot-Quine


25

เขียน "palipolyquine": โปรแกรมที่เป็นควินที่พูดได้หลายภาษาและpalindrome

กฎ:

  • จำนวนภาษาที่พูดได้หลายภาษาเป็นที่ต้องการมากกว่าขนาดรหัส
  • คำตอบที่สั้นที่สุด (เป็นไบต์) ชนะในกรณีที่เสมอกัน
  • พูดได้หลายภาษาและควินกฎดูที่นี่: เขียน 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ในหลายภาษาที่นี่และเป็น Palindromic)
clismique

ฉันเพิ่มกฎที่เป็นทางการมากขึ้น
Ivan Kochurkin

2
อ่าเจ๋ง ขอให้โชคดีในการท้าทายครั้งแรกของคุณ! มีบางสิ่งเพิ่มเติมที่: คุณไม่จำเป็นต้องมีบล็อคโค้ดที่นั่นและคุณควรย้ายกฎจากการท้าทายอื่น ๆ ไปที่นี่
clismique

1
คำตอบ 5 ภาษา, 999- ไบต์มีคำตอบ 4 ภาษา, 100- ไบต์หรือไม่?
ETHproductions

@ ETHproductions ฉันคิดว่าใช่ การเพิ่มภาษาใหม่นั้นยากกว่าการลดจำนวนบรรทัด
Ivan Kochurkin

คำตอบ:


14

CJam / GolfScript , 2 ภาษา, 50 ไบต์

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

ลอง CJam! ลองใช้ใน GolfScript!

หืมสิ่งนี้ยังไม่ได้รับคำตอบที่น่าประหลาดใจมานาน

คำอธิบาย

มันอาจจะง่ายที่สุดในการอธิบายเรื่องนี้โดยการแสดงว่าฉันเปลี่ยนควินินพื้นฐานในแต่ละภาษาให้กลายเป็นควินินโพลิกล็อตแบบ Palindromic

ดังนั้นพื้นฐานในทั้งสองภาษาคือ:

{".~"}.~

{"_~"}_~

ใน GolfScript และ CJam ตามลำดับ สิ่งเหล่านี้คล้ายกันมากกับความจริงที่ว่า CJam ได้รับแรงบันดาลใจมาจาก GolfScript (แต่ได้เบี่ยงเบนไปมาก) แจ้งให้ทราบความแตกต่างครั้งแรกที่เราเป็นที่หนึ่งใช้สำหรับการทำซ้ำด้านบนของสแต็คและใช้งานอื่น._เคล็ดลับทั่วไปเพื่อหลีกเลี่ยงปัญหานี้คือการใช้งานเนื่องจากทั้งสองภาษามีผู้ประกอบการ0$ "คัดลอกที่ n รายการบนกอง" $ดังนั้นเราจึงได้รับ{"0$~"}0$~แม้ว่ามันจะยังคงต้องการตัวป้อนบรรทัดใน GolfScript แต่มากังวลกันในตอนท้าย

ก่อนอื่นเราต้องทำให้มันเป็นแบบ palindrome ทางออกที่ชัดเจนในเรื่องนี้คือการผนวกความคิดเห็นและใส่รหัสต้นฉบับไว้ในสิ่งที่ตรงกันข้าม ค่อนข้างง่ายเพราะ 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"`{

นี่คือ quind Palindromic ที่ถูกต้องใน CJam และมันยังทำงานใน GolfScript แต่ก็ยังพิมพ์บรรทัดที่น่ารำคาญ

วิธีปกติในการป้องกันสิ่งนี้คือการกำหนดสตริงว่างให้กับnเพราะสิ่งที่ GolfScript ทำจริงๆคือการพิมพ์เนื้อหาของnในตอนท้าย "":nดังนั้นสิ่งที่เราต้องการคือ แล้ว CJam ล่ะ? โชคดีที่มันไม่ทำอะไรเลย ""ยังเป็นสตริงว่าง (หรือรายการที่ว่างเปล่ามันเป็นสิ่งเดียวกันใน CJam) และ:แมปตัวดำเนินการn(พิมพ์ด้วย linefeed) เหนือรายการ แต่เนื่องจากรายการว่างเปล่าการแมปโอเปอเรเตอร์จะไม่ทำอะไรเลย ดังนั้นเราสามารถกำจัด linefeed โดยไม่ต้องยุ่งกับ 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$'=_$

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.