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\///**/
code-challenge
quine
palindrome
polyglot
Ivan Kochurkin
sumber
sumber
1
(yang akan ditampilkan1
dalam banyak bahasa di sini, dan bersifat palindromik).Jawaban:
CJam / GolfScript , 2 bahasa, 50 byte
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 menggunakan0$
, 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 GolfScripte
tidak melakukan apa-apa, dan#
merupakan komentar. Jadi, jika kita menambahkane#...
itu berfungsi untuk kedua bahasa. Inilah yang kami punya: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 string0$
lagi dan kemudian membalikkannya-1%
, yang juga berfungsi dalam kedua bahasa. Jadi sekarang kita punya ini: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 kontenn
pada 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 operatorn
(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:sumber
Perl 5 / Ruby / PHP / JavaScript (Browser), 4 bahasa, 513 byte
Coba Perl secara online!
Cobalah online!
Coba PHP online!
Validasikan secara online!
sumber