// Clique ci-dessus pour générer et télécharger ton input...
Jour 26 : En quête du Café Perdu
Il est 5h14 du matin. Tu viens d'écrire ta 300ᵉ ligne de code sans fermer l'œil et le drame absolu se produit : la machine à café affiche le message : E41 Out of cups.
Heureusement, une rumeur circule : une vieille machine de secours fonctionnerait encore dans les méandres du bâtiment. Un ancien t'a laissé un itinéraire sous forme de commandes de navigation.
Partie 1
Ton trajet est composé d'une suite d'instructions contenant une direction et une distance :
forward X: tu avances deXmètres dans le couloir.down X: tu descends deXmarches vers les sous-sols (augmente ta profondeur).up X: tu remontes deXmarches vers les étages (diminue ta profondeur).
Au départ, tu es à la position horizontale 0 et à une profondeur de 0.
Exemple
Prends cet itinéraire test :
forward 5
down 3
forward 8
up 2
down 5
forward 3
forward 5: position horizontale = 5, profondeur = 0.down 3: position horizontale = 5, profondeur = 3.forward 8: position horizontale = 13, profondeur = 3.up 2: position horizontale = 13, profondeur = 1.down 5: position horizontale = 13, profondeur = 6.forward 3: position horizontale = 16, profondeur = 6.
À la fin de cet exemple, ta position horizontale est de 16 et ta profondeur est de 6. En les multipliant ensemble (16 * 6), on obtient 96.
Calcule la position horizontale et la profondeur finale de ton propre itinéraire, puis multiplie-les ensemble pour trouver le code d'accès de la machine !
Partie 2
Tu arrives devant la porte supposée mener à la machine, mais le digicode refuse ton entrée. En examinant le plan de plus près sous la lumière d'un néon, tu remarques une note griffonnée au verso :
"Attention ! Les couloirs et les escaliers de 42 ne sont pas en ligne droite. Les commandes
downetupne modifient pas directement ton étage, elles changent ton inclinaison (aim) !"
Les trois variables démarrent toutes à 0 :
horizontal= 0depth= 0aim(l'inclinaison) = 0
Les règles réelles fonctionnent désormais ainsi :
down X: augmente ton inclinaison deX(aim += X).up X: diminue ton inclinaison deX(aim -= X).forward Xapplique deux effets simultanés :- Augmente ta position horizontale de
X(horizontal += X). - Augmente ta profondeur de ton inclinaison multipliée par
X(depth += aim * X).
Reprise de l'exemple
Reprenons le même itinéraire avec ces nouvelles consignes :
forward 5
down 3
forward 8
up 2
down 5
forward 3
forward 5:horizontalpasse à5.depthaugmente de0 * 5 = 0(reste à0).down 3:aimaugmente de3(aim = 3).forward 8:horizontalpasse à5 + 8 = 13.depthaugmente de3 * 8 = 24(depth = 24).up 2:aimdiminue de2(aim = 3 - 2 = 1).down 5:aimaugmente de5(aim = 1 + 5 = 6).forward 3:horizontalpasse à13 + 3 = 16.depthaugmente de6 * 3 = 18(depth = 24 + 18 = 42).
À la fin de cet exemple, ta position horizontale est de 16 et ta profondeur finale est de 42.
En les multipliant ensemble (16 * 42), on obtient 672 !
Applique ce calcul à ton fichier de données. Quelle valeur obtiens-tu en multipliant ta position horizontale finale par ta profondeur finale ?