Quanto dura il tuo serpente (lingua)?


14

Dopo la sfida del terzo ordine , il tuo compito è scrivere un programma Ouroboros che usi quante più lingue possibile.

Cioè, nella lingua A, scrivere un programma pA che emette il programma pB nella lingua B. Il programma pB dovrebbe generare il programma pC nella lingua C, e così via fino a quando alla fine un programma emette il programma originale pA nella lingua A.

Non ci sono due lingue nel tuo loop possono essere uguali o sottoinsiemi o superset l'uno dell'altro. Nessuno dei programmi nel loop può essere identico.

Vince la catena di lingue più lunga. La lunghezza del codice sorgente sarà il tie-breaker.

Ecco una soluzione di esempio di lunghezza 3 fornita da Ventero.

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

con Python genera questo frammento di Perl

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

che genera il seguente codice Ruby

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

che quindi stampa lo snippet originale di Python:

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



@Ypnypn Non è un duplicato di quello, vero? Voglio dire, questo è quello di rendere il ciclo il più a lungo possibile con un tie-breaker della lunghezza del codice sorgente. Nessuno ha mai avuto la possibilità di pubblicare una lunghezza di 4 Ouroborous prima :) Anche un ciclo è diverso da una catena.

In realtà è molto simile a questo , ma ciò non ha richiesto che la sequenza si ripetesse, quindi non c'erano componenti quine.
Martin Ender,

4
La bestia di 50 lingue sembra essere un vincitore prima ancora di iniziare.

Risposte:


8

Ecco un ciclo di 4 lingue:

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

Lotto

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

Pitone

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

Molto impressionante!
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.