URL: https://linuxfr.org/forums/programmationautre/posts/advent-of-code-2023-day-9 Title: Advent of Code 2023 : Day 9 Authors: steph1978 Date: 2023年12月09日T09:58:55+01:00 License: CC By-SA Tags: aoc2023 et avent Score: 0 --- Jour 9 : Maintenance du Mirage --- Vous chevauchez le chameau à travers la tempête de sable et vous arrêtez là où les cartes du fantôme vous ont dit de vous arrêter. La tempête de sable se calme ensuite, vous voyant étonnamment debout devant une oasis ! Le chameau va chercher de l'eau et vous étirez votre cou. En levant les yeux, vous découvrez ce qui doit être une autre île flottante géante, celle-ci faite de métal ! C'est sûrement là que viennent les pièces pour réparer les machines à sable. Il y a même un deltaplane partiellement enterré dans le sable ici ; une fois que le soleil se lèvera et réchauffera le sable, vous pourrez peut-être utiliser le deltaplane et l'air chaud pour monter jusqu'à l'île de métal ! En attendant que le soleil se lève, vous admirez l'oasis cachée ici au milieu de l'île du Désert. Elle doit avoir un écosystème délicat ; autant prendre quelques mesures écologiques pendant que vous attendez. Peut-être pouvez-vous signaler toute instabilité environnementale que vous trouvez à quelqu'un pour que l'oasis puisse être préservée pour le prochain voyageur usé par la tempête de sable. Vous sortez votre pratique Capteur d'Oasis et d'Instabilité du Sable et analysez votre environnement. L'OASIS produit un rapport de nombreuses valeurs et de leur évolution dans le temps (votre entrée de puzzle). Chaque ligne du rapport contient l'historique d'une seule valeur. Par exemple : ``` 0 3 6 9 12 15 1 3 6 10 15 21 10 13 16 21 30 45 ``` Pour protéger au mieux l'oasis, votre rapport environnemental devrait inclure une prédiction de la prochaine valeur dans chaque historique. Pour ce faire, commencez par créer une nouvelle séquence à partir de la différence à chaque étape de votre historique. Si cette séquence n'est pas entièrement composée de zéros, répétez ce processus en utilisant la séquence que vous venez de générer comme séquence d'entrée. Une fois que toutes les valeurs de votre dernière séquence sont des zéros, vous pouvez extrapoler quelle devrait être la prochaine valeur de l'historique d'origine. Dans l'ensemble de données ci-dessus, le premier historique est 0 3 6 9 12 15. Comme les valeurs augmentent de 3 à chaque étape, la première séquence de différences que vous générez sera 3 3 3 3 3. Notez que cette séquence a une valeur de moins que la séquence d'entrée car à chaque étape, elle considère deux nombres de l'entrée. Comme ces valeurs ne sont pas toutes zéro, répétez le processus : les valeurs diffèrent de 0 à chaque étape, donc la prochaine séquence est 0 0 0 0. Cela signifie que vous avez suffisamment d'informations pour extrapoler l'historique ! Visuellement, ces séquences peuvent être disposées comme ceci : ``` 0 3 6 9 12 15 3 3 3 3 3 0 0 0 0 ``` Pour extrapoler, commencez par ajouter un nouveau zéro à la fin de votre liste de zéros ; parce que les zéros représentent les différences entre les deux valeurs au-dessus d'eux, cela signifie également qu'il y a maintenant un espace réservé dans chaque séquence au-dessus : ``` 0 3 6 9 12 15 B 3 3 3 3 3 A 0 0 0 0 0 ``` Vous pouvez ensuite commencer à remplir les espaces réservés de bas en haut. A doit être le résultat de l'augmentation de 3 (la valeur à sa gauche) de 0 (la valeur en dessous) ; cela signifie que A doit être 3 : ``` 0 3 6 9 12 15 B 3 3 3 3 3 3 0 0 0 0 0 ``` Enfin, vous pouvez remplir B, qui doit être le résultat de l'augmentation de 15 (la valeur à sa gauche) de 3 (la valeur en dessous), soit 18 : ``` 0 3 6 9 12 15 18 3 3 3 3 3 3 0 0 0 0 0 ``` Ainsi, la prochaine valeur du premier historique est 18. Trouver les différences toutes zéro pour le deuxième historique nécessite une séquence supplémentaire : ``` 1 3 6 10 15 21 2 3 4 5 6 1 1 1 1 0 0 0 ``` Ensuite, en suivant le même processus qu'auparavant, déterminez la prochaine valeur dans chaque séquence de bas en haut : ``` 1 3 6 10 15 21 28 2 3 4 5 6 7 1 1 1 1 1 0 0 0 0 ``` Ainsi, la prochaine valeur du deuxième historique est 28. Le troisième historique nécessite encore plus de séquences, mais sa prochaine valeur peut être trouvée de la même manière : ``` 10 13 16 21 30 45 68 3 3 5 9 15 23 0 2 4 6 8 2 2 2 2 0 0 0 ``` Ainsi, la prochaine valeur du troisième historique est 68. Si vous trouvez la prochaine valeur pour chaque historique dans cet exemple et les ajoutez toutes ensemble, vous obtenez 114. Analysez votre rapport OASIS et extrapoler la prochaine valeur pour chaque historique. Quelle est la somme de ces valeurs extrapolées ?

AltStyle によって変換されたページ (->オリジナル) /