summaryrefslogtreecommitdiff
path: root/articles/retour-sur-laoc-2021-semaine-1.md
diff options
context:
space:
mode:
Diffstat (limited to 'articles/retour-sur-laoc-2021-semaine-1.md')
-rw-r--r--articles/retour-sur-laoc-2021-semaine-1.md41
1 files changed, 27 insertions, 14 deletions
diff --git a/articles/retour-sur-laoc-2021-semaine-1.md b/articles/retour-sur-laoc-2021-semaine-1.md
index 32dece0..0d7da3c 100644
--- a/articles/retour-sur-laoc-2021-semaine-1.md
+++ b/articles/retour-sur-laoc-2021-semaine-1.md
@@ -1,10 +1,25 @@
-# Un petit retour sur [l'Advent of Code 2021](https://adventofcode.com/2021/about)
+---
+
+pubDate = 2021-12-29
+tags = ['algorithmique', 'GAFAM', 'programmation']
+
+[author]
+name = "ache"
+email = "ache@ache.one"
+
+---
+
+Un petit retour sur l'AOC 2021
+==============================
![Image de l'AoC](res/aoc.png)
-Le concept est simple. **Chaque jour du calendrier de l'avent vous devez résoudre un exercice de programmation** (dit des *puzzles*) qui comporte deux niveaux de difficulté. Tout ceci est mis en contexte puisque vous aidez [les lutins](https://fr.wikipedia.org/wiki/Lutin) du père Noël (ici des elfes, mais on France on parle de lutin !) à récupérer les clés du traîneau ... Oui le traîneau du père Noël a des clés, et un lutin les a fait tomber dans l'océan. Ne vous arrêtez pas *déjà* à la narration car ça va devenir encore plus improbable !
+[L'Advent of Code 2021](https://adventofcode.com/2021/about), le concept est simple. **Chaque jour du calendrier de l'avent vous devez résoudre un exercice de programmation** (dit des *puzzles*) qui comporte deux niveaux de difficulté. Tout ceci est mis en contexte puisque vous aidez [les lutins](https://fr.wikipedia.org/wiki/Lutin) du père Noël (ici des elfes, mais on France on parle de lutin !) à récupérer les clés du traîneau ... Oui le traîneau du père Noël a des clés, et un lutin les a fait tomber dans l'océan. Ne vous arrêtez pas *déjà* à la narration car ça va devenir encore plus improbable !
Je vais donc écrire quatre *relativement* cours billets sur les exercices de chaque semaine.Avant de parler des exercices, je vous fais un retour rapide sur mon sentiment global après un petit mois.
+Sommaire
+--------
+
## Ce que j'en aie pensé
Tout d'abord, c'est très intéressant comme défi. C'est avant tout un défis personnel un peu comme [l'Inktober](https://inktober.com/) (un défis d'un mois où chaque jour vous devez dessiner un dessin sur un thème “fixé” à l'avance). J'ai personnellement bien aimé et je recommencerais l'année prochaine si possible.
@@ -45,12 +60,12 @@ Mais j'ai vu d'autres codes que je traduis en Python :
with open("input") as f:
input = list(map(int, f.read().strip().split()))
# On compte 1 pour chaque paire d'éléments dont le premier est inférieur au second.
- print(sum(1 for
+ print(sum(1 for
prev, cur in zip(input, input[1:]) if prev < cur
))
~~~
-La difficulté 2 est de faire ceci sur une fenêtre de trois valeurs. En premier lieux, on pense à sommer tous les triplets successifs puis d'appliquer l'algorithme précédent. Mais en fait, il y a plus simple. Un triplet est plus grand si la valeur qu'on lui retire est plus petite que celle qu'on ajoute.
+La difficulté 2 est de faire ceci sur une fenêtre de trois valeurs. En premier lieux, on pense à sommer tous les triplets successifs puis d'appliquer l'algorithme précédent. Mais en fait, il y a plus simple. Un triplet est plus grand si la valeur qu'on lui retire est plus petite que celle qu'on ajoute.
Mon code est devenu un peu répétitif :
@@ -75,7 +90,7 @@ Là où celui d'autres personnes à été très peu adapté puisque qu'ils n'ont
~~~py
with open("input") as f:
input = list(map(int, f.read().strip().split()))
- print(sum(1 for
+ print(sum(1 for
prev, cur in zip(input, input[3:]) if prev < cur
))
~~~
@@ -117,7 +132,7 @@ with open('input') as f:
detph -= num
print( horizon * detph) # On nous demande ce nombre pour vérifier la simultation
-~~~
+~~~
La difficulté 2 est peu différente. Cette fois-ci, on doit calculer la visée ? (`aim` en anglais) du sous-marin. Qui elle-même influe les actions du sous-marin.
@@ -166,7 +181,7 @@ Vous avez pour ça une suite de nombre binaire :
On doit chercher le bit le plus courant pour chiffre de cette liste de nombre binaire. Dans la première colonne cela nous donne `1` car c'est le nombre le plus courant. Pour chacun des indices ça donne `10110` soit 22 en décimal, cette valeur est le taux *gamma*. Le taux epsilon est similaire mais avec le bit le moins courant.
-Bon ben c'est parti pour coder ça. J'ai d'abord fait [un truc bien moche dont je suis pas fière](articles/res/code1_j03_aoc.py).
+Bon ben c'est parti pour coder ça. J'ai d'abord fait [un truc bien moche dont je suis pas fière](res/code1_j03_aoc.py).
Si je devais le ré-écrire ça donnerait plutôt ça :
@@ -197,7 +212,7 @@ En avant pour la partie 2 !
Cette fois-ci on doit itérer plusieurs fois sur les valeurs (c'est la première fois que l'on doit faire ça) et à chaque fois ne garder que les valeurs qui ont le plus n^ième^ bit le plus (le moins pour l'autre donnée) courant. On continue jusqu'à ce qu'il n'y en ait plus qu'un.
-Bon ben là, j'ai dû tout refaire mon code. Mais j'ai quand même fait [un code pas super propre](articles/res/code2_j03_aoc.py).
+Bon ben là, j'ai dû tout refaire mon code. Mais j'ai quand même fait [un code pas super propre](res/code2_j03_aoc.py).
Ouais, y a un bon gros copier/coller. Bon si je devais le recoder j'aurais fait ça :
~~~py
@@ -235,7 +250,7 @@ C'est là même pensé que mon précédant code mais en plus concis et plus clai
Je vous assure vous êtes pas prêt. Le sous-marin se fait attraper pas un [calamar géant](https://fr.wikipedia.org/wiki/Calmar_g%C3%A9ant). Et ...
-> Peut-être veut-il jouer au [Bingo](https://fr.wikipedia.org/wiki/Bingo) ?
+> Peut-être veut-il jouer au [Bingo](https://fr.wikipedia.org/wiki/Bingo) ?
> *[Jour 4](https://adventofcode.com/2021/day/4) !*
Ça tombe bien le sous-marin a un système permettant de jouer au Bingo pour occuper ses passagers. 🤦
@@ -379,7 +394,7 @@ for s in segs:
y1 -= 1
elif y1 < y2:
y1 += 1
-
+
pts[(x1, y1)] += 1
~~~
@@ -424,10 +439,10 @@ Que je trouve assez satisfaisant.
On rencontre des poissons-lanternes ! Stupéfait par le nombre, on décide de *modéliser leur [taux de croissance](https://fr.wikipedia.org/wiki/Taux_de_croissance_relative)* que l'on imagine être exponentiel !
Pour vérifier ça, on va faire l'hypothèse que chaque poisons-lanternes donne un nouveau poisson lanternes tous les 7 jours. Pourquoi ? Ben pourquoi pas. Les clés du traineau peuvent bien attendre, la curiosité scientifique ne peut pas !
-> [I heard you like lanternefish](https://adventofcode.com/2021/day/6) !
+> [I heard you like lanternefish](https://adventofcode.com/2021/day/6) !
> *Jour 6*
-[![Un poisson lanterne](articles/res/Lobianchia_dofleini.jpg)](https://commons.wikimedia.org/wiki/File:Lobianchia_dofleini.jpg)
+[![Un poisson lanterne](res/Lobianchia_dofleini.jpg)](https://commons.wikimedia.org/wiki/File:Lobianchia_dofleini.jpg)
Une dernière supposition, un poisson lanterne arrive à maturité en 2 jours. Oui, c'est pris au pif mais ça semble pas trop mal. Le sous-marin nous donne l'age (enfin l'état du compteur interne de gestation) des poisson-lanternes des alentours. Par exemple `3,4,3,1,2`. Chaque jour ce compteur diminue de 1 et dès qu'un poisson passe en dessous de 0, il crée un nouveau poisson et son compteur se remet à 6.
@@ -527,5 +542,3 @@ On peut facilement comparer ces exercices à ceux de [France-IOI](http://www.fra
Je reviendrais dans quelques semaines pour vous parler de la semaine 2 de l'Advent of Code. Mon rythme de publication est très faible alors ne vous étonnez pas si vous n'avez pas de nouvelles avant le mois de Mars.
[Divulgâchage](https://fr.wiktionary.org/wiki/divulg%C3%A2cher), ça va se corser un peu !
-
-<div class="pubdate">Publié le 29 Décembre 2021</div>