Tulis Palindrome-Polyglot-Quine


25

Tulis "palipolyquine": program yang merupakan quine , polyglot , dan palindrome .

Aturan:

  • Jumlah bahasa polyglot lebih disukai daripada ukuran kode.
  • Jawaban terpendek (dalam byte) menang, jika terjadi seri.
  • Aturan Polyglot dan Quine lihat di sini: Tulis sebuah Polyquine .

Contoh saya (saya punya repositori Freaky-Sumber dengan tes):

C # / Java (1747 bytes):

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

Kompilasi tersedia di ideone.com: C # , Java .


2
Apakah ada aturan yang terlibat dalam pembuatan poly-quine? Adakah batasan? Jika pertanyaan ini apa adanya, maka solusi yang mungkin (sepele) adalah 1(yang akan ditampilkan 1dalam banyak bahasa di sini, dan bersifat palindromik).
clismique

Saya menambahkan aturan yang lebih formal.
Ivan Kochurkin

2
Ah keren Selamat mencoba tantangan pertama Anda! Hanya beberapa hal lagi: Anda tidak benar-benar membutuhkan blok kode di sana, dan Anda mungkin harus memigrasi aturan dari tantangan lain ke sini.
clismique

1
Apakah jawaban 5-bahasa, 999-byte mengalahkan jawaban 4-bahasa, 100-byte?
ETHproduksi

@ ETHproductions, saya pikir ya. Lebih sulit untuk menambahkan bahasa baru daripada mengurangi jumlah baris.
Ivan Kochurkin

Jawaban:


14

CJam / GolfScript , 2 bahasa, 50 byte

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

Cobalah CJam! Cobalah di GolfScript!

Huh, ini tidak terjawab lama.

Penjelasan

Mungkin paling mudah untuk menjelaskan ini dengan menunjukkan bagaimana saya mengubah quine dasar di setiap bahasa menjadi quine polyglot palindromic.

Jadi quines dasar dalam kedua bahasa adalah:

{".~"}.~

{"_~"}_~

Dalam GolfScript dan CJam, masing-masing. Ini sangat mirip berkat fakta bahwa CJam awalnya terinspirasi oleh GolfScript (tetapi sejak itu cukup banyak menyimpang). Perbedaan pertama yang kami perhatikan adalah satu digunakan .untuk menduplikasi bagian atas tumpukan dan kegunaan lainnya _. Trik umum untuk menghindari masalah ini adalah menggunakan 0$, karena kedua bahasa memiliki operator "copy-n-item-on-stack" $. Jadi kita dapatkan {"0$~"}0$~, meskipun itu masih membutuhkan linefeed tambahan di GolfScript. Tapi mari kita khawatirkan itu pada akhirnya.

Pertama, kita harus menjadikannya palindrome. Solusi yang jelas untuk ini adalah menambahkan komentar dan meletakkan kode sumber di sana secara terbalik. Ini cukup sederhana, karena CJam menggunakan e#komentar, dan dalam GolfScript etidak melakukan apa-apa, dan #merupakan komentar. Jadi, jika kita menambahkan e#...itu berfungsi untuk kedua bahasa. Inilah yang kami punya:

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

Tentu saja, itu tidak benar-benar mencetak bagian dari e#seterusnya. Kami dapat merekonstruksi ini dengan mudah dari kode sumber itu sendiri. Kedua bahasa dapat mengubah blok awal menjadi string dengan `dan menambahkan "0$~"bagian dengan +, sehingga kita mendapatkan seluruh kode sumber yang tidak dikoreksi dalam satu string. Untuk menambahkan salinan cermin, yang perlu kita lakukan adalah menduplikat string 0$lagi dan kemudian membalikkannya -1%, yang juga berfungsi dalam kedua bahasa. Jadi sekarang kita punya ini:

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

Ini adalah quine palindromic yang valid di CJam, dan itu juga berfungsi dalam GolfScript tetapi masih mencetak linefeed sial yang tertinggal.

Cara yang biasa untuk mencegah hal ini adalah dengan menetapkan string kosong n, karena apa yang sebenarnya dilakukan GolfScript adalah mencetak konten npada bagian akhir. Jadi yang kita butuhkan adalah "":n. Jadi bagaimana dengan CJam? Untungnya, ini tidak melakukan apa-apa. ""juga merupakan string kosong (atau daftar kosong, mereka adalah hal yang sama di CJam), dan :memetakan operator n(cetak dengan linefeed) di atas daftar. Tetapi karena daftar itu kosong, memetakan operator di atasnya sama sekali tidak. Oleh karena itu, kita dapat menghilangkan linefeed, tanpa mengacaukan CJam, dan berakhir dengan solusi terakhir:

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

5

Perl 5 / Ruby / PHP / JavaScript (Browser), 4 bahasa, 513 byte

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

Coba Perl secara online!
Cobalah online!
Coba PHP online!
Validasikan secara online!

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.