ICFP Programming Contest 2006

La découverte

Un pote me montre ce concours d'informatique. Je n'en avais jamais fait mais je décide de relever le défi pour le fun car le concours est terminé.

Après quelques hésitations dans la compréhension du sujet, je me lance dans l'écriture en PHP d'un parser pour essayer de voir ce que ce petit programme à déchiffrer (codex) faisait. Quelle naïvité ! Ce programme n'avait rien de petit, c'est un concours de haut niveau.

Je commence donc à développer la machine virtuelle en C car c'est le langage que je maitrise le mieux. C'est assez simple mais j'ai commis quelques petites erreurs bêtes :
- dans LoadProg, j'effaçais le programme dans certains cas
- je gérais mal le pointeur d'instruction (visible après un LoadProg)
- dans Alloc, j'ai fait un mauvais copier-coller
- je ne lisais pas le fichier source jusqu'au bout
- dans Input, je n'utilisais pas la bonne fonction de lecture clavier

Que le début !

Finalement, ma VM tourne correctement mais est assez lente. Des optimisations seront nécessaires mais je ne sais pas trop lesquelles, j'ai trouvé quelques idées sur le net. Certains ont même implémenté un compilateur "Just-In Time" : assez compliqué...

L'exécution du codex de 2Mo permet de décompresser, à l'aide d'une clé, un nouveau programme de 15Mo ! Celui-ci simule rien de moins qu'un OS où l'on doit se loguer et taper des commandes de type unix. On accède donc à plusieurs puzzles géants que l'on doit résoudre pour gagner des points.

On peut se demander comment les concepteurs ont réalisé un concours aussi malicieux qu'innovant (le décodage d'un mystérieux programme extra-terrestre). Je pense qu'ils ont d'abord développé un compilateur qui génère du code "alien" puis le programme des puzzles et enfin l'algorithme de compression.

Login Guest

C'est la première étape et l'obtention des premiers points (voir les solutions). La lecture d'un mail venu de l'espace nous pose la première tâche : hacker les mots de passe des utilisateurs de ce système en utilisant et améliorant un programme en langage BASIC. C'est facile et donne 2 mots de passe en recherche simple et 1 en recherche étendue. Total : 225pts

Login Howie

Au début, on se dit chouette un jeu d'aventure en mode texte comme au bon vieux temps, mais non c'est un concours d'informatique, ca aurait été trop simple... On découvre un problème à base de piles et de dépendances. Je n'ai pas encore réussi à le modéliser pour le résoudre. Total : 30pts

Login Ohmega

Il faut créer des programmes dans un langage "2D" dessiné en ASCII.

Login Ftd

L'exécutable icfp.exe permet d'obtenir 3 comptes administrateurs à condition d'avoir un score suffisant (1006, 2006 et 3006). A priori, il n'y a rien d'autres à faire ici. Total : 100pts

Login Hmonk

Il semble s'agir d'un langage formel...

Login Yang

Il semble falloir créer des programmes dans un langage dit "équilibré".

Login Gardener

Mot de passe inconnu

Login Bbarker

Mot de passe inconnu

Score total : 355 points