URL: https://linuxfr.org/forums/programmationautre/posts/advent-of-code-2023-day-5-d7a720ab-87ef-4949-98cd-32ef245c43cd Title: Advent of Code 2023 : Day 5 Authors: 🚲 Tanguy Ortolo Date: 2023年12月05日T16:04:57+01:00 License: CC By-SA Tags: avent, calendrier, code et aoc2023 Score: 3 Partie 1 ======== Le jardinier nous explique que cette île est bien la source d'eau destinée à l'île de la neige. Seulement il a dû couper l'eau parce qu'il ne recevait plus de sable pour la filtrer et qu'on ne peut pas faire de neige avec de l'eau sale. C'est une interruption temporaire, juste le temps de régler le problème d'approvisionnement en sable. L'ennui, c'est qu'il n'a pas du tout le temps de penser à ça, donc c'est du temporaire qui commence à durer un peu trop longtemps. Heureusement, il y a un ferry qui va pouvoir vous amener au fournisseur de sable. Le temps qu'il arrive, vous allez pouvoir aider le jardinier avec son nouvel almanach des plantes. C'est un document qui indique quelle graine a besoin de quel substrat, quel substrat a besoin de quel engrais, quel engrais nécessite quel arrosage, quel arrosage correspond à quelle ensoleillement, puis à quelle température, puis à quelle humidité, puis à quel emplacement. Pour commencer à planter le plus vite possible, il s'agit de trouver quel est, parmi toutes les graines disponibles, celle qui devra être plantée dans l'emplacement le plus proche (celui avec le plus petit numéro). L'entrée d'exemple : ```text seeds: 79 14 55 13 seed-to-soil map: 50 98 2 52 50 48 soil-to-fertilizer map: 0 15 37 37 52 2 39 0 15 fertilizer-to-water map: 49 53 8 0 11 42 42 0 7 57 7 4 water-to-light map: 88 18 7 18 25 70 light-to-temperature map: 45 77 23 81 45 19 68 64 13 temperature-to-humidity map: 0 69 1 1 0 69 humidity-to-location map: 60 56 37 56 93 4 ``` La première ligne est juste une liste de graines. Les groupes de lignes suivantes donnent des tables de correspondance entre les graines et les substrats, et ainsi de suite. Ces tables sont composées de séries de trois chiffres, dont le premier donne le début d'un intervalle destination, le second le début d'un intervalle d'origine et le troisième la longueur de ces intervalles. Ce qui n'est pas dans ces intervalles reste inchangé. Partie 2 ======== En fait vous avez mal compris, la premier ligne n'est pas une liste de graines mais une liste d'intervalles de graines. Les chiffres sont à lire par paires, le premier donne le début d'un intervalle et le second sa longueur. Par exemple, `79 14` ne signifie pas que vous avez le graines 79 et 14 à votre disposition, mais que vous avez les graines 79, 80, 81, ..., 92. Même exercice, sauf que ça change tout, parce que sur les données réelles, les intervalles en question ont une longueur de l'ordre plusieurs centaines de millions de graines, voire du milliard. Pas question de procéder graine par graine, on va devoir couper des intervalles en morceaux.