Aller au contenu

Advent of Code 2022

Entraînement · Advent of Code 2022 · Python (C et OCaml pour les premiers jours)

Cours : Graphes · Arbres · Programmation dynamique · Récursivité

Dépôt : advent-of-code-2022

Vue d'ensemble

Jour Nature du problème Méthode Notions du cours Solution
1 Sommes par groupes, puis les trois plus grandes Sommes par blocs, tri décroissant Accumulateur, tri C, OCaml, Python
2 Calcul de scores d'un jeu à trois coups Coups codés 0, 1, 2 et différence modulo 3 Arithmétique modulo 3 C, Python
3 Trouver l'élément commun à plusieurs chaînes Intersection d'ensembles Ensembles Python
4 Inclusion et chevauchement d'intervalles Comparaisons d'extrémités Instructions conditionnelles C, OCaml, Python
5 Déplacements entre plusieurs piles Listes Python comme piles, tranches pour la partie 2 Piles Python
6 Première fenêtre de caractères tous distincts dans un flux Fenêtre glissante et len(set(...)) Algorithmique du texte, ensembles Python
7 Reconstruire une arborescence de fichiers à partir d'un journal de commandes Dictionnaires indexés par chemin, cumul par profondeur décroissante Arbres, dictionnaires Python
8 Visibilité le long des lignes et colonnes d'une grille Rayons dans les quatre directions depuis chaque case Boucles imbriquées Python
9 Simulation d'une chaîne de points qui se suivent Simulation pas à pas, ensemble des positions Ensembles, simulation Python
10 Simulation d'un processeur cadencé et d'un écran Interprète cycle par cycle Interprète Python
11 Simulation d'échanges, puis valeurs à réduire modulo un produit Files deque, réduction modulo le ppcm des diviseurs Arithmétique modulaire, files Python
12 Plus court chemin non pondéré dans une grille sous contrainte de déplacement BFS sur grille, relancé depuis chaque départ Parcours en largeur Python
13 Comparer et trier des listes imbriquées Comparaison récursive à trois issues, cmp_to_key Récursivité, arbres Python
14 Simulation de chute de grains dans une grille Simulation grain par grain, grille creuse defaultdict Ensembles, simulation Python
15 Zones en losange (distance de Manhattan) : union d'intervalles par ligne Coupe de chaque losange par une ligne, soustraction d'intervalles Droite de balayage Python
16 Maximiser un gain en parcourant un graphe en temps limité Floyd-Warshall, graphe compressé, mémoïsation sur (positions, temps, masque) Floyd-Warshall, mémoïsation Python
17 Simulation de chute de pièces, puis détection d'un cycle Simulation sur grille, signature (pièce, instruction, profil), détection de cycle Dictionnaires, simulation Python
18 Surface d'un objet en voxels, puis surface extérieure seule Comptage de faces, BFS de remplissage des poches d'air Parcours en largeur, ensembles Python
19 Planifier une production sous contraintes de ressources Recherche mémoïsée avec élagages heuristiques, puis tirages aléatoires Retour sur trace et élagage, Monte-Carlo C, Python
20 Permutations successives d'une liste circulaire deque d'indices et rotations Listes chaînées, rotation d'une file Python
21 Évaluer un arbre d'expression, puis résoudre une équation en une inconnue Évaluation récursive, inversion des opérations, Fraction Arbres d'expressions, récursivité Python
22 Déplacement sur une carte dont les bords se recollent, puis sur un patron de cube Simulation, recollements de faces codés à la main Simulation, géométrie Python
23 Automate cellulaire à règles de déplacement Simulation synchrone avec compteur de propositions Ensembles, jeu de la vie Python
24 Plus court chemin dans une grille dont les obstacles bougent BFS sur (position, temps), obstacles précalculés par période Parcours en largeur dans l'espace-temps Python
25 Conversion vers et depuis une base 5 à chiffres signés Base 5 équilibrée : décalage de 2 avant % et // Représentation des entiers Python

Jour 7 — No Space Left On Device

Énoncé : adventofcode.com/2022/day/7

Jour 12 — Hill Climbing Algorithm

Énoncé : adventofcode.com/2022/day/12

Jour 13 — Distress Signal

Énoncé : adventofcode.com/2022/day/13

Jour 16 — Proboscidea Volcanium

Énoncé : adventofcode.com/2022/day/16

Jour 21 — Monkey Math

Énoncé : adventofcode.com/2022/day/21