Quelle est la longueur de votre serpent (langue)?

14

Suite au défi de troisième ordre , votre tâche consiste à écrire un programme Ouroboros qui utilise autant de langues que possible.

C'est-à-dire, dans la langue A, écrire un programme pA qui produit le programme pB dans la langue B. Le programme pB devrait produire le programme pC dans la langue C, et ainsi de suite jusqu'à ce qu'un programme sorte finalement le programme original pA dans la langue A.

Aucune langue de votre boucle ne peut être la même ou des sous-ensembles ou des sur-ensembles l'un de l'autre. Aucun des programmes de la boucle ne peut être identique.

La plus longue chaîne de langues gagne. La longueur du code source sera le bris d'égalité.

Voici un exemple de solution de longueur 3 donnée par Ventero.

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

avec Python génère cet extrait de code Perl

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

qui génère le code Ruby suivant

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

qui imprime ensuite l'extrait de code Python original:

s='print q<puts %%q{s=%r;print s%%s}>';print s%s
Communauté
la source
10
Pertinent: un "Ouroboros" en 50 langues .
algorithmshark
@Ypnypn Ce n'est pas un doublon, n'est-ce pas? Je veux dire que c'est pour faire la boucle aussi longtemps que possible avec un bris d'égalité de la longueur du code source. Personne n'a jamais eu la chance de poster une longueur 4 Ouroborous auparavant :) Une boucle est également différente d'une chaîne.
Il est en fait très similaire à celui-ci , mais cela ne nécessitait pas de boucle pour la séquence, il n'y avait donc pas de composant quine.
Martin Ender
4
La bête des 50 langues semble être gagnante avant même que nous commencions.

Réponses:

8

Voici une boucle de 4 langues:

C -> Bash -> Lot -> 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);}

Frapper

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

Lot

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
la source
Très impressionnant!