Sam & Max » quine http://sametmax.com Du code, du cul Sat, 07 Nov 2015 10:56:13 +0000 en-US hourly 1 http://wordpress.org/?v=4.1 Quine en Python 6 http://sametmax.com/quine-en-python/ http://sametmax.com/quine-en-python/#comments Sun, 17 Nov 2013 07:05:36 +0000 http://sametmax.com/?p=7967 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.

]]>
http://sametmax.com/quine-en-python/feed/ 6