diff --git a/Cargo.toml b/Cargo.toml index d95f8b9..a60ae85 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,7 @@ edition = "2021" [[bin]] name = "day1" path = "src/day1.rs" + +[[bin]] +name = "day2" +path = "src/day2.rs" diff --git a/inputs/day2.txt b/inputs/day2.txt new file mode 100644 index 0000000..ac80dd3 --- /dev/null +++ b/inputs/day2.txt @@ -0,0 +1,1000 @@ +forward 9 +down 9 +up 4 +down 5 +down 6 +up 6 +down 7 +down 1 +forward 6 +down 4 +forward 8 +up 5 +forward 9 +down 1 +down 4 +up 4 +up 5 +up 4 +down 1 +forward 8 +down 1 +forward 2 +forward 8 +down 9 +forward 2 +down 6 +down 2 +up 8 +down 6 +forward 9 +forward 7 +down 6 +forward 3 +down 2 +forward 4 +down 5 +up 2 +down 9 +down 8 +up 5 +forward 5 +forward 4 +up 9 +forward 9 +down 8 +forward 8 +forward 2 +up 8 +down 7 +forward 8 +down 3 +forward 6 +up 9 +forward 9 +forward 4 +forward 9 +forward 6 +down 4 +up 2 +forward 4 +up 5 +up 6 +forward 9 +down 3 +forward 4 +forward 9 +down 1 +forward 1 +up 6 +up 4 +forward 7 +up 7 +up 3 +forward 2 +forward 8 +forward 6 +down 4 +forward 2 +forward 3 +down 7 +down 5 +down 8 +down 5 +forward 1 +down 8 +down 2 +down 8 +down 3 +forward 4 +forward 8 +forward 9 +down 1 +forward 8 +down 1 +down 6 +down 7 +down 7 +forward 5 +forward 3 +down 2 +down 1 +forward 2 +forward 1 +down 6 +down 4 +up 5 +up 9 +down 4 +forward 9 +down 2 +down 5 +down 4 +down 2 +forward 2 +forward 4 +forward 6 +forward 6 +forward 3 +down 6 +up 5 +forward 8 +forward 3 +down 9 +down 3 +forward 4 +forward 2 +down 9 +down 8 +down 7 +down 3 +forward 2 +down 7 +down 3 +down 5 +forward 6 +up 9 +up 8 +forward 5 +down 6 +down 1 +down 6 +down 5 +forward 7 +down 2 +forward 8 +forward 7 +forward 2 +forward 8 +up 6 +forward 5 +down 2 +down 5 +up 8 +up 6 +forward 1 +down 4 +up 5 +up 5 +up 5 +forward 4 +up 1 +forward 3 +down 9 +down 6 +up 1 +forward 1 +forward 2 +forward 1 +forward 4 +forward 6 +forward 6 +up 7 +down 7 +down 7 +down 9 +forward 9 +down 1 +down 5 +down 1 +down 7 +down 1 +up 6 +forward 2 +down 4 +up 3 +up 2 +forward 6 +up 4 +down 1 +down 5 +forward 9 +up 4 +up 3 +forward 3 +up 7 +forward 2 +forward 5 +down 9 +forward 7 +forward 4 +down 1 +up 2 +forward 4 +up 4 +down 2 +forward 4 +up 5 +up 1 +down 9 +down 3 +up 6 +forward 7 +up 7 +forward 2 +down 4 +up 3 +up 3 +forward 4 +up 5 +down 3 +up 8 +forward 6 +forward 8 +down 1 +down 9 +down 7 +forward 7 +forward 5 +forward 2 +up 9 +forward 3 +forward 1 +down 7 +down 6 +forward 5 +up 3 +forward 6 +down 4 +forward 9 +down 7 +forward 9 +down 9 +down 5 +down 6 +down 2 +down 2 +down 8 +down 3 +down 9 +forward 5 +up 6 +forward 1 +down 3 +down 2 +up 1 +up 6 +forward 3 +down 6 +down 6 +up 9 +up 8 +forward 2 +down 7 +forward 5 +up 9 +down 7 +down 3 +forward 2 +forward 2 +up 9 +forward 1 +forward 7 +down 9 +forward 6 +forward 7 +up 8 +down 7 +down 5 +down 3 +up 6 +down 5 +forward 6 +down 9 +down 6 +up 9 +down 7 +forward 2 +down 5 +up 4 +down 4 +down 8 +forward 7 +down 9 +forward 8 +forward 6 +down 7 +down 1 +forward 5 +up 6 +forward 4 +up 7 +up 4 +up 5 +forward 9 +forward 5 +forward 4 +down 6 +down 5 +forward 2 +forward 7 +down 8 +forward 3 +up 5 +down 2 +up 3 +forward 4 +up 5 +up 2 +forward 4 +forward 1 +forward 1 +forward 4 +forward 4 +down 2 +forward 1 +forward 1 +up 5 +up 7 +down 8 +down 4 +forward 2 +forward 2 +down 3 +forward 7 +down 8 +up 3 +forward 2 +down 2 +forward 3 +up 2 +forward 3 +up 6 +down 7 +up 7 +down 3 +up 9 +forward 3 +forward 7 +down 7 +up 9 +down 6 +down 2 +forward 8 +forward 8 +up 7 +down 6 +forward 2 +forward 1 +down 4 +up 2 +forward 6 +up 7 +down 5 +up 1 +forward 3 +forward 9 +up 4 +forward 5 +forward 8 +down 3 +up 5 +forward 9 +down 6 +up 9 +forward 5 +down 4 +down 1 +down 6 +up 9 +up 2 +forward 5 +down 1 +up 3 +down 5 +forward 2 +down 4 +forward 5 +down 6 +down 4 +down 4 +forward 1 +down 7 +down 2 +forward 4 +forward 5 +up 9 +down 6 +down 2 +forward 7 +up 8 +down 9 +forward 7 +down 5 +down 2 +down 8 +down 8 +up 4 +up 3 +down 3 +down 7 +forward 4 +forward 6 +down 4 +up 7 +forward 4 +forward 4 +forward 1 +down 3 +down 2 +forward 7 +forward 2 +up 9 +down 7 +up 7 +forward 2 +forward 6 +forward 9 +down 3 +forward 7 +forward 5 +up 5 +up 1 +forward 6 +forward 4 +down 2 +forward 3 +forward 9 +down 1 +forward 6 +forward 7 +forward 1 +up 7 +up 4 +forward 7 +forward 8 +down 7 +down 8 +down 9 +forward 7 +down 9 +up 6 +down 7 +up 3 +down 7 +forward 4 +forward 9 +forward 1 +down 4 +forward 1 +up 4 +up 4 +forward 9 +forward 8 +up 4 +down 2 +forward 4 +forward 2 +forward 8 +down 2 +up 6 +down 4 +forward 6 +forward 5 +down 2 +forward 9 +down 5 +forward 5 +down 3 +down 2 +up 9 +down 3 +forward 6 +forward 6 +up 9 +down 1 +forward 4 +up 3 +forward 1 +forward 3 +forward 3 +down 6 +down 2 +forward 8 +down 4 +forward 8 +forward 8 +forward 5 +up 6 +forward 3 +down 1 +down 8 +forward 3 +forward 4 +down 2 +down 7 +up 8 +forward 3 +forward 8 +up 2 +forward 6 +down 4 +forward 9 +forward 5 +down 1 +forward 6 +forward 2 +down 3 +up 4 +down 7 +down 2 +up 2 +forward 7 +down 6 +down 2 +up 5 +up 5 +down 9 +down 7 +down 3 +down 1 +down 9 +forward 4 +down 4 +forward 7 +forward 8 +forward 4 +up 6 +forward 6 +forward 9 +down 2 +forward 4 +down 8 +down 4 +forward 5 +forward 2 +up 4 +down 3 +up 8 +up 1 +down 1 +forward 9 +up 3 +up 1 +forward 1 +forward 7 +forward 1 +down 7 +forward 7 +forward 7 +down 7 +forward 4 +up 6 +forward 3 +down 1 +up 1 +up 8 +forward 5 +forward 2 +up 4 +forward 7 +down 2 +down 3 +down 8 +up 7 +up 5 +forward 8 +down 5 +down 3 +down 9 +forward 6 +forward 4 +down 9 +up 5 +forward 3 +up 7 +up 9 +up 1 +forward 1 +forward 3 +forward 1 +up 8 +up 4 +down 1 +down 8 +down 3 +down 1 +down 1 +down 9 +forward 4 +down 3 +forward 9 +forward 2 +down 1 +forward 9 +up 7 +forward 6 +up 4 +forward 8 +forward 3 +down 2 +down 2 +down 2 +up 5 +forward 1 +up 1 +forward 7 +down 1 +forward 1 +down 8 +up 4 +up 1 +forward 7 +down 8 +down 9 +forward 2 +forward 1 +up 3 +forward 4 +up 8 +forward 5 +down 2 +forward 6 +forward 8 +up 9 +forward 2 +down 7 +down 4 +up 3 +forward 1 +forward 6 +forward 9 +down 1 +down 8 +down 1 +down 2 +forward 3 +forward 9 +forward 2 +forward 4 +forward 7 +forward 3 +up 8 +up 9 +forward 3 +forward 6 +down 5 +up 6 +down 8 +forward 5 +up 4 +up 9 +forward 6 +forward 3 +up 9 +forward 8 +forward 5 +forward 9 +forward 7 +up 6 +forward 3 +forward 1 +up 4 +forward 9 +forward 8 +up 1 +up 2 +down 3 +down 4 +down 9 +down 4 +down 5 +down 6 +down 2 +down 5 +forward 6 +forward 4 +up 2 +up 7 +down 5 +down 9 +forward 3 +down 5 +forward 6 +down 7 +forward 1 +forward 7 +forward 9 +forward 7 +forward 4 +forward 4 +up 1 +up 4 +down 6 +up 2 +up 1 +down 4 +forward 2 +down 4 +forward 6 +down 3 +up 6 +down 2 +up 3 +forward 1 +forward 9 +forward 3 +up 9 +forward 7 +forward 5 +forward 4 +down 5 +down 9 +forward 6 +forward 7 +up 1 +forward 7 +forward 2 +forward 2 +forward 5 +forward 6 +down 3 +down 7 +down 3 +down 4 +down 6 +down 1 +forward 2 +down 8 +forward 4 +forward 7 +up 1 +down 4 +down 1 +down 2 +down 3 +up 3 +forward 9 +forward 2 +down 8 +up 3 +forward 8 +forward 7 +up 8 +down 8 +forward 2 +down 9 +down 9 +down 5 +forward 1 +forward 3 +forward 6 +up 1 +up 2 +forward 1 +down 3 +up 6 +forward 2 +forward 8 +forward 2 +down 3 +forward 8 +forward 9 +down 7 +down 3 +down 2 +down 9 +down 3 +up 6 +forward 9 +forward 5 +forward 1 +forward 9 +down 9 +up 2 +down 1 +up 6 +forward 6 +down 3 +forward 6 +forward 3 +forward 5 +forward 4 +up 2 +up 4 +up 6 +forward 1 +forward 6 +up 6 +up 4 +up 7 +down 8 +down 5 +up 1 +up 1 +down 5 +forward 5 +down 9 +forward 8 +down 3 +up 4 +down 9 +down 1 +forward 2 +forward 9 +down 3 +down 8 +down 5 +down 6 +forward 7 +forward 1 +down 9 +down 7 +forward 8 +forward 2 +up 1 +up 1 +forward 7 +up 1 +forward 2 +down 9 +up 4 +forward 5 +down 1 +up 1 +down 8 +down 3 +up 1 +down 8 +down 7 +down 2 +forward 9 +down 5 +forward 2 +up 2 +up 6 +up 4 +forward 6 +up 5 +forward 5 +forward 4 +forward 8 +down 8 +down 6 +down 1 +down 3 +down 6 +forward 8 +up 1 +up 5 +down 4 +forward 4 +down 9 +forward 4 +up 6 +down 7 +forward 4 +down 3 +down 4 +forward 1 +forward 3 +down 1 +down 7 +up 8 +down 3 +down 4 +down 3 +forward 3 +down 8 +forward 8 +down 3 +down 7 +forward 2 +up 2 +forward 7 +down 9 +up 7 +forward 5 +down 2 +down 5 +up 4 +up 8 +forward 8 +forward 9 +forward 8 +down 8 +forward 6 +forward 9 +forward 6 +forward 8 +forward 6 +forward 8 +forward 2 +down 7 +down 3 +forward 7 +down 4 +down 5 +up 1 +forward 5 +down 3 +down 7 +up 4 +forward 9 +down 2 +down 3 +forward 1 +up 6 +down 1 +down 9 +forward 8 +forward 9 +forward 2 +down 6 +down 4 +up 3 +up 8 +forward 1 +down 3 +up 8 +up 7 +down 4 +up 3 +down 7 +down 2 +down 5 +down 7 +down 2 +forward 2 +down 3 +up 2 +forward 8 +up 1 +forward 2 +up 4 +forward 1 +forward 8 +forward 6 +forward 2 +down 2 +forward 5 +up 4 +down 9 +down 7 +forward 2 +down 9 +down 9 +forward 6 +down 8 +down 4 +down 7 +down 9 +forward 7 +forward 7 +up 6 +forward 3 +forward 5 +forward 6 +down 8 +up 1 +forward 2 +up 4 +up 2 +down 8 +down 9 +down 1 +down 3 +forward 7 +forward 5 +forward 6 +up 6 +down 7 +up 8 +up 1 +forward 8 +down 5 +up 1 +down 2 +down 5 +forward 6 +down 4 +forward 5 +down 4 +forward 3 +down 5 +up 4 +up 7 +forward 2 +up 2 +down 8 +forward 6 diff --git a/src/day1.rs b/src/day1.rs index b79360d..bc13f7a 100644 --- a/src/day1.rs +++ b/src/day1.rs @@ -18,10 +18,7 @@ fn main() { .collect(); println!("increased {} times", increases(&measurements)); - println!( - "increased {} times", - increases(&convolve(&measurements)) - ); + println!("increased {} times", increases(&convolve(&measurements))); } #[test] diff --git a/src/day2.rs b/src/day2.rs new file mode 100644 index 0000000..4a05c45 --- /dev/null +++ b/src/day2.rs @@ -0,0 +1,66 @@ +use std::io::{self, BufRead}; +use std::num::ParseIntError; +use std::str::FromStr; + +enum Action { + Forward, + Down, + Up, +} + +struct Command { + action: Action, + units: usize, +} + +impl FromStr for Command { + type Err = ParseIntError; + + fn from_str(s: &str) -> Result { + let words = s.split_once(' ').unwrap(); + let action = match words.0 { + "forward" => Ok(Action::Forward), + "down" => Ok(Action::Down), + "up" => Ok(Action::Up), + _ => Err(()), + }; + let units = words.1.parse()?; + Ok(Command { + action: action.unwrap(), + units: units, + }) + } +} + +fn main() { + const INPUT: &'static str = include_str!("../inputs/day2.txt"); + let commands: Vec = io::Cursor::new(INPUT) + .lines() + .map(|l| l.unwrap().parse().unwrap()) + .collect(); + + let mut position = 0; + let mut depth = 0; + let mut aim = 0; + + for command in commands { + match command.action { + Action::Forward => { + position += command.units; + depth += aim * command.units; + } + Action::Down => { + aim += command.units; + } + Action::Up => { + aim -= command.units; + } + } + } + + println!( + "horizontal position {}, depth {}, aim {}", + position, depth, aim + ); + println!("solution {}", position * depth); +}