Aller au contenu

Advent of Code 2019

Entraînement · Advent of Code 2019 · Python

Cours : Graphes · Interprète · Algorithme de Dijkstra · Files · Dictionnaires et ensembles

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

Vue d'ensemble

Jour Nature du problème Méthode Notions du cours Solution
1 Appliquer une formule à chaque valeur, puis l'itérer jusqu'à épuisement Boucle while et somme Répéter tant que Python
2 Premier interprète Intcode (addition, multiplication, arrêt) — Interprète —
3 Croisements de deux chemins sur une grille Intersection de segments deux à deux Complexité quadratique Python
4 Compter les nombres d'un intervalle vérifiant des règles sur leurs chiffres Force brute, test sur la chaîne des chiffres Exploration exhaustive Python
5 Interprète Intcode : modes d'adressage, entrées-sorties, sauts Interprète récursif Interprète, récursivité terminale Python
6 Arbre de dépendances : profondeurs, puis distance entre deux nœuds Chemins depuis la racine, plus long préfixe commun Arbres, récursivité Python
7 Plusieurs copies d'un programme Intcode chaînées en boucle Machines en coroutines reliées par des files, permutations Files, threads coopératifs Python
8 Image découpée en calques superposés Découpage d'une chaîne, superposition Tableaux Python
9 Intcode complet : adressage relatif, mémoire non bornée Mémoire creuse en dictionnaire Interprète, dictionnaires Python
10 Visibilité entre points d'une grille, puis balayage angulaire Directions réduites par PGCD, tri par angle PGCD, force brute Python
11 Robot piloté par Intcode qui peint une grille Simulation, grille en dictionnaire Dictionnaires, interprète Python
12 Système de points en interaction, retour à l'état initial Cycle par coordonnée, PPCM des périodes Ensembles, PGCD Python
13 Jeu de casse-briques à faire jouer par un programme Intcode Contrôle glouton : suivre la balle Interprète Python
14 Réactions chimiques : quantité de matière première nécessaire Tri topologique, propagation de besoins rationnels Tri topologique Python
15 Explorer un labyrinthe inconnu en pilotant un robot DFS avec retour physique du robot, puis BFS Parcours en profondeur, parcours en largeur Python
16 Transformation répétée d'une très longue suite de chiffres Sommes suffixes sur la seconde moitié Complexité Python
17 Lire une grille produite par Intcode, puis envoyer un itinéraire compressé Voisinage sur grille, compression faite à la main Grilles Python
18 Ramasser toutes les clés d'un labyrinthe à portes BFS depuis chaque clé, Dijkstra sur (clé, masque) Parcours en largeur, Dijkstra Python
19 Sonder une zone en cône pour y loger un carré Suivi incrémental des bords, colonne par colonne Dictionnaires, interprète Python
20 Labyrinthe à téléporteurs, puis à niveaux emboîtés BFS, puis graphe réduit et Dijkstra sur (portail, côté, niveau) Parcours en largeur, Dijkstra Python
21 Écrire un petit programme booléen pour un robot sauteur Programme booléen écrit à la main, envoyé en ASCII Calcul propositionnel Python
22 Mélanges de cartes répétés un nombre astronomique de fois Applications affines modulo un nombre premier Exponentiation rapide, PGCD Python
23 Réseau de 50 machines Intcode qui s'échangent des paquets Ordonnancement tour par tour, files, détection d'inactivité Producteurs-consommateurs, files Python
24 Automate cellulaire 5×5, puis sur des grilles emboîtées État codé sur 25 bits, cycle détecté par ensemble Jeu de la vie, ensembles Python
25 Jeu d'aventure textuel exécuté par Intcode Console interactive, essai des \(2^8\) sous-ensembles d'objets Exploration exhaustive Python

Jour 7 — Amplification Circuit

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

Jour 12 — The N-Body Problem

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

Jour 16 — Flawed Frequency Transmission

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

Jour 18 — Many-Worlds Interpretation

Énoncé : adventofcode.com/2019/day/18

Jour 22 — Slam Shuffle

Énoncé : adventofcode.com/2019/day/22