diff options
-rw-r--r-- | data/2021/2.txt | 1000 | ||||
-rw-r--r-- | src/2021/2/mod.rs | 41 | ||||
-rw-r--r-- | src/2021/mod.rs | 4 |
3 files changed, 1045 insertions, 0 deletions
diff --git a/data/2021/2.txt b/data/2021/2.txt new file mode 100644 index 0000000..fcc2020 --- /dev/null +++ b/data/2021/2.txt @@ -0,0 +1,1000 @@ +forward 2 +down 1 +down 7 +forward 6 +down 6 +down 6 +forward 6 +down 6 +down 9 +up 6 +forward 5 +down 1 +down 7 +forward 5 +forward 8 +forward 8 +forward 3 +down 3 +down 9 +down 1 +forward 5 +up 2 +down 6 +forward 9 +up 5 +forward 3 +down 9 +down 6 +down 2 +down 2 +down 5 +up 8 +up 1 +down 2 +down 7 +forward 1 +down 1 +down 4 +down 2 +forward 7 +down 9 +forward 3 +up 1 +up 6 +forward 2 +forward 2 +down 5 +down 5 +forward 1 +forward 5 +down 6 +forward 8 +forward 5 +up 8 +down 7 +forward 5 +up 9 +down 3 +forward 7 +up 8 +down 3 +down 3 +up 8 +down 1 +down 5 +up 8 +down 5 +forward 5 +forward 4 +up 8 +forward 6 +down 1 +down 3 +forward 8 +forward 6 +forward 2 +down 9 +up 9 +forward 6 +up 4 +down 9 +forward 3 +forward 4 +forward 4 +up 2 +forward 6 +up 7 +forward 4 +down 7 +forward 3 +forward 1 +forward 1 +down 9 +up 6 +forward 9 +down 1 +up 4 +forward 2 +forward 1 +down 3 +down 2 +forward 8 +forward 4 +forward 6 +down 3 +down 9 +forward 7 +forward 9 +down 4 +up 3 +down 7 +down 2 +down 8 +forward 7 +down 5 +forward 5 +forward 9 +down 7 +down 4 +down 2 +up 6 +forward 6 +down 7 +down 3 +up 7 +forward 4 +down 7 +forward 1 +forward 1 +up 1 +up 8 +down 7 +forward 8 +up 9 +up 2 +forward 8 +forward 2 +forward 3 +forward 2 +down 2 +down 4 +forward 1 +forward 1 +down 6 +forward 5 +down 9 +down 9 +down 3 +forward 6 +forward 5 +down 4 +forward 4 +forward 6 +down 9 +down 4 +forward 5 +forward 6 +forward 4 +forward 6 +forward 7 +down 6 +down 4 +up 8 +down 4 +forward 9 +down 3 +down 8 +down 5 +up 6 +forward 7 +forward 8 +forward 8 +down 5 +up 3 +down 3 +forward 4 +forward 4 +up 9 +forward 6 +down 1 +down 1 +down 7 +down 6 +forward 9 +forward 2 +down 5 +up 4 +down 5 +forward 8 +down 8 +forward 1 +forward 4 +up 2 +down 4 +forward 1 +down 6 +forward 1 +forward 3 +up 8 +forward 1 +up 8 +down 7 +forward 6 +up 5 +down 6 +up 8 +down 7 +down 6 +forward 7 +forward 9 +forward 2 +down 6 +down 4 +up 2 +forward 1 +down 8 +forward 9 +down 5 +down 7 +forward 6 +up 1 +forward 2 +forward 3 +forward 9 +up 3 +forward 7 +up 7 +up 7 +down 5 +up 7 +down 8 +forward 2 +down 4 +down 6 +up 2 +down 7 +forward 4 +down 2 +forward 3 +forward 7 +forward 4 +forward 1 +up 6 +forward 3 +forward 6 +forward 9 +up 9 +down 2 +forward 1 +forward 9 +forward 5 +forward 7 +forward 8 +down 1 +down 9 +up 4 +forward 5 +up 9 +down 9 +down 7 +forward 1 +forward 3 +forward 8 +forward 2 +forward 7 +forward 7 +forward 5 +down 8 +down 5 +up 9 +forward 2 +down 9 +forward 4 +up 9 +up 6 +up 2 +up 7 +down 2 +forward 8 +forward 9 +down 3 +down 6 +down 9 +forward 8 +down 4 +down 2 +down 8 +down 8 +down 9 +up 4 +down 5 +forward 4 +forward 7 +down 6 +down 3 +forward 9 +up 1 +forward 3 +down 1 +down 8 +up 1 +down 7 +down 5 +forward 2 +forward 3 +up 9 +down 7 +up 9 +up 8 +up 3 +forward 7 +down 4 +forward 8 +forward 9 +down 8 +forward 1 +up 7 +up 4 +down 2 +forward 6 +up 4 +forward 1 +up 1 +forward 1 +forward 2 +up 4 +up 2 +up 3 +forward 3 +forward 9 +forward 2 +down 1 +forward 9 +down 7 +forward 3 +down 3 +up 1 +down 2 +forward 9 +down 7 +down 5 +up 5 +down 2 +down 5 +forward 6 +forward 9 +forward 3 +down 5 +down 9 +forward 6 +up 3 +down 6 +down 8 +up 8 +down 1 +forward 2 +down 1 +up 5 +down 8 +up 4 +down 2 +forward 6 +forward 1 +down 8 +down 4 +down 2 +forward 4 +down 7 +up 9 +forward 6 +forward 5 +down 4 +down 5 +up 6 +down 6 +forward 4 +forward 8 +up 9 +down 8 +forward 3 +down 4 +down 9 +up 8 +down 1 +forward 7 +down 5 +down 1 +forward 7 +up 4 +forward 9 +up 6 +forward 8 +forward 1 +up 8 +up 8 +up 3 +forward 2 +forward 3 +forward 6 +forward 8 +forward 4 +down 7 +up 8 +forward 4 +down 3 +down 2 +down 5 +down 4 +up 2 +up 1 +down 3 +down 5 +down 3 +up 6 +down 8 +down 7 +down 9 +forward 2 +down 4 +up 1 +forward 4 +down 9 +forward 8 +up 3 +down 4 +down 1 +up 3 +forward 7 +forward 9 +down 5 +up 7 +forward 4 +down 4 +up 8 +down 2 +up 7 +up 3 +forward 7 +down 7 +down 4 +forward 6 +up 5 +forward 8 +down 4 +down 9 +forward 3 +down 6 +forward 3 +down 8 +down 5 +up 6 +down 8 +down 9 +down 4 +down 9 +forward 7 +down 4 +down 7 +forward 1 +down 8 +forward 9 +forward 1 +down 5 +down 3 +up 5 +forward 9 +down 7 +down 7 +up 3 +up 9 +down 4 +down 5 +forward 5 +down 5 +up 3 +forward 8 +down 5 +forward 1 +down 1 +up 6 +forward 1 +forward 4 +up 9 +up 5 +down 6 +down 7 +forward 8 +down 4 +forward 9 +forward 6 +down 7 +down 2 +up 1 +down 4 +down 5 +up 7 +down 7 +down 3 +up 8 +forward 8 +down 8 +forward 5 +down 6 +down 7 +forward 4 +up 7 +forward 9 +down 7 +up 7 +forward 2 +down 3 +down 7 +up 6 +forward 2 +down 1 +forward 1 +up 9 +forward 6 +forward 2 +forward 5 +up 1 +forward 3 +down 2 +up 2 +forward 4 +up 2 +down 2 +down 9 +up 9 +forward 2 +down 3 +down 2 +forward 9 +forward 9 +down 3 +down 6 +forward 3 +down 7 +up 6 +down 8 +forward 4 +forward 8 +forward 1 +down 7 +down 2 +forward 6 +forward 9 +up 6 +up 8 +down 4 +forward 9 +forward 9 +forward 1 +forward 4 +forward 3 +up 9 +down 8 +down 7 +down 4 +down 1 +down 9 +down 7 +forward 2 +forward 7 +forward 6 +down 7 +forward 2 +forward 1 +forward 8 +forward 9 +forward 2 +down 5 +down 9 +up 7 +forward 4 +up 4 +up 2 +down 1 +down 3 +down 4 +forward 1 +up 4 +up 1 +up 4 +down 6 +down 7 +forward 7 +down 4 +down 6 +forward 4 +forward 8 +down 2 +down 8 +down 1 +forward 1 +down 7 +down 1 +down 6 +up 2 +down 9 +forward 3 +down 7 +down 8 +down 9 +down 4 +down 7 +down 4 +up 1 +forward 1 +forward 2 +up 6 +up 6 +up 5 +forward 4 +down 3 +down 9 +forward 3 +up 5 +down 1 +forward 7 +down 6 +down 2 +up 3 +up 8 +up 5 +forward 4 +down 5 +forward 5 +forward 2 +down 3 +forward 3 +forward 9 +down 9 +down 9 +down 9 +forward 8 +forward 5 +up 1 +down 5 +forward 3 +forward 4 +forward 2 +up 1 +up 2 +up 8 +down 6 +up 4 +forward 3 +down 1 +down 6 +down 6 +up 7 +forward 7 +down 8 +up 2 +up 1 +up 5 +forward 4 +down 4 +down 8 +down 2 +down 5 +down 4 +up 4 +up 7 +forward 2 +forward 4 +forward 2 +down 6 +down 9 +up 3 +up 6 +forward 8 +forward 6 +forward 8 +forward 9 +down 7 +forward 9 +up 4 +up 5 +down 4 +down 7 +down 4 +up 8 +down 3 +forward 8 +down 2 +down 4 +forward 2 +up 6 +up 6 +down 9 +forward 6 +forward 8 +down 5 +forward 5 +down 3 +down 6 +up 9 +forward 2 +forward 8 +up 4 +forward 4 +forward 2 +down 4 +forward 3 +down 1 +up 4 +down 4 +up 7 +forward 2 +forward 8 +down 8 +up 7 +up 2 +down 7 +down 7 +forward 8 +forward 7 +forward 9 +down 4 +down 5 +down 9 +down 5 +forward 1 +down 5 +up 2 +forward 6 +forward 9 +down 3 +forward 5 +down 1 +forward 9 +up 2 +forward 1 +up 9 +forward 2 +up 2 +forward 4 +forward 3 +up 9 +forward 4 +forward 2 +up 7 +up 6 +down 3 +forward 7 +forward 1 +forward 6 +down 2 +down 8 +forward 5 +down 5 +up 5 +forward 5 +down 6 +forward 8 +forward 4 +down 2 +up 8 +forward 6 +down 2 +down 7 +forward 5 +down 4 +down 5 +up 6 +down 3 +up 6 +down 8 +forward 4 +down 8 +down 6 +forward 2 +forward 8 +up 8 +up 1 +forward 6 +down 2 +down 6 +forward 2 +forward 2 +down 8 +forward 7 +up 1 +forward 1 +down 8 +forward 3 +down 6 +forward 7 +forward 7 +up 7 +down 1 +forward 8 +up 7 +forward 8 +forward 8 +forward 2 +down 5 +up 7 +forward 1 +forward 9 +down 9 +forward 8 +down 6 +down 7 +up 4 +down 5 +forward 6 +down 8 +forward 5 +up 6 +up 4 +forward 8 +forward 5 +forward 1 +forward 3 +up 2 +down 3 +down 4 +down 2 +forward 3 +forward 2 +up 8 +up 1 +forward 5 +up 8 +down 1 +up 4 +down 6 +forward 1 +down 3 +up 8 +down 3 +forward 5 +down 7 +forward 3 +down 1 +up 8 +up 6 +down 4 +down 8 +up 2 +forward 1 +forward 8 +down 4 +down 8 +down 4 +up 7 +down 4 +forward 7 +forward 4 +forward 2 +forward 6 +up 4 +down 5 +forward 8 +forward 9 +down 1 +down 2 +down 2 +forward 6 +forward 1 +forward 4 +down 7 +forward 6 +forward 9 +down 5 +forward 9 +up 4 +down 2 +down 6 +forward 5 +forward 3 +forward 1 +forward 6 +forward 5 +forward 2 +down 9 +forward 1 +up 5 +down 2 +down 8 +up 5 +down 3 +up 1 +forward 5 +forward 8 +forward 2 +down 3 +down 7 +up 3 +up 8 +forward 5 +up 8 +forward 4 +down 7 +forward 4 +down 1 +forward 2 +forward 8 +up 9 +up 1 +forward 3 +down 6 +up 5 +down 9 +forward 8 +forward 3 +down 7 +forward 3 +up 9 +down 2 +forward 2 +down 6 +down 9 +down 4 +down 4 +down 7 +up 6 +up 2 +down 7 +forward 5 +up 1 +down 6 +up 2 +forward 8 +up 6 +forward 4 +down 2 +up 5 +down 6 +down 5 +forward 8 +forward 4 +down 5 +forward 5 +forward 3 +down 2 +forward 3 +up 3 +down 4 +up 2 +forward 9 +up 8 +forward 9 +up 5 +up 1 +forward 9 +down 8 +down 3 +forward 9 +up 4 +down 1 +forward 8 +down 6 +down 1 +down 2 +down 9 +down 1 +forward 5 +down 7 +forward 1 +up 6 +down 1 +down 6 +forward 6 +forward 9 +down 6 +forward 1 +forward 4 +up 4 +forward 1 +up 9 +forward 3 +forward 8 +down 3 +down 7 +forward 4 +up 1 +down 1 +forward 1 +down 3 +down 6 +down 9 +down 6 +forward 4 +down 1 +up 4 +forward 8 +down 6 +up 6 +down 5 +up 8 +forward 4 +up 7 +forward 4 +forward 2 +down 7 +forward 2 diff --git a/src/2021/2/mod.rs b/src/2021/2/mod.rs new file mode 100644 index 0000000..528e1b2 --- /dev/null +++ b/src/2021/2/mod.rs @@ -0,0 +1,41 @@ +use anyhow::Context as _; +use std::io::BufRead as _; + +pub fn part1() -> anyhow::Result<i64> { + let f = data!()?; + let f = std::io::BufReader::new(f); + let mut horizontal = 0; + let mut vertical = 0; + for line in f.lines() { + let line = line?; + if let Some(n) = line.strip_prefix("forward ") { + horizontal += n.parse::<i64>().unwrap(); + } else if let Some(n) = line.strip_prefix("down ") { + vertical += n.parse::<i64>().unwrap(); + } else if let Some(n) = line.strip_prefix("up ") { + vertical -= n.parse::<i64>().unwrap(); + } + } + Ok(horizontal * vertical) +} + +pub fn part2() -> anyhow::Result<i64> { + let f = data!()?; + let f = std::io::BufReader::new(f); + let mut aim = 0; + let mut horizontal = 0; + let mut vertical = 0; + for line in f.lines() { + let line = line?; + if let Some(n) = line.strip_prefix("forward ") { + let x = n.parse::<i64>().unwrap(); + horizontal += x; + vertical += aim * x; + } else if let Some(n) = line.strip_prefix("down ") { + aim += n.parse::<i64>().unwrap(); + } else if let Some(n) = line.strip_prefix("up ") { + aim -= n.parse::<i64>().unwrap(); + } + } + Ok(horizontal * vertical) +} diff --git a/src/2021/mod.rs b/src/2021/mod.rs index 6103c97..9909f65 100644 --- a/src/2021/mod.rs +++ b/src/2021/mod.rs @@ -1,11 +1,15 @@ #[path = "1/mod.rs"] mod day1; +#[path = "2/mod.rs"] +mod day2; // NEXT MOD pub fn run(day: u8, puzzle: u8) -> anyhow::Result<i64> { match (day, puzzle) { (1, 1) => day1::part1(), (1, 2) => day1::part2(), + (2, 1) => day2::part1(), + (2, 2) => day2::part2(), // NEXT PART _ => Err(anyhow::anyhow!("unknown puzzle {}-{}", day, puzzle)), } |