AoC 2021 Jour 0: Commencement

Le début d’une grande aventure !

Cette année, j’ai découvert l’Advent Of Code. Ce site géré de manière bénévole par Eric Wastl sur son temps libre met à disposition des puzzles sur un thème différent d’une année sur l’autre. Ces petits puzzles sont à résoudre à l’aide d’un programme informatique ou d’un algorithme que l’on est sensé imaginer et mettre en oeuvre, pour, à partir d’un fichier d’entrée qui nous est propre, donner un résultat à troquer sur le site du challenge en échange d’une étoile. Le langage et la manière d’obtenir le résultat sont libres, mais faire les défis “à la main” est rarement possible (en tous cas en temps humain). Pendant tout le mois de décembre, un défi est publié chaque jour du 1er au 25. Ils sont systématiquement découpés en 2 parties, la seconde n’étant accessible qu’une fois la première résolue. En échange d’une réponse valide au problème, une étoile nous est donnée, pour avoir un total de 50 étoiles par an.

Il n’y a pas de pénalité si le puzzle n’est pas résolu dans la journée, mais un leaderboard est disponible, et les 100 premiers à résoudre les puzzles obtiennent des points sur leur profil. C’est comme cela que j’ai découvert qu’il existait une discipline de Programmation Compétitive.

Cette année, le thème c’était la quête de la clé du traîneau du Père Noël au fond d’une crevasse sous-marine, armé d’un petit sous-marin, et rencontrant au passage une faune et flore locale diverse.

Vue de l'intérieur d'un sous-marin d'exploration. Photo par Michael Mrozek pour Unsplash.

J’ai déjà résolu les 25 jours et obtenu mes 50 étoiles, je souhaite maintenant raconter ici mon aventure, jour après jour, et les algorithmes que j’ai mis en place.

Pourquoi

J’ai choisi de participer à cet évènement pour différentes raisons :

Comment

Mes algorithmes sont implémentés en Rust, un langage que j’aime beaucoup, pour différentes raisons qui sont hors sujet par rapport à cette série d’articles. Un article spécifique sur ce qui me plaît dans ce langage de programmation arrivera peut-être plus tard.

Mon but était de résoudre les puzzles en temps limité, si possible en moins d’une journée, et que le programme final donne sa réponse le plus rapidement possible. Si après 3 jours à travailler sur un puzzle, il donne une réponse en 300ms, cela me convient. Le but n’étant pas ici de faire des algorithmes optimaux.

Chaque jour a été mis à disposition sur gitlab.

Beurk

Vous trouvez le code illisible ? C’est normal.

J’ai tendance dans mes programmes à avoir de mauvaises habitudes, hostiles à la relecture de code. J’ai tendance à utiliser par exemple des variables dont le nom se résume à une unique lettre. J’ai aussi tendance à vouloir produire un fichier source le plus court possible (tout en respectant les standards du langage utilisé). Le code fourni est alors un bloc compact difficile à lire.

J’ai donc décidé de me faire subir le même sort que celui réservé à mes collègues lorsqu’il doivent relire mon code, afin de me faire perdre ces mauvaises habitudes. (spoiler: c’était efficace)

À suivre

Seront publiés sur ce blog différents articles retraçant et expliquant jour après jour ce que mes algorithmes et programmes font pour résoudre les différents défis.