Jak długi jest twój (język) wąż?

14

Co wynika z trzeciego rzędu Quine wyzwanie, twoim zadaniem jest napisać Ouroboros program, który korzysta tak wielu językach, jak to możliwe.

Oznacza to, że w języku A napisz program pA, który wypisze program pB w języku B. Program pB powinien wypisać program pC w języku C i tak dalej, aż w końcu program wyśle ​​oryginalny program pA w języku A.

Żadne dwa języki w Twojej pętli nie mogą być takie same, ani ich podzbiory, ani nadzbiory. Żaden z programów w pętli nie może być identyczny.

Najdłuższy łańcuch języków wygrywa. Długość kodu źródłowego będzie rozstrzygającym.

Oto przykładowe rozwiązanie o długości 3 podane przez Ventero.

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

z Pythonem generuje ten fragment Perla

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

który generuje następujący kod Ruby

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

który następnie drukuje oryginalny fragment kodu w języku Python:

s='print q<puts %%q{s=%r;print s%%s}>';print s%s
Społeczność
źródło
10
Odpowiedni: 50-językowy „Ouroboros” .
algorytmshark
Bardzo podobne (zamknięte): Utwórz łańcuch programów w różnych językach
Ypnypn,
@Ypnypn To nie jest duplikat, prawda? Chodzi mi o to, aby pętla była jak najdłuższa z wyłącznikiem remisu o długości kodu źródłowego. Nikt nigdy wcześniej nie miał okazji opublikować odcinka 4 Ouroborous :) Również pętla różni się od łańcucha.
W rzeczywistości jest bardzo podobny do tego , ale nie wymagało to zapętlenia sekwencji, więc nie było komponentu quine.
Martin Ender
4
50 języków bestia wydaje się być zwycięzcą, zanim jeszcze zaczęliśmy.

Odpowiedzi:

8

Oto pętla 4 języków:

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

do

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);}

Grzmotnąć

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);}'"

Partia

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);}'

Pyton

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
źródło
Bardzo imponujące!