From da050ab5da9ec0df5fb2df74fdc11e9760ccba22 Mon Sep 17 00:00:00 2001 From: Jef Roosens Date: Thu, 2 Dec 2021 14:58:41 +0100 Subject: [PATCH] Solution day 2 --- input/day2 | 1000 +++++++++++++++++++++++++++++++++++++++++++++ src/days/day_2.rs | 54 +++ src/days/mod.rs | 1 + src/main.rs | 2 + 4 files changed, 1057 insertions(+) create mode 100644 input/day2 create mode 100644 src/days/day_2.rs diff --git a/input/day2 b/input/day2 new file mode 100644 index 0000000..dad7bf9 --- /dev/null +++ b/input/day2 @@ -0,0 +1,1000 @@ +forward 3 +down 9 +forward 6 +down 3 +forward 8 +down 3 +down 4 +forward 3 +forward 5 +up 7 +forward 1 +forward 1 +forward 5 +down 8 +down 5 +forward 3 +forward 2 +forward 4 +down 7 +up 2 +up 2 +down 5 +down 5 +down 8 +down 2 +down 4 +forward 8 +forward 8 +up 2 +down 2 +up 8 +up 4 +forward 7 +up 8 +down 6 +forward 9 +forward 6 +forward 5 +up 1 +forward 6 +forward 8 +down 4 +forward 6 +up 8 +down 9 +forward 1 +down 1 +up 8 +down 5 +down 7 +forward 7 +up 8 +forward 4 +forward 5 +up 9 +down 4 +forward 4 +up 5 +down 6 +forward 3 +forward 2 +forward 3 +forward 6 +up 4 +up 7 +forward 6 +forward 2 +down 1 +forward 3 +forward 3 +forward 2 +down 6 +forward 2 +forward 4 +forward 9 +forward 1 +up 6 +forward 7 +down 6 +down 7 +forward 6 +up 4 +down 7 +up 9 +up 2 +down 6 +down 6 +forward 9 +down 2 +forward 5 +up 3 +up 6 +forward 3 +forward 3 +up 8 +forward 1 +forward 9 +forward 9 +up 6 +forward 3 +forward 2 +forward 8 +up 8 +forward 5 +up 6 +forward 9 +down 4 +down 5 +forward 7 +down 6 +forward 8 +up 9 +forward 2 +down 8 +up 4 +forward 7 +down 9 +forward 5 +forward 7 +down 4 +forward 3 +forward 7 +forward 4 +forward 7 +forward 4 +up 1 +down 1 +down 6 +up 4 +forward 2 +down 5 +down 8 +down 1 +up 2 +down 6 +down 3 +forward 5 +forward 5 +down 5 +forward 3 +forward 3 +down 9 +down 9 +up 5 +down 5 +down 3 +forward 2 +down 1 +up 6 +down 1 +down 3 +down 7 +forward 3 +forward 5 +forward 7 +up 9 +up 9 +down 1 +forward 2 +up 4 +down 1 +up 4 +forward 3 +forward 5 +down 2 +forward 7 +down 6 +down 2 +forward 7 +forward 7 +down 9 +up 4 +down 6 +down 1 +down 5 +down 5 +down 3 +down 1 +forward 9 +forward 4 +up 8 +down 1 +up 7 +down 7 +down 8 +up 2 +down 9 +down 2 +forward 3 +forward 6 +forward 5 +forward 2 +forward 6 +down 4 +forward 5 +up 5 +forward 3 +down 4 +forward 3 +down 4 +forward 9 +forward 7 +forward 9 +forward 7 +up 4 +down 3 +forward 5 +forward 9 +forward 9 +down 5 +forward 9 +down 1 +down 3 +forward 2 +forward 5 +forward 8 +down 6 +down 4 +forward 1 +up 6 +down 8 +up 4 +up 8 +forward 3 +down 3 +down 2 +forward 3 +forward 4 +down 9 +down 4 +forward 6 +up 5 +forward 6 +up 1 +down 3 +forward 9 +down 5 +down 4 +forward 9 +up 6 +forward 9 +forward 2 +down 1 +forward 7 +forward 5 +down 4 +forward 6 +down 6 +up 3 +up 8 +down 6 +forward 8 +forward 3 +down 6 +down 3 +down 3 +up 6 +up 6 +up 1 +forward 7 +up 2 +forward 5 +forward 5 +up 3 +forward 7 +up 3 +down 7 +down 1 +forward 9 +forward 7 +down 1 +forward 7 +forward 8 +forward 2 +down 1 +up 3 +down 6 +forward 5 +forward 4 +forward 2 +down 8 +forward 3 +down 9 +down 4 +up 9 +down 2 +down 6 +up 2 +up 9 +forward 1 +down 8 +forward 3 +down 4 +down 2 +forward 9 +forward 2 +down 3 +down 8 +down 7 +down 7 +up 2 +down 7 +down 2 +down 4 +forward 8 +forward 1 +down 5 +forward 2 +forward 1 +forward 6 +down 7 +forward 1 +down 4 +forward 1 +up 7 +down 7 +forward 2 +down 4 +forward 9 +up 1 +forward 7 +forward 3 +forward 3 +down 2 +down 6 +up 1 +down 1 +down 7 +forward 2 +forward 6 +down 5 +up 4 +down 9 +up 6 +forward 1 +forward 4 +down 9 +up 7 +down 8 +up 6 +down 8 +down 5 +down 5 +down 2 +forward 7 +forward 2 +up 2 +up 9 +forward 6 +down 9 +down 6 +forward 3 +down 8 +forward 3 +forward 2 +down 9 +forward 5 +up 3 +forward 5 +down 1 +up 1 +down 3 +forward 1 +forward 5 +down 7 +forward 8 +forward 6 +down 4 +down 9 +forward 5 +forward 2 +down 8 +down 3 +down 6 +down 2 +down 1 +forward 6 +forward 1 +forward 6 +up 9 +down 4 +up 7 +forward 5 +up 6 +down 3 +forward 6 +forward 3 +forward 2 +forward 2 +up 1 +down 9 +forward 2 +forward 3 +up 1 +forward 3 +forward 2 +down 4 +down 8 +up 9 +up 1 +forward 4 +up 2 +down 6 +forward 3 +down 5 +up 5 +up 7 +down 1 +forward 1 +forward 7 +down 4 +forward 4 +forward 2 +forward 8 +down 7 +down 8 +down 8 +forward 5 +forward 8 +down 5 +forward 3 +down 3 +down 1 +forward 2 +forward 7 +forward 2 +forward 6 +forward 3 +forward 7 +up 6 +down 5 +forward 6 +down 5 +down 7 +forward 6 +up 5 +down 9 +down 3 +forward 1 +forward 1 +forward 3 +down 9 +forward 1 +down 9 +down 9 +down 4 +down 2 +down 5 +up 6 +forward 1 +down 7 +down 2 +forward 9 +down 8 +down 2 +forward 7 +down 8 +forward 2 +up 8 +up 6 +forward 9 +down 7 +forward 1 +down 4 +down 7 +forward 1 +forward 4 +down 1 +forward 9 +down 1 +up 2 +up 4 +forward 3 +down 4 +forward 7 +forward 1 +up 7 +up 4 +forward 7 +forward 2 +forward 5 +down 7 +down 9 +forward 4 +forward 6 +down 9 +forward 6 +up 8 +forward 3 +forward 2 +forward 3 +forward 9 +down 7 +down 4 +down 7 +down 7 +down 5 +forward 7 +down 1 +forward 3 +up 3 +down 1 +up 7 +up 7 +up 4 +forward 9 +down 8 +up 4 +forward 6 +forward 8 +down 8 +forward 1 +down 6 +forward 1 +forward 4 +up 8 +forward 3 +up 6 +up 1 +down 4 +up 1 +forward 8 +up 1 +forward 7 +down 1 +up 9 +down 3 +forward 4 +down 6 +down 7 +forward 7 +forward 4 +down 1 +up 3 +forward 3 +up 7 +up 9 +up 9 +forward 7 +down 8 +forward 5 +up 2 +forward 7 +forward 8 +down 2 +down 6 +down 1 +down 1 +down 5 +down 5 +up 5 +forward 1 +forward 3 +down 9 +down 6 +forward 9 +forward 1 +down 4 +forward 7 +forward 6 +up 4 +down 8 +down 9 +forward 3 +down 9 +up 5 +forward 3 +up 1 +forward 3 +forward 1 +forward 8 +up 6 +down 6 +forward 9 +forward 7 +forward 8 +down 1 +forward 9 +forward 1 +forward 3 +forward 6 +down 1 +down 9 +down 9 +forward 1 +down 2 +down 5 +forward 7 +forward 6 +down 5 +forward 8 +forward 1 +forward 5 +forward 6 +down 6 +down 9 +down 7 +forward 7 +down 2 +down 2 +up 2 +forward 9 +forward 4 +forward 2 +up 9 +forward 3 +forward 1 +forward 6 +down 4 +down 9 +down 9 +down 1 +down 3 +down 1 +forward 5 +down 7 +forward 9 +forward 7 +forward 4 +forward 7 +forward 8 +forward 5 +down 8 +down 1 +up 1 +forward 9 +forward 9 +down 4 +up 7 +up 3 +down 1 +forward 5 +forward 2 +down 6 +down 6 +up 3 +down 6 +up 7 +forward 2 +forward 2 +forward 8 +down 3 +up 5 +down 4 +forward 5 +down 4 +forward 8 +down 5 +down 2 +forward 6 +down 2 +down 3 +down 5 +up 6 +down 7 +forward 6 +forward 2 +down 8 +up 1 +up 1 +forward 2 +down 3 +forward 3 +down 8 +down 4 +forward 1 +down 2 +forward 6 +up 3 +forward 8 +down 6 +up 7 +forward 2 +forward 9 +forward 4 +forward 4 +up 7 +forward 6 +up 1 +forward 1 +forward 3 +down 4 +up 7 +forward 8 +forward 4 +down 8 +forward 4 +down 8 +forward 9 +down 3 +down 4 +up 6 +up 1 +forward 7 +up 3 +forward 5 +forward 4 +forward 5 +forward 7 +forward 1 +down 3 +up 5 +forward 7 +forward 4 +down 9 +down 6 +down 7 +up 3 +up 7 +up 8 +up 9 +down 4 +up 1 +forward 1 +up 3 +forward 6 +down 8 +forward 4 +down 7 +down 5 +down 4 +forward 7 +forward 5 +down 4 +down 7 +up 5 +down 2 +down 1 +down 8 +forward 7 +down 4 +forward 5 +up 9 +down 3 +up 2 +down 3 +forward 2 +forward 2 +forward 8 +down 2 +down 3 +forward 2 +down 6 +forward 9 +down 6 +down 1 +down 8 +down 3 +forward 4 +forward 4 +forward 4 +up 8 +forward 8 +up 4 +down 1 +forward 5 +down 9 +forward 7 +up 9 +up 3 +down 9 +down 8 +forward 3 +forward 4 +forward 5 +forward 4 +up 7 +down 2 +up 5 +forward 6 +down 3 +forward 6 +down 8 +down 3 +down 3 +down 4 +forward 8 +down 9 +down 2 +forward 2 +down 7 +forward 3 +up 2 +forward 4 +down 8 +forward 2 +forward 9 +forward 3 +down 6 +forward 9 +down 7 +forward 1 +forward 2 +forward 4 +forward 4 +up 4 +up 2 +down 7 +forward 9 +forward 9 +forward 7 +up 7 +down 2 +down 9 +forward 8 +down 5 +up 2 +down 6 +forward 9 +up 3 +down 5 +down 4 +forward 9 +forward 3 +down 6 +down 8 +up 5 +up 3 +down 2 +forward 9 +down 3 +forward 6 +down 9 +forward 5 +down 6 +up 6 +down 6 +forward 6 +forward 1 +down 3 +down 3 +up 8 +forward 1 +forward 4 +up 2 +forward 3 +forward 1 +forward 8 +forward 7 +down 7 +down 4 +down 6 +down 2 +forward 3 +down 2 +forward 6 +up 3 +down 9 +down 2 +forward 6 +down 6 +forward 5 +forward 2 +up 4 +forward 5 +up 5 +up 5 +up 3 +forward 9 +down 7 +forward 4 +down 7 +up 5 +down 3 +forward 5 +forward 3 +down 7 +up 2 +down 5 +forward 9 +forward 7 +up 7 +forward 5 +up 5 +down 1 +up 7 +forward 9 +down 8 +forward 2 +forward 8 +down 7 +down 3 +down 1 +up 7 +forward 4 +down 3 +forward 1 +forward 1 +forward 6 +up 7 +up 1 +forward 2 +down 8 +down 4 +down 2 +down 6 +forward 5 +down 7 +down 8 +down 7 +down 5 +down 5 +forward 1 +down 9 +forward 5 +down 6 +down 9 +up 3 +down 4 +forward 3 +down 6 +up 6 +forward 8 +forward 8 +forward 2 +down 2 +up 1 +forward 6 +forward 6 +up 9 +up 4 +forward 9 +up 7 +up 6 +down 2 +down 3 +up 7 +down 7 +forward 4 +forward 8 +down 3 +forward 1 +down 2 +forward 9 +forward 4 +forward 6 +down 7 +up 9 +forward 9 +forward 1 +forward 2 +down 1 +down 8 +down 7 +forward 3 +down 4 +down 9 +forward 2 +up 2 +forward 3 +up 3 +down 9 +down 2 +forward 3 +down 3 +forward 7 +forward 6 +down 6 +down 7 +forward 2 +down 9 +up 3 +down 6 +forward 3 +down 2 +down 1 +up 6 +down 3 +down 3 +down 1 +down 5 +down 3 +up 4 +down 2 +forward 5 +down 2 +down 8 +down 2 +down 5 +forward 9 +forward 4 +down 4 +down 2 +down 8 +forward 9 +down 8 +forward 1 +up 6 +forward 6 +down 7 +down 1 +down 2 +down 8 +down 8 +up 8 +forward 6 +forward 8 +forward 9 +forward 2 +forward 5 diff --git a/src/days/day_2.rs b/src/days/day_2.rs new file mode 100644 index 0000000..4277675 --- /dev/null +++ b/src/days/day_2.rs @@ -0,0 +1,54 @@ +use std::fs::File; +use std::io; +use std::io::BufRead; +use std::io::BufReader; + +/// Parses a string & returns its effect on the horizontal & vertical position/aim +pub fn parse_ins(s: &str) -> (i32, i32) { + let mut parts = s.split_ascii_whitespace(); + let command = parts.next().unwrap(); + let num: i32 = parts.next().unwrap().parse().unwrap(); + + match command { + "forward" => (num, 0), + "down" => (0, num), + "up" => (0, -num), + _ => unimplemented!(), + } +} + +pub fn part1() -> io::Result { + let file = File::open("input/day2")?; + let reader = BufReader::new(file); + + let mut forward = 0; + let mut depth = 0; + + for line in reader.lines() { + let (f, d) = parse_ins(&line.unwrap()); + + forward += f; + depth += d; + } + + Ok(forward * depth) +} + +pub fn part2() -> io::Result { + let file = File::open("input/day2")?; + let reader = BufReader::new(file); + + let mut forward = 0; + let mut depth = 0; + let mut aim = 0; + + for line in reader.lines() { + let (f, a) = parse_ins(&line.unwrap()); + + aim += a; + forward += f; + depth += aim * f; + } + + Ok(forward * depth) +} diff --git a/src/days/mod.rs b/src/days/mod.rs index cfb592e..9fa404a 100644 --- a/src/days/mod.rs +++ b/src/days/mod.rs @@ -1 +1,2 @@ pub mod day_1; +pub mod day_2; diff --git a/src/main.rs b/src/main.rs index ab7d15f..3838616 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,4 +4,6 @@ fn main() { // Day 1 println!("Day 1, part 1: {}", days::day_1::part1().unwrap()); println!("Day 1, part 2: {}", days::day_1::part2().unwrap()); + println!("Day 2, part 1: {}", days::day_2::part1().unwrap()); + println!("Day 2, part 2: {}", days::day_2::part2().unwrap()); }