Advent of Code 2020¶
Entraînement · Advent of Code 2020 · C, OCaml, Python
Cours : Graphes · Programmation dynamique · Grammaires non contextuelles · Dictionnaires et ensembles
Dépôt : advent-of-code-2020
Vue d'ensemble¶
| Jour | Nature du problème | Méthode | Notions du cours | Solution |
|---|---|---|---|---|
| 1 | Trouver deux puis trois nombres d'une liste de somme donnée | boucles imbriquées (C), ensemble des compléments (Python) | Force brute, ensembles | C, Python |
| 2 | Valider des lignes selon une règle donnée sur chaque ligne | lecture formatée, comptage d'occurrences, ou exclusif | Lecture et découpage de chaînes (entrées-sorties) | C, OCaml, Python |
| 3 | Parcours en diagonale d'une grille périodique | pas constant, abscisse modulo la largeur | Tableaux à deux dimensions, modulo | C |
| 4 | Validation d'enregistrements champ par champ | masque de bits des champs (C), dictionnaire par fiche (Python) | Dictionnaires, analyse de chaînes | C, Python |
| 5 | Décodage d'un code qui est une écriture binaire déguisée | dichotomie, tableau de places occupées | Représentation des entiers en base 2, dichotomie | C, Python |
| 6 | Unions et intersections d'ensembles de lettres par groupe | compteur par lettre (C), ensembles (Python) | Ensembles | C, Python |
| 7 | Relation de contenance : accessibilité et dénombrement dans un graphe sans cycle | parcours récursif, mémoïsé en Python | Parcours de graphe, mémoïsation | C, Python |
| 8 | Interprète d'un mini-assembleur, détection de boucle infinie | simulation avec marquage des instructions exécutées, essai de chaque modification | Interprète, arrêt | C, Python |
| 9 | Sommes de paires sur une fenêtre glissante, puis sous-tableau contigu de somme donnée | fenêtre glissante, deux pointeurs | Force brute, complexité | C, Python |
| 10 | Écarts dans une liste triée, puis dénombrement de chaînes compatibles | tri, programmation dynamique ascendante (C) ou mémoïsée (OCaml) | Programmation dynamique | C, OCaml |
| 11 | Automate cellulaire sur une grille jusqu'à stabilisation | double tampon jusqu'au point fixe, rayons dans 8 directions | Jeu de la vie, tableaux | C, Python |
| 12 | Déplacement d'un navire avec rotations | état (position, direction), rotations d'un quart de tour | Simulation, programmation impérative | Python |
| 13 | Synchronisation de périodes : système de congruences | recherche linéaire, puis restes chinois par Euclide étendu | Arithmétique modulaire (restes chinois) | Python |
| 14 | Masques appliqués à l'écriture binaire d'entiers | — | — | — |
| 15 | Suite définie par le dernier rang d'apparition de chaque terme | — | — | — |
| 16 | Contraintes d'intervalles, puis attribution des champs par élimination | filtrage, puis élimination des candidats par ordre de taille | Couplage dans un graphe biparti | Python |
| 17 | Automate cellulaire en dimension 3 puis 4 | dictionnaire par défaut sur une boîte englobante croissante | Ensembles, jeu de la vie | Python |
| 18 | Évaluer des expressions arithmétiques avec des priorités inhabituelles | descente récursive, un niveau par priorité | Descente récursive, arbres d'expressions | Python |
| 19 | Reconnaître les mots engendrés par une grammaire donnée | filtrage récursif de préfixes, comptage de blocs en partie 2 | Grammaires, expressions régulières | Python |
| 20 | Assembler un puzzle de tuiles avec rotations et symétries, puis chercher un motif | retour sur trace case par case sur (tuile, symétrie, rotation) | Retour sur trace | Python |
| 21 | Déduire une correspondance par intersections d'ensembles et élimination | intersections, propagation des candidats uniques | Ensembles | Python |
| 22 | Jeu de cartes, puis version récursive avec détection de configurations répétées | files à double extrémité, historique des configurations, récursion sur copies | Files, ensembles, récursivité | Python |
| 23 | Millions de déplacements dans une liste circulaire | liste doublement chaînée circulaire et tableau valeur → maillon | Listes chaînées | Python |
| 24 | Coordonnées sur une grille hexagonale, puis automate cellulaire | coordonnées demi-entières, dictionnaire des cases noires | Dictionnaires, jeu de la vie | Python |
| 25 | Retrouver un exposant modulaire (logarithme discret) | recherche exhaustive de l'exposant | Force brute, arithmétique modulaire | Python |
Jour 7 — Handy Haversacks¶
Énoncé : adventofcode.com/2020/day/7
Jour 8 — Handheld Halting¶
Énoncé : adventofcode.com/2020/day/8
Jour 10 — Adapter Array¶
Énoncé : adventofcode.com/2020/day/10
Jour 18 — Operation Order¶
Énoncé : adventofcode.com/2020/day/18
Jour 19 — Monster Messages¶
Énoncé : adventofcode.com/2020/day/19