// 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 :

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

À 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 down et up ne modifient pas directement ton étage, elles changent ton inclinaison (aim) !"

Les trois variables démarrent toutes à 0 :

  • horizontal = 0
  • depth = 0
  • aim (l'inclinaison) = 0

Les règles réelles fonctionnent désormais ainsi :

  • down X : augmente ton inclinaison de X (aim += X).
  • up X : diminue ton inclinaison de X (aim -= X).
  • forward X applique 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 :
    • horizontal passe à 5.
    • depth augmente de 0 * 5 = 0 (reste à 0).
  • down 3 :
    • aim augmente de 3 (aim = 3).
  • forward 8 :
    • horizontal passe à 5 + 8 = 13.
    • depth augmente de 3 * 8 = 24 (depth = 24).
  • up 2 :
    • aim diminue de 2 (aim = 3 - 2 = 1).
  • down 5 :
    • aim augmente de 5 (aim = 1 + 5 = 6).
  • forward 3 :
    • horizontal passe à 13 + 3 = 16.
    • depth augmente de 6 * 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 ?