Analyse du code xmas.c
- Le code C nommé
xmas.c, créé en 1988, a remporté le Concours international de code C obscurci.
- Ce code est plus petit que sa sortie, et propose une nouvelle direction pour les standards de compression de texte.
- Si on le compile et qu’on l’exécute, il fonctionne sans paramètre et, de façon amusante, donne l’impression d’avoir été tapé au hasard sur un clavier.
Sortie du code
- Lorsqu’on exécute le code, il affiche les paroles de la chanson « The Twelve Days of Christmas ».
- Le contenu affiché est constitué des paroles énumérant les cadeaux du premier au douzième jour de Noël.
Analyse
- Pour comprendre le code, il faut le réécrire sous une forme plus lisible.
- Ce travail de réécriture révèle qu’il déchiffre un chiffrement par substitution à l’aide de certaines chaînes spécifiques.
- La variable
t joue un rôle important dans le contrôle du sens de la récursion.
- Le code déchiffre ce chiffrement par substitution via la récursion, puis affiche les paroles de la chanson de Noël.
Simplification
- Une fois le programme compris, on peut le simplifier en utilisant certaines boucles et des fonctions de la bibliothèque de chaînes de C.
- À terme, cette simplification peut réduire le code à un simple affichage des paroles.
L’avis de GN⁺
- Un sommet de créativité : le code
xmas.c est un excellent exemple d’écriture de code obscurci à l’aide d’un chiffrement par substitution et de la récursion. Il montre comment la créativité peut s’exprimer en programmation.
- Valeur pédagogique : analyser et comprendre ce code peut constituer un très bon exercice pour aider des ingénieurs logiciels débutants à améliorer leurs compétences en programmation.
- Plaisir et intérêt : ce code offre l’occasion de découvrir l’aspect ludique de la programmation et le plaisir de résoudre des problèmes complexes.
1 commentaires
Avis Hacker News
Il existe un exemple similaire dans le monde de TeX :
xii.texpdftex, on peut obtenir un résultat différent de ce qui est attendu. C’est visible sur shreevatsa.net.Ce code fait penser à la complexité de Kolmogorov :
J’avais reçu ce code lors de sa publication initiale, mais sous un autre nom de fichier :
L’IOCCC (International Obfuscated C Code Contest) est toujours bien vivant en 2023 :
En désactivant les avertissements, cela fonctionne aussi sur le dépôt de code moderne (trunk) :
Rosetta Code propose aussi quelque chose de similaire :
Je garde un bon souvenir du moment où, au dernier semestre à l’université, un professeur a montré cet extrait de code au début d’un cours :
À l’époque de mes études, ce code figurait dans des supports imprimés pour apprendre le langage C, et je me souviens l’avoir retapé moi-même une fois :
Ce code utilise une très ancienne version du langage C :
L’un des aspects intéressants de l’IOCCC est le lien entre le fait que Larry Wall l’a remporté deux fois et qu’il ait ensuite conçu Perl :