From 7c9e4a2da11e780be6bbe97ee3d51652446213b3 Mon Sep 17 00:00:00 2001 From: Lars Martens Date: Thu, 2 Dec 2021 16:50:22 +0100 Subject: [PATCH] Day 2 --- input/02-test.txt | 6 + input/02.txt | 1000 +++++++++++++++++++++++++++++++++++++++++++++ src/bin/02.rs | 59 +++ 3 files changed, 1065 insertions(+) create mode 100644 input/02-test.txt create mode 100644 input/02.txt create mode 100644 src/bin/02.rs diff --git a/input/02-test.txt b/input/02-test.txt new file mode 100644 index 0000000..b7172ac --- /dev/null +++ b/input/02-test.txt @@ -0,0 +1,6 @@ +forward 5 +down 5 +forward 8 +up 3 +down 8 +forward 2 diff --git a/input/02.txt b/input/02.txt new file mode 100644 index 0000000..b7b994b --- /dev/null +++ b/input/02.txt @@ -0,0 +1,1000 @@ +forward 8 +forward 3 +forward 8 +down 6 +forward 3 +up 6 +down 3 +down 8 +down 5 +down 1 +down 4 +up 4 +forward 7 +forward 7 +down 8 +forward 8 +forward 2 +forward 4 +forward 6 +down 2 +forward 1 +down 2 +down 6 +up 4 +forward 4 +forward 4 +down 1 +down 1 +forward 8 +down 9 +forward 4 +down 4 +forward 9 +down 9 +forward 7 +forward 4 +forward 4 +down 7 +forward 9 +up 5 +forward 7 +forward 4 +up 5 +up 6 +down 9 +forward 3 +forward 3 +forward 5 +up 3 +forward 8 +down 9 +forward 3 +forward 5 +down 2 +forward 7 +forward 8 +forward 8 +up 3 +down 9 +forward 2 +forward 5 +forward 4 +up 1 +down 3 +forward 7 +forward 4 +up 3 +down 8 +up 8 +forward 7 +forward 7 +down 2 +down 7 +forward 3 +forward 1 +down 7 +down 4 +down 9 +forward 5 +down 9 +up 8 +down 9 +down 7 +forward 2 +down 5 +down 6 +forward 3 +forward 2 +forward 3 +forward 2 +down 4 +up 1 +forward 6 +down 2 +forward 2 +down 5 +up 1 +up 8 +forward 5 +forward 6 +up 8 +down 4 +forward 4 +down 3 +forward 5 +forward 5 +forward 8 +forward 3 +up 1 +down 9 +up 4 +up 5 +down 3 +down 9 +up 6 +down 1 +down 2 +down 3 +down 6 +up 5 +forward 9 +forward 6 +forward 6 +forward 4 +forward 7 +up 6 +down 2 +down 9 +down 9 +forward 4 +down 9 +forward 2 +down 4 +down 8 +down 3 +up 1 +down 2 +down 7 +down 1 +down 5 +up 5 +forward 3 +forward 2 +down 2 +up 4 +up 9 +forward 5 +up 9 +down 9 +forward 1 +down 4 +forward 6 +down 2 +forward 7 +forward 2 +down 6 +forward 9 +down 9 +down 8 +forward 7 +down 3 +down 3 +down 5 +forward 5 +up 9 +up 5 +down 1 +forward 9 +down 3 +down 6 +forward 3 +up 4 +up 1 +down 3 +down 1 +up 6 +forward 4 +up 4 +forward 5 +down 3 +down 5 +forward 4 +down 1 +up 6 +down 5 +forward 1 +forward 6 +down 5 +forward 1 +forward 4 +forward 2 +down 1 +down 3 +down 9 +down 9 +down 8 +forward 4 +down 5 +forward 6 +up 6 +down 3 +forward 1 +down 9 +forward 4 +down 2 +up 5 +down 4 +forward 1 +forward 2 +down 6 +forward 3 +down 9 +forward 6 +forward 1 +forward 7 +up 1 +up 7 +up 2 +forward 4 +up 3 +down 4 +up 1 +down 3 +forward 1 +down 5 +up 6 +forward 6 +forward 6 +up 3 +up 2 +down 8 +down 2 +down 2 +down 7 +forward 8 +up 2 +up 2 +up 5 +down 6 +up 3 +down 9 +forward 7 +down 7 +forward 8 +forward 2 +forward 5 +up 5 +up 1 +forward 5 +up 2 +up 3 +up 2 +up 3 +down 3 +down 2 +forward 1 +up 1 +down 4 +up 8 +forward 5 +down 9 +forward 8 +up 1 +forward 7 +forward 7 +up 7 +up 6 +up 6 +down 5 +down 3 +up 4 +up 1 +down 9 +down 9 +forward 4 +down 7 +forward 2 +forward 8 +forward 1 +down 9 +forward 2 +forward 5 +up 5 +down 5 +down 6 +forward 1 +down 4 +forward 9 +up 3 +down 4 +forward 7 +forward 1 +forward 3 +forward 6 +down 1 +forward 3 +up 5 +up 6 +down 3 +forward 5 +forward 8 +forward 4 +down 9 +forward 2 +forward 4 +down 8 +forward 6 +down 7 +up 7 +forward 1 +down 8 +forward 5 +forward 7 +up 3 +forward 7 +forward 2 +up 5 +forward 3 +down 4 +up 5 +down 6 +up 6 +forward 6 +up 1 +up 7 +up 8 +forward 4 +down 6 +down 8 +up 8 +down 2 +forward 3 +forward 9 +down 9 +down 6 +down 2 +up 4 +forward 5 +forward 6 +forward 5 +down 5 +forward 5 +down 2 +down 9 +down 3 +down 4 +forward 2 +forward 7 +down 7 +down 2 +down 4 +down 8 +up 6 +down 7 +forward 2 +up 6 +forward 6 +down 4 +up 8 +forward 1 +up 2 +forward 6 +forward 7 +down 2 +down 4 +down 3 +down 2 +forward 5 +down 4 +forward 6 +forward 6 +down 8 +forward 7 +forward 1 +forward 1 +forward 4 +forward 7 +forward 8 +down 2 +forward 9 +up 7 +forward 1 +down 1 +forward 2 +forward 2 +up 4 +forward 3 +down 1 +down 4 +down 3 +forward 8 +forward 8 +forward 9 +forward 4 +down 6 +up 6 +up 7 +up 7 +down 1 +up 1 +up 9 +up 7 +down 9 +forward 4 +up 8 +down 5 +up 3 +down 2 +forward 4 +forward 6 +up 7 +up 2 +down 5 +down 3 +down 9 +forward 1 +down 1 +down 6 +down 3 +forward 9 +down 3 +up 6 +up 4 +up 6 +down 6 +up 7 +down 5 +up 4 +up 3 +up 3 +up 2 +forward 1 +forward 5 +forward 8 +down 2 +up 9 +forward 6 +forward 8 +up 3 +down 3 +forward 7 +forward 4 +down 7 +up 2 +down 1 +down 5 +forward 8 +down 6 +down 2 +down 9 +down 5 +up 7 +up 5 +forward 7 +down 8 +down 5 +forward 7 +up 5 +up 1 +down 4 +forward 1 +up 3 +forward 7 +forward 9 +down 7 +forward 4 +down 9 +down 2 +up 2 +forward 2 +down 6 +forward 3 +down 5 +up 8 +forward 5 +up 5 +forward 1 +down 4 +forward 7 +down 8 +forward 7 +up 2 +forward 1 +forward 2 +down 7 +forward 7 +forward 5 +up 3 +down 8 +forward 8 +up 6 +up 2 +forward 9 +down 7 +up 6 +down 1 +up 5 +forward 4 +forward 9 +forward 6 +forward 3 +forward 3 +forward 1 +forward 8 +down 6 +forward 3 +up 2 +up 6 +down 3 +down 7 +forward 5 +down 2 +up 9 +up 3 +down 1 +down 3 +up 7 +up 5 +down 6 +down 5 +up 2 +down 1 +down 2 +forward 1 +down 1 +forward 1 +down 1 +up 5 +up 4 +forward 1 +down 7 +forward 4 +down 6 +forward 2 +forward 1 +forward 4 +forward 9 +down 7 +forward 7 +down 7 +down 5 +forward 7 +forward 3 +forward 8 +up 4 +forward 9 +down 1 +down 9 +forward 3 +down 7 +forward 1 +forward 8 +up 7 +forward 5 +down 8 +forward 3 +forward 6 +forward 6 +up 5 +forward 7 +up 3 +down 9 +forward 4 +forward 4 +forward 1 +down 2 +down 9 +forward 8 +forward 8 +down 9 +forward 5 +up 4 +down 6 +forward 3 +up 4 +down 5 +down 2 +down 3 +down 2 +up 1 +up 9 +up 3 +forward 5 +forward 7 +down 1 +down 5 +up 1 +forward 8 +down 5 +forward 8 +forward 8 +down 2 +forward 2 +forward 7 +forward 3 +forward 6 +up 9 +down 3 +forward 7 +down 5 +forward 3 +up 1 +down 3 +down 9 +forward 5 +forward 5 +up 5 +down 3 +down 3 +up 1 +forward 6 +up 1 +up 6 +forward 5 +down 3 +down 9 +forward 1 +down 5 +up 5 +down 7 +down 7 +down 6 +down 2 +up 7 +down 3 +forward 2 +up 6 +down 2 +forward 6 +forward 9 +down 6 +down 4 +down 5 +down 7 +forward 9 +up 2 +down 2 +down 4 +forward 4 +down 9 +forward 3 +forward 8 +forward 6 +up 5 +down 2 +down 7 +forward 7 +up 6 +down 4 +up 8 +forward 2 +down 8 +forward 7 +up 8 +up 5 +up 8 +down 1 +forward 4 +forward 7 +down 5 +forward 1 +forward 5 +down 9 +down 6 +up 8 +up 5 +down 7 +down 4 +forward 4 +forward 2 +forward 4 +down 1 +up 4 +down 5 +down 4 +up 5 +forward 2 +up 3 +down 9 +down 1 +down 4 +up 1 +up 7 +down 5 +forward 9 +down 5 +down 7 +down 2 +down 8 +forward 7 +down 5 +down 6 +forward 3 +down 8 +down 5 +down 9 +up 6 +up 2 +down 9 +down 6 +down 7 +forward 8 +down 8 +forward 4 +up 8 +forward 3 +down 2 +up 2 +forward 4 +down 9 +down 2 +up 6 +down 4 +forward 6 +down 7 +forward 5 +forward 4 +down 3 +up 6 +forward 7 +forward 1 +up 6 +down 6 +forward 5 +forward 3 +down 8 +up 8 +up 8 +forward 5 +forward 1 +up 1 +forward 3 +up 6 +forward 2 +down 8 +forward 8 +up 8 +forward 1 +forward 6 +forward 8 +up 7 +up 3 +forward 8 +forward 5 +down 4 +down 4 +forward 8 +up 1 +forward 5 +down 9 +forward 2 +down 2 +down 3 +forward 1 +down 2 +up 3 +down 1 +up 1 +up 1 +forward 8 +forward 5 +forward 2 +up 1 +down 9 +up 7 +down 1 +forward 9 +up 4 +forward 5 +forward 5 +forward 8 +down 1 +forward 3 +forward 4 +forward 8 +up 2 +forward 5 +down 8 +forward 5 +up 7 +forward 3 +forward 2 +forward 3 +up 7 +up 4 +up 9 +forward 7 +forward 1 +up 6 +up 5 +down 8 +forward 3 +down 5 +forward 7 +forward 3 +up 9 +forward 9 +forward 7 +up 2 +down 7 +forward 4 +down 9 +up 8 +up 3 +down 4 +down 1 +forward 4 +up 3 +down 6 +down 2 +forward 8 +up 1 +forward 5 +up 7 +down 5 +forward 9 +forward 6 +forward 9 +down 3 +up 8 +forward 6 +forward 4 +forward 2 +forward 2 +down 8 +up 5 +down 4 +down 6 +forward 3 +forward 6 +forward 1 +forward 3 +down 8 +down 5 +up 3 +down 1 +down 7 +forward 8 +forward 1 +down 6 +down 9 +forward 2 +up 5 +down 6 +up 6 +down 5 +down 8 +forward 1 +down 3 +forward 1 +forward 8 +forward 2 +down 4 +forward 1 +down 6 +down 6 +forward 3 +up 7 +forward 5 +up 1 +up 4 +forward 7 +forward 1 +down 5 +forward 2 +down 1 +forward 4 +forward 2 +forward 5 +up 2 +up 1 +forward 2 +down 4 +down 5 +forward 6 +forward 1 +down 7 +down 6 +down 2 +forward 5 +forward 6 +up 8 +up 6 +forward 2 +forward 6 +down 9 +down 4 +forward 1 +down 3 +down 1 +up 4 +down 8 +forward 3 +down 5 +up 4 +down 5 +up 3 +down 1 +down 1 +down 9 +forward 8 +up 8 +down 2 +forward 9 +down 8 +down 4 +up 4 +up 9 +up 4 +forward 8 +forward 9 +forward 3 +forward 2 +down 2 +forward 5 +down 6 +down 2 +down 9 +forward 3 +up 4 +forward 8 +up 9 +forward 2 +forward 1 +down 3 +up 1 +up 7 +down 3 +up 2 +down 2 +up 2 +forward 4 +down 7 +forward 2 +forward 4 +forward 3 +down 6 +forward 4 +down 3 +forward 2 +down 1 +up 4 +down 8 +up 3 +forward 4 +up 6 +forward 5 +forward 3 +forward 1 +up 2 +forward 4 +forward 7 +down 3 +forward 9 +up 7 +down 9 +forward 2 +forward 4 +down 9 +down 1 +up 3 +forward 2 +forward 7 +down 7 +forward 9 +forward 5 +forward 7 +forward 2 +forward 3 +forward 4 +forward 5 +forward 6 +down 1 +forward 8 +down 4 +down 6 +up 8 +up 5 +forward 5 +down 9 +down 2 +down 2 +forward 7 +forward 8 +up 8 +down 4 +up 5 +forward 1 +down 5 +forward 3 +up 3 +down 6 +forward 5 +up 3 +up 5 +forward 4 +forward 2 +up 6 +down 9 +forward 7 diff --git a/src/bin/02.rs b/src/bin/02.rs new file mode 100644 index 0000000..8fd423b --- /dev/null +++ b/src/bin/02.rs @@ -0,0 +1,59 @@ +fn main() { + let mut pos = State::default(); + pos.apply(input()); + println!("First solution: {:?} => {}", pos, pos.position * pos.depth); + + let mut pos = State::default(); + pos.apply_new(input()); + println!("Second solution: {:?} => {}", pos, pos.position * pos.depth); +} + +#[derive(Debug, Default)] +struct State { + position: i32, + depth: i32, + aim: i32, +} + +impl State { + fn apply(&mut self, instructions: impl Iterator) { + for i in instructions { + match i.direction { + "up" => self.depth -= i.distance, + "down" => self.depth += i.distance, + "forward" => self.position += i.distance, + d => panic!("unknown direction: {}", d), + } + } + } + + fn apply_new(&mut self, instructions: impl Iterator) { + for i in instructions { + match i.direction { + "up" => self.aim -= i.distance, + "down" => self.aim += i.distance, + "forward" => { + self.position += i.distance; + self.depth += self.aim * i.distance; + } + d => panic!("unknown direction: {}", d), + } + } + } +} + +#[derive(Debug)] +struct Instruction { + direction: &'static str, + distance: i32, +} + +fn input() -> impl Iterator { + include_str!("../../input/02.txt") + .lines() + .filter_map(|l| l.split_once(" ")) + .map(|(d, n)| Instruction { + direction: d, + distance: n.parse().unwrap(), + }) +}