Berapa lama ular (bahasa) Anda?

14

Sebagai lanjutan dari tantangan quine urutan ketiga , tugas Anda adalah menulis program Ouroboros yang menggunakan sebanyak mungkin bahasa.

Yaitu, dalam bahasa A, tulis program pA yang menghasilkan program pB dalam bahasa B. Program pB harus mengeluarkan program pC dalam bahasa C, dan seterusnya hingga akhirnya suatu program mengeluarkan program asli pA dalam bahasa A.

Tidak ada dua bahasa di loop Anda yang bisa sama atau himpunan bagian atau superset satu sama lain. Tak satu pun dari program dalam loop mungkin identik.

Rantai bahasa terpanjang menang. Panjang kode sumber akan menjadi tie-breaker.

Berikut adalah contoh solusi panjang 3 yang diberikan oleh Ventero.

s='print q<puts %%q{s=%r;print s%%s}>';print s%s

dengan Python menghasilkan cuplikan Perl ini

print q<puts %q{s='print q<puts %%q{s=%r;print s%%s}>';print s%s}>

yang menghasilkan kode Ruby berikut

puts %q{s='print q<puts %%q{s=%r;print s%%s}>';print s%s}

yang kemudian mencetak cuplikan Python asli:

s='print q<puts %%q{s=%r;print s%%s}>';print s%s
Komunitas
sumber
10
Relevan: 50 bahasa "Ouroboros" .
algoritme
Sangat mirip (tertutup): Buat rangkaian program dalam berbagai bahasa
Ypnypn
@ Ypnypn Ini bukan duplikat itu kan? Maksud saya ini adalah membuat loop selama mungkin dengan tie-breaker dari panjang kode sumber. Tidak ada yang pernah memiliki kesempatan untuk memposting panjang 4 Ouroborous sebelumnya :) Juga loop berbeda dari rantai.
Ini sebenarnya sangat mirip dengan yang satu ini , tapi itu tidak memerlukan urutan untuk loop, jadi tidak ada komponen quine.
Martin Ender
4
50 bahasa binatang tampaknya menjadi pemenang bahkan sebelum kita mulai.

Jawaban:

8

Berikut ini adalah 4 bahasa:

C -> Bash -> Batch -> Python -> C

C

main(){char *c="echo %cecho print %cmain(){char *c=%c%c%s%c%c;printf(c,34,39,92,34,c,92,34,39,34);}%c%c";printf(c,34,39,92,34,c,92,34,39,34);}

Pesta

echo "echo print 'main(){char *c=\"echo %cecho print %cmain(){char *c=%c%c%s%c%c;printf(c,34,39,92,34,c,92,34,39,34);}%c%c\";printf(c,34,39,92,34,c,92,34,39,34);}'"

Batch

echo print 'main(){char *c="echo %cecho print %cmain(){char *c=%c%c%s%c%c;printf(c,34,39,92,34,c,92,34,39,34);}%c%c";printf(c,34,39,92,34,c,92,34,39,34);}'

Python

print 'main(){char *c="echo %cecho print %cmain(){char *c=%c%c%s%c%c;printf(c,34,39,92,34,c,92,34,39,34);}%c%c";printf(c,34,39,92,34,c,92,34,39,34);}'
Josh
sumber
Sangat mengesankan!