# The Advent of Code

**URL:** <https://discuss.afpy.org/t/the-advent-of-code/136>\
**Category:** Python\
**Created:** [Décembre 23, 2020, 3:48 UTC](https://discuss.afpy.org/t/the-advent-of-code/136 "2020-12-23T15:48:13Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![debnet](https://discuss.afpy.org/user_avatar/discuss.afpy.org/debnet/32/7_2.png) [@debnet](https://discuss.afpy.org/u/debnet)\
**Post date:** [Décembre 23, 2020, 3:48 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/1 "2020-12-23T15:48:13Z")

</div>

_Bon, je m’y prends un peu tard car je n’avais pas pensé à en faire un sujet avant que @asyd ne me le souffle dans l’oreille ce matin…_

Si vous trainez sur IRC, vous n’êtes sans doute pas passé à côté du petit défi annuel qui nous anime en cette période, je veux bien sûr parler de l’[Advent of Code](https://adventofcode.com/).

Il s’agit d’une petite compétition qui existe désormais depuis de nombreuses années et qui rassemble des milliers de développeurs dans le monde.

Le but du jeu est simple : vous avez un énoncé (en anglais) d’un problème à résoudre ainsi qu’un “input” personnalisé (les données sont différentes pour tout le monde). Avec cela et armé de votre langage préféré (que j’espère être Python évidemment 😛), vous devez résoudre le problème et fournir le résultat au site.

Comme un calendrier de l’Avant, vous avez un problème à résoudre par jour avec une difficulté croissante dans le temps (c’est subjectif). Chaque problème est en deux parties, la première faisant office d’introduction au problème et la seconde vous demandant d’être plus créatif ou d’optimiser votre solution existante (et parfois de la refaire complètement car vous ne pouviez pas anticiper).

Les problèmes sortent tous les jours vers 6h du matin, un nombre défini de points est reversé aux joueurs qui iront le plus vite, mais il est possible de créer des leaderboards personnalisés si vous souhaitez vous challenger entre vous.

Bon après on ne va pas se mentir, le top 100 du classement est trusté par des monstres experts de ce genre d’énigmes et qui poussent le délire plus loin en ce mettant divers défis, comme des ultra optimisations en temps et/ou mémoire, l’usage d’un langage “non adapté” ou préhistorique, du [code-golfing](https://fr.wikipedia.org/wiki/Code_golf) où l’objectif est de faire le script le plus court possible (au point où certains ont même inventé leur propre langage pour cela…).

Bref, il est un peu “tard” pour créer un thread journalier sur cette petite compétition amicale, mais je vous encourage à y participer même avec du retard, le plus important c’est de s’amuser et de découvrir d’autres facette de son langage de programmation favori !

D’ailleurs plusieurs membres y participent, vous pouvez retrouver leurs dépôts ici :

- @mdk [mdk/aoc2024 - aoc2024 - Le Gitea de l'AFPy](https://git.afpy.org/mdk/aoc2024)
- @entwanne [advent-of-code/2024 at 2024 · entwanne/advent-of-code · GitHub](https://github.com/entwanne/advent-of-code/tree/2024/2024)
- @debnet [GitHub - debnet/AdventOfCode2024: Advent of Code 2024](https://github.com/debnet/AdventOfCode2024)
- @tut-tuuut [advent-of-code-shiny-giggle/2024 at main · tut-tuuut/advent-of-code-shiny-giggle · GitHub](https://github.com/tut-tuuut/advent-of-code-shiny-giggle/tree/main/2024)
- @lythari [GitHub - lythari/aoc2024: Advent Of Code 2024](https://github.com/lythari/aoc2024)
- @Melcore [GitHub - jeanlapostolle/AOC24](https://github.com/jeanlapostolle/AOC24)
- @dancergraham [advent\_of\_code\_2024/advent\_of\_code\_2024 at main · dancergraham/advent\_of\_code\_2024 · GitHub](https://github.com/dancergraham/advent_of_code_2024/tree/main/advent_of_code_2024)
- [GitHub - maxence-fasst/aoc2024](https://github.com/maxence-fasst/aoc2024)

La liste n’est pas exhaustive, n’hésitez pas à me le dire si vous souhaitez que je rajoute le votre.  
Comme vous pourrez peut-être le constater, il n’y a pas qu’une seule manière de résoudre les problèmes donnés, vous pouvez être sûrs que chacun aura sa propre méthode, ce qui en fait un outil riche d’enseignements !

Egalement, sachez que la communauté autour de ce jeu est très active sur Reddit, je vous encourage à aller jeter un oeil, ça débat parfois vivement mais on y apprend des choses intéressantes !

---

<div class="post-metadata">

**Author:** ![albatros](https://discuss.afpy.org/letter_avatar_proxy/v4/letter/a/278dde/32.png) [@albatros](https://discuss.afpy.org/u/albatros)\
**Post date:** [Décembre 25, 2020, 10:36 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/2 "2020-12-25T10:36:24Z")

</div>

Bonjour,  
J’ai aussi participé cette année pour la première fois ([https://github.com/albatros69/aoc-2020](https://github.com/albatros69/aoc-2020)).  
Y-a-t il un leaderbord privé de l’AfPy ?  
À+

---

<div class="post-metadata">

**Author:** ![dancergraham](https://discuss.afpy.org/user_avatar/discuss.afpy.org/dancergraham/32/264_2.png) [@dancergraham](https://discuss.afpy.org/u/dancergraham)\
**Post date:** [Décembre 28, 2020, 9:01 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/3 "2020-12-28T21:01:40Z")

</div>

Bonjour,

Voici mes solutions cette année : [GitHub - dancergraham/advent\_of\_code\_2020: Advent of Code 2020](https://github.com/dancergraham/advent_of_code_2020)

39 étoiles jusqu’ici…

---

<div class="post-metadata">

**Author:** ![mdk](https://discuss.afpy.org/user_avatar/discuss.afpy.org/mdk/32/3_2.png) [@mdk](https://discuss.afpy.org/u/mdk)\
**Post date:** [Janvier 4, 2021, 10:07 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/4 "2021-01-04T10:07:58Z")

</div>

> [@albatros](#):
>
> Y-a-t il un leaderbord privé de l’AfPy ?

Pas a ma connaissance.

---

<div class="post-metadata">

**Author:** ![mdk](https://discuss.afpy.org/user_avatar/discuss.afpy.org/mdk/32/3_2.png) [@mdk](https://discuss.afpy.org/u/mdk)\
**Post date:** [Janvier 4, 2021, 10:08 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/5 "2021-01-04T10:08:40Z")

</div>

> [@dancergraham](#):
>
> 39 étoiles jusqu’ici…

haha pareil ! après c’était les vacances on va dire 🙂

---

<div class="post-metadata">

**Author:** ![dancergraham](https://discuss.afpy.org/user_avatar/discuss.afpy.org/dancergraham/32/264_2.png) [@dancergraham](https://discuss.afpy.org/u/dancergraham)\
**Post date:** [Janvier 7, 2021, 10:29 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/6 "2021-01-07T10:29:06Z")

</div>

Pour le [jour 17](https://adventofcode.com/2020/day/17) j’ai fait quelques visualisations sous Rhino3D, scripté en IronPython 2.7:

J’ai fait des sphères car il ne faut qu’un centre et radius alors qu’il faut définir les 8 vertices dans le bon ordre pour créer des cubes ! Simple à faire mais pas envie 🙃

 ![3](https://discuss.afpy.org/uploads/default/original/1X/2e4babc490ab7c01e3fed9ca0a96b1706af96928.jpeg) ![4](https://discuss.afpy.org/uploads/default/original/1X/4407d2c1ddbe9b7d3ecc3845a4b3576f0d6e012a.jpeg) ![5](https://discuss.afpy.org/uploads/default/original/1X/9ba94ab8234395b30743010ad7333babb727009b.jpeg)

Mon script :

```python
import rhinoscriptsyntax as rs
import Rhino
from itertools import permutations
from collections import defaultdict

def conway_cubes(rounds, draw = True, dimensions = 2):
    rs.EnableRedraw(False)

    # Example from the puzzle
    state = """.#.
..#
###"""

    # My puzzle input
    state = """..#..##.
#.....##
##.#.#.#
..#...#.
.###....
######..
.###..#.
..#..##."""

    
    new_cubes = set()
    # Build the starting grid
    for y, row in enumerate(state.splitlines()):
        for x, cell in enumerate(row):
            if cell == '#':
                new_cubes.add((x,y) + (0,) * (dimensions - 2))
    
    # Initialise sets and lists 
    old_spheres = []
    neighbouring = set(permutations([1,0,-1]* dimensions,dimensions)) 
    neighbouring.remove((0,)*dimensions) # a cube is not its own neighbour
    
    for round in range(rounds+1):
        cubes = new_cubes.copy()
        rs.DeleteObjects(old_spheres)
        neighbours = defaultdict(int)
        old_spheres=set()
        answer = 0
        
        # Draw cubes and identify neighbours
        for cube in cubes:
            if draw:
                old_spheres.add(rs.AddSphere(cube[:min(3,dimensions)], 0.6))
            answer += 1
            for n in neighbouring:
                neighbours[tuple(cube[i] + n[i] for i in range(dimensions))] += 1
        new_cubes = set()
        rs.Redraw()
        
        # Apply rules for creation of cubes in next round
        for location, n in neighbours.iteritems():
            if location in cubes:
                if 2 <= n <= 3:
                    new_cubes.add(location)
            elif n == 3:
                new_cubes.add(location)
    rs.EnableRedraw()
    print(answer)

if __name__ == ' __main__':
    conway_cubes(rounds = 6, draw = True, dimensions =4)
```

---

<div class="post-metadata">

**Author:** ![dancergraham](https://discuss.afpy.org/user_avatar/discuss.afpy.org/dancergraham/32/264_2.png) [@dancergraham](https://discuss.afpy.org/u/dancergraham)\
**Post date:** [Décembre 5, 2021, 10:08 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/7 "2021-12-05T10:08:41Z")

</div>

Il est temps de s’y remettre…

> **[GitHub - dancergraham/advent\_of\_code\_2021: Solutions to the code challenges at...](https://github.com/dancergraham/advent_of_code_2021)**
>
> Solutions to the code challenges at adventofcode.com

---

<div class="post-metadata">

**Author:** ![debnet](https://discuss.afpy.org/user_avatar/discuss.afpy.org/debnet/32/7_2.png) [@debnet](https://discuss.afpy.org/u/debnet)\
**Post date:** [Décembre 13, 2021, 4:48 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/8 "2021-12-13T16:48:47Z")

</div>

Ma contribution pour cette année ! 🙂

> **[GitHub - debnet/AdventOfCode2021: Advent of Code 2021](https://github.com/debnet/AdventOfCode2021)**
>
> Advent of Code 2021

---

<div class="post-metadata">

**Author:** ![tut-tuuut](https://discuss.afpy.org/user_avatar/discuss.afpy.org/tut-tuuut/32/1770_2.png) [@tut-tuuut](https://discuss.afpy.org/u/tut-tuuut)\
**Post date:** [Novembre 22, 2024, 12:00 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/9 "2024-11-22T12:00:29Z")

</div>

Je déterre le sujet. Est-ce que quelqu’un est chaud·e pour jouer à l’Advent of Code cette année ? Moi GRAVE. 🔥

C’est un challenge qui est cher à mon cœur car c’est lui qui a mené à ma découverte de Python et ma professionnalisation dans ce langage.

J’ai fait l’AoC en PHP en 2018. Je me suis cassé les dents méchamment sur un djikstra fin décembre… Je suis allée voir sur le reddit comment faisaient les autres, et j’ai vu un gars qui a résolu le truc en une ligne de `networkx`. J’étais un peu contrariée et surtout très intriguée. Alors j’ai testé Python en 2019 et 2020 et je suis allée de 🤩 en 😻 avec l’aide de quelques Twittos bienveillants.

Fin 2020 j’ai posté un tweet mi-blague mi-sérieux qui disait en substance “est-ce que quelqu’un cherche une développeuse PHP qui voudrait faire du Python ?” et la réponse était oui. (C’était [Jean-Michel](https://oc.todon.fr/@mrjmad) !)  
Donc en janvier 2021 j’ai été embarquée sur un projet pro Django sans savoir ce que c’était, et ça s’est _très_ bien passé.

Bref tout ça pour dire que j’aime bien l’AoC et que j’aimerais le refaire cette année. Je peux partager mon leaderboard si ça vous dit. Il y a du monde dessus, mais plus on est de fous plus on rit.

Edit. Mon dépôt : [GitHub - tut-tuuut/advent-of-code-shiny-giggle: Code used to solve https://adventofcode.com/](https://github.com/tut-tuuut/advent-of-code-shiny-giggle)

Mon objectif cette année est de comprendre comment faire marcher proprement cet import de package sans faire un copier-coller dégueu… 🙈

---

<div class="post-metadata">

**Author:** ![entwanne](https://discuss.afpy.org/user_avatar/discuss.afpy.org/entwanne/32/8_2.png) [@entwanne](https://discuss.afpy.org/u/entwanne)\
**Post date:** [Novembre 22, 2024, 12:25 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/10 "2024-11-22T12:25:14Z")

</div>

Oui on est plusieurs à envisager de le faire cette année

---

<div class="post-metadata">

**Author:** ![dancergraham](https://discuss.afpy.org/user_avatar/discuss.afpy.org/dancergraham/32/264_2.png) [@dancergraham](https://discuss.afpy.org/u/dancergraham)\
**Post date:** [Novembre 24, 2024, 8:36 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/11 "2024-11-24T08:36:14Z")

</div>

oui absolument! Je n’aurais sans doute pas assez de temps dispo pour battre mon record de 42​:star: (et tant mieux - j’aime ce chiffre 😉) mais je suis partant pour rejoindre un leaderboard.

Advent of code et Project Euler ont bien alimenté mon parcours d’apprentissage du Python!

---

<div class="post-metadata">

**Author:** ![debnet](https://discuss.afpy.org/user_avatar/discuss.afpy.org/debnet/32/7_2.png) [@debnet](https://discuss.afpy.org/u/debnet)\
**Post date:** [Novembre 24, 2024, 2:50 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/12 "2024-11-24T14:50:46Z")

</div>

Depuis la dernière fois où j’ai publié ce message, j’ai fait toutes les éditions intermédiaires jusqu’au bout avec ma collègue mathématicienne/statisticienne (vous n’avez pas idée à quel point ça simplifie la vie parfois de bien connaître les maths pour ce genre d’exercices).

Voici mes différentes contributions (ce sont tous des Jupyter Notebook car dans notre corps de métier c’est un peu notre outil phare et facile) :

- [GitHub - debnet/AdventOfCode2020: Advent of Code 2020](https://github.com/debnet/AdventOfCode2020)
- [GitHub - debnet/AdventOfCode2021: Advent of Code 2021](https://github.com/debnet/AdventOfCode2021)
- [GitHub - debnet/AdventOfCode2022: Advent of Code 2022](https://github.com/debnet/AdventOfCode2022)
- [GitHub - debnet/AdventOfCode2023: Advent of Code 2023](https://github.com/debnet/AdventOfCode2023)

Par contre je trouve l’idée du leaderboard basé sur la vitesse de résolution des exercices complètement stupide, et généralement je préfère ne pas mesurer cet aspect là dans ce genre de défi. Je préfère largement l’aspect collectif de se partager les techniques de résolution et les pistes de réflexion, ça fait progresser tout le monde et c’est beaucoup moins “tryhardeur”.

---

<div class="post-metadata">

**Author:** ![Mindiell](https://discuss.afpy.org/user_avatar/discuss.afpy.org/mindiell/32/10_2.png) [@Mindiell](https://discuss.afpy.org/u/Mindiell)\
**Post date:** [Décembre 1, 2024, 8:40 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/13 "2024-12-01T08:40:02Z")

</div>

On peut avoir le fameux leader board ? Je vais essayer de m’y mettre.

---

<div class="post-metadata">

**Author:** ![debnet](https://discuss.afpy.org/user_avatar/discuss.afpy.org/debnet/32/7_2.png) [@debnet](https://discuss.afpy.org/u/debnet)\
**Post date:** [Décembre 1, 2024, 9:23 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/14 "2024-12-01T09:23:16Z")

</div>

Ca serait peut être sympa de faire un thread partage d’idées/solutions pour cette éditions non ?

---

<div class="post-metadata">

**Author:** ![debnet](https://discuss.afpy.org/user_avatar/discuss.afpy.org/debnet/32/7_2.png) [@debnet](https://discuss.afpy.org/u/debnet)\
**Post date:** [Décembre 3, 2024, 9:48 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/15 "2024-12-03T09:48:55Z")

</div>

Voici les dépôts des compétiteurs actuels (depuis IRC), n’hésitez pas à m’indiquer le votre :

- @mdk [mdk/aoc2024 - aoc2024 - Le Gitea de l'AFPy](https://git.afpy.org/mdk/aoc2024)
- @entwanne [advent-of-code/2024 at 2024 · entwanne/advent-of-code · GitHub](https://github.com/entwanne/advent-of-code/tree/2024/2024)
- @debnet [GitHub - debnet/AdventOfCode2024: Advent of Code 2024](https://github.com/debnet/AdventOfCode2024)
- @tut-tuuut [advent-of-code-shiny-giggle/2024 at main · tut-tuuut/advent-of-code-shiny-giggle · GitHub](https://github.com/tut-tuuut/advent-of-code-shiny-giggle/tree/main/2024)
- @lythari [GitHub - lythari/aoc2024: Advent Of Code 2024](https://github.com/lythari/aoc2024)
- @Melcore [GitHub - jeanlapostolle/AOC24](https://github.com/jeanlapostolle/AOC24)
- @dancergraham [advent\_of\_code\_2024/advent\_of\_code\_2024 at main · dancergraham/advent\_of\_code\_2024 · GitHub](https://github.com/dancergraham/advent_of_code_2024/tree/main/advent_of_code_2024)

---

<div class="post-metadata">

**Author:** ![tut-tuuut](https://discuss.afpy.org/user_avatar/discuss.afpy.org/tut-tuuut/32/1770_2.png) [@tut-tuuut](https://discuss.afpy.org/u/tut-tuuut)\
**Post date:** [Décembre 3, 2024, 10:53 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/16 "2024-12-03T22:53:47Z")

</div>

Le lien vers mon dépôt est dans mon message fleuve, ci-dessus. Pour l’instant j’ai déjà eu la flemme en J2, ça s’annonce bien cette affaire.

---

<div class="post-metadata">

**Author:** ![debnet](https://discuss.afpy.org/user_avatar/discuss.afpy.org/debnet/32/7_2.png) [@debnet](https://discuss.afpy.org/u/debnet)\
**Post date:** [Décembre 3, 2024, 10:56 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/17 "2024-12-03T22:56:45Z")

</div>

> [@tut-tuuut](#):
>
> Le lien vers mon dépôt est dans mon message fleuve

Je n’avais pas fait attention, c’est mis à jour !

> [@tut-tuuut](#):
>
> Pour l’instant j’ai déjà eu la flemme en J2, ça s’annonce bien cette affaire.

Courage ! 😉

---

<div class="post-metadata">

**Author:** ![tut-tuuut](https://discuss.afpy.org/user_avatar/discuss.afpy.org/tut-tuuut/32/1770_2.png) [@tut-tuuut](https://discuss.afpy.org/u/tut-tuuut)\
**Post date:** [Décembre 3, 2024, 10:59 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/18 "2024-12-03T22:59:39Z")

</div>

Je suis allée jeter un coup d’œil aux autres codes viteuf, je voudrais juste vous signaler que le monsieur d’AoC demande explicitement, [sur cette page](https://adventofcode.com/2024/about), à ce qu’on ne commite pas les inputs :

> Advent of Code is free to _use_, not free to copy. If you’re posting a code repository somewhere, please don’t include parts of Advent of Code like the puzzle text or your inputs.

Envisagez donc d’ajouter `*.txt` dans votre `.gitignore` 🙂

---

<div class="post-metadata">

**Author:** ![debnet](https://discuss.afpy.org/user_avatar/discuss.afpy.org/debnet/32/7_2.png) [@debnet](https://discuss.afpy.org/u/debnet)\
**Post date:** [Décembre 3, 2024, 11:02 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/19 "2024-12-03T23:02:48Z")

</div>

> [@tut-tuuut](#):
>
> le monsieur d’AoC demande explicitement, [sur cette page](https://adventofcode.com/2024/about), à ce qu’on ne commite pas les inputs

Ah je l’ignorais, je comprends la raison pour les textes et les puzzles, mais j’aimerais bien savoir pourquoi ça inclut les inputs. Est-ce qu’il serait possible de rétro-ingéniérer le générateur d’inputs si on a suffisamment d’inputs différents à disposition ?

---

<div class="post-metadata">

**Author:** ![entwanne](https://discuss.afpy.org/user_avatar/discuss.afpy.org/entwanne/32/8_2.png) [@entwanne](https://discuss.afpy.org/u/entwanne)\
**Post date:** [Décembre 4, 2024, 7:48 UTC](https://discuss.afpy.org/t/the-advent-of-code/136/20 "2024-12-04T07:48:53Z")

</div>

> [@tut-tuuut](#):
>
> Envisagez donc d’ajouter `*.txt` dans votre `.gitignore` 🙂

Ce qui m’embête c’est que du coup c’est pas reproductible ☹

Faudrait que je maintienne 2 dépôts : l’un public avec le code et l’autre privé avec les données. Je verrai quand j’aurai le temps de faire ça.

[Page suivante](https://discuss.afpy.org/t/the-advent-of-code/136.md?page=2)
