Wie lang ist deine (Sprach-) Schlange?

14

Nach der dritten Herausforderung besteht Ihre Aufgabe darin, ein Ouroboros- Programm zu schreiben , das so viele Sprachen wie möglich verwendet.

Das heißt, in Sprache A schreiben Sie ein Programm pA, das Programm pB in Sprache B ausgibt. Programm pB sollte Programm pC in Sprache C ausgeben, und so weiter, bis schließlich ein Programm das ursprüngliche Programm pA in Sprache A ausgibt.

Keine zwei Sprachen in Ihrer Schleife können gleich oder Teilmengen oder Obermengen voneinander sein. Keines der Programme in der Schleife darf identisch sein.

Die längste Sprachenkette gewinnt. Die Länge des Quellcodes ist der Auslöser.

Hier ist eine Beispiellösung der Länge 3 von Ventero.

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

Mit Python wird dieses Perl-Snippet generiert

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

Dadurch wird der folgende Ruby-Code generiert

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

Daraufhin wird das ursprüngliche Python-Snippet gedruckt:

s='print q<puts %%q{s=%r;print s%%s}>';print s%s
Gemeinschaft
quelle
10
Relevant: ein 50-sprachiges "Ouroboros" .
Algorithmushai
@Ypnypn Es ist kein Duplikat davon, oder? Ich meine, das ist, um die Schleife mit einem Tie-Breaker der Quellcodelänge so lang wie möglich zu machen. Bisher hatte noch niemand die Möglichkeit, eine Länge von 4 Ouroborous zu posten :) Auch eine Schleife unterscheidet sich von einer Kette.
Eigentlich ist es diesem sehr ähnlich , aber dafür musste die Sequenz nicht durchlaufen werden, sodass es keine Quine-Komponente gab.
Martin Ender
4
Das 50-Sprachen-Biest scheint ein Gewinner zu sein, bevor wir überhaupt angefangen haben.

Antworten:

8

Hier ist eine Schleife von 4 Sprachen:

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

Bash

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

Stapel

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
quelle
Sehr beeindruckend!