Une quine en informatique, c’est un programme qui, quand il est exécuté, affiche un code source qui permet d’obtenir le même résultat. La plupart des quines affichent leur propre code. Évidement, ouvrir le fichier de code et l’afficher ne compte pas comme une quine valide…
C’est un exercice beaucoup plus difficile qui n’en à l’air, même si normalement tout langage turing complet en est capable.
Techniquement, la quine la plus courte en Python est un fichier vide, ce qui est une quine valide. Mais comme ce n’est pas très fun, voici un exemple court avec des vrais caractères ASCII dedans:
a='a=%s;print a%%`a`';print a%`a` |
Notez l’emploie de variables qui ne servent à rien d’autre que d’optenir une forme de symétrie.
Une autre version plus longue :
b='\\';g='"';p='%';s="b='%s%s';g='%s';p='%s';s=%s%s%s;print s%s(b,b,g,p,g,s,g,p)";print s%(b,b,g,p,g,s,g,p) |
Beaucoup de quines utilisent ce principe de créer une chaîne contenant une partie du programme et d’afficher et évaluer la chaîne en même temps. Parfois avec des boucles :
x = ['print "x =", x', 'for m in x: print m'] print "x =", x for m in x: print m |
En Python, on peut évidement faire des variantes avec sys.write
, exec
, etc. Voici un article qui liste des snippets tordus et sympathiques pour y arriver.
Pour les plus tarés, il y existe des quines mathématiques. Une formule dont la courbe… représente la formule O_o !
Ça ne sert strictement à rien, mais c’est dimanche, personne ne va lire cet article de toute façon.
C’est vrai, je ne l’ai pas lu.
Quine préférerait pas passer son dimanche à faire des choses plus utiles ?
goto 10
D’autre exemple / info ici => http://blog.rom1v.com/2011/11/programmes-auto-reproducteurs-quines/
obtenir*
Je vais essayer ça, en tant que grand débutant en C. Merci d’occuper mon Dimanche.
On a venu, on a lu, et on a ru.
C’est Dimanche; jour de foie gras.
J’ai lu la page de David Madore, il y a longtemps, et il se casse la tête à faire ça en C.
http://www.madore.org/~david/computers/quine.html
Hey! C’est Black Adder, pas Mr. Bean.