mjeanroy.dev

Advent Of Code 2020

Cette année, pour la première fois, j’ai décidé de résoudre les puzzle du concours Advent Of Code.

Voici un petit bilan de ce que j’ai appris, et ce que j’en ai pensé.

Pour les plus impatients, vous pouvez allez voir toutes mes solutions sur mon repo GitHub: https://github.com/mjeanroy/adventofcode

🏆 Le concours

Pour commencer, résumons en 3 phrases ce qu’est l’Advent Of Code : c’est une série de challenges à résoudre, chaque jour de décembre jusqu’au 25 décembre (un peu à la manière d’un calendrier de l’avent, d’où son nom). Chaque challenge doit être résolu le plus vite possible, le plus rapide à soumettre sa réponse récoltant le plus de points en jeu.

A la fin de chaque journée, vous pouvez accéder au classement du jour, par exemple ici pour le jour 20 de cette année. Le 25 décembre, le classement final est donc figé et le grand vainqueur est celui ayant récolté le plus de points sur tout le mois.

Bon, autant l’annoncer tout de suite, je n’ai jamais eu l’objectif de réellement participer au concours, être disponible dès la mise en ligne du puzzle est clairement incompatible avec ma vie de parent (et même sans ça, je serais de toute façon loin d’être parmi les 100 plus rapide) !

Mon seul objectif était juste d’arriver au bout des 50 puzzles, et c’est aujourd’hui que je suis arrivé au bout.

🧩 Les puzzles

Chaque challenge est vraiment fun, les puzzle sont vraiment de qualité, avec à chaque fois un petit scénario qui rend le jeu un peu plus amusant, bref j’ai adoré la “mise en scène”.

Chaque puzzle est en fait une question de code ou plutôt d’algorithmique, et accessible à tout niveau: en fait, il est possible de résoudre un puzzle sans utiliser la solution “optimale”, et c’est d’ailleurs l’une des seule façon de résoudre un puzzle le plus vite possible pour gagner des points (“make it works, then make it fast”).

Pour moi qui adore ce genre de question d’algorithmique, j’ai adoré car ces 50 puzzles ont été l’occasion de manipuler:

  • Les “classiques” Map et des Set
  • Des stacks
  • Des queues
  • Des graphes, et du parcours de graphe
  • Des tableaux à deux dimensions, voire à trois dimensions
  • Une LinkedList circulaire
  • Des RegExp
  • Etc.

Bref, cela permet de se replonger dans certains concepts / certains structures de données qu’on n’a pas forcément l’habitude de manipuler au quotidien, et rien que pour ça, je vous conseille de vous lancer ! Chaque puzzle a été l’occasion de réfléchir à la meilleure structure de données à utiliser pour résoudre mon problème, et éviter le plus possible la solution O(n^2).

⏱️ Combien de temps ça prend ?

Cette année, je me suis vraiment lancé dans les challenges autour du 4 ou 5 décembre (il y avait déjà plusieurs puzzles accessibles). Au début, je suis allé très vite, on va dire que chaque puzzle me prenait quelques minutes (entre 5 et 20 mns tout au plus).

Mais je me suis vite rendu compte que les jours passant, la complexité augmentait progressivement ! Le point culminant a été le jour 20 qui m’a pris, je dirais, entre 15 et 20 heures (croyez moi, il m’a rendu fou ce puzzle) !

Au final, si j’exclue le jour 20, je dirais que chaque journée de l’advent of code m’a nécessité en moyenne entre 30 mns et 2h de dev (comprendre le problème + implémenter une première solution + optimiser la solution).

🚀 Conclusion

Cette année, j’ai réalisé chaque puzzle en JavaScript mais je pense que je vais ré-essayer de ré-implementer chaque solution dans un langage que je ne connais pas (python, go, ?) histoire de découvrir un nouvel univers 😀

Pour ceux que ça intéresse, vous pourrez retrouver toutes mes solutions commentées et testées ici.

Je finis cet advent of code 2020 avec quasiment deux semaines de retard, mais ce n’est pas bien grave, j’attends l’année prochaine avec impatience !

Et puis tiens, je ferai sans doute un article pour détailler ma solution du jour 20 🤪