From 0eed53749c8c5fa620f2e7fb5de3ce91597549b2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 2 Dec 2021 10:25:59 +0100 Subject: [PATCH] 2021: day02: quick solve --- aoc2021/input/day02.txt | 1000 +++++++++++++++++++++++++++++++++++++++ aoc2021/src/day02.rs | 86 ++++ aoc2021/src/lib.rs | 1 + aoc2021/src/main.rs | 3 +- 4 files changed, 1089 insertions(+), 1 deletion(-) create mode 100644 aoc2021/input/day02.txt create mode 100644 aoc2021/src/day02.rs diff --git a/aoc2021/input/day02.txt b/aoc2021/input/day02.txt new file mode 100644 index 0000000..353ba9a --- /dev/null +++ b/aoc2021/input/day02.txt @@ -0,0 +1,1000 @@ +forward 4 +down 8 +down 1 +forward 6 +forward 7 +down 7 +forward 3 +forward 5 +up 9 +down 1 +forward 5 +down 8 +forward 4 +forward 5 +down 5 +down 1 +forward 1 +down 3 +forward 5 +forward 5 +down 1 +up 2 +down 2 +down 5 +down 5 +forward 3 +forward 7 +forward 5 +forward 9 +forward 8 +down 4 +down 6 +up 5 +down 1 +forward 6 +up 3 +forward 7 +forward 4 +down 7 +up 5 +up 5 +up 1 +up 5 +forward 5 +forward 2 +forward 7 +down 7 +forward 9 +down 9 +up 8 +up 8 +up 2 +forward 5 +forward 8 +up 5 +forward 1 +down 1 +down 6 +forward 1 +forward 2 +forward 4 +forward 6 +up 4 +up 5 +down 4 +down 9 +down 4 +forward 4 +up 8 +up 2 +down 2 +up 9 +forward 9 +forward 4 +forward 1 +forward 6 +up 3 +forward 6 +forward 2 +up 3 +down 3 +forward 6 +down 9 +down 7 +forward 3 +up 7 +up 8 +forward 3 +down 1 +down 8 +forward 7 +forward 3 +down 2 +down 5 +forward 5 +forward 1 +down 1 +down 3 +down 5 +forward 1 +down 1 +down 7 +forward 1 +up 2 +down 5 +up 3 +up 2 +down 7 +up 4 +forward 2 +down 3 +down 1 +up 7 +down 6 +down 1 +forward 7 +down 5 +down 2 +forward 7 +up 9 +forward 6 +forward 6 +forward 2 +forward 6 +down 2 +forward 4 +down 5 +forward 4 +down 8 +forward 3 +down 9 +up 5 +forward 6 +down 5 +forward 5 +down 4 +down 1 +forward 3 +up 9 +up 5 +up 9 +down 3 +forward 7 +forward 7 +up 5 +up 6 +up 3 +down 9 +down 4 +up 8 +down 9 +down 6 +forward 5 +down 6 +forward 7 +down 4 +down 9 +down 9 +forward 6 +down 4 +up 2 +down 8 +up 3 +up 7 +up 1 +forward 9 +down 4 +down 8 +up 2 +forward 7 +forward 5 +down 9 +down 9 +up 5 +down 4 +forward 8 +up 3 +up 4 +up 8 +down 7 +forward 6 +down 8 +down 1 +up 1 +down 7 +down 7 +forward 3 +down 9 +up 2 +forward 2 +up 1 +up 1 +down 2 +down 8 +up 5 +down 3 +down 3 +forward 2 +down 4 +forward 2 +down 2 +forward 3 +down 6 +forward 8 +down 5 +down 6 +forward 9 +forward 2 +down 6 +down 4 +up 9 +forward 2 +forward 1 +up 9 +down 9 +forward 8 +down 4 +up 3 +down 1 +forward 9 +forward 9 +forward 3 +forward 4 +down 2 +down 1 +forward 5 +up 3 +forward 6 +down 8 +down 8 +down 7 +forward 1 +forward 6 +down 9 +down 6 +forward 8 +down 5 +up 6 +down 2 +forward 2 +up 3 +forward 6 +forward 4 +up 4 +down 5 +forward 2 +down 5 +forward 1 +forward 5 +up 7 +up 1 +down 3 +up 8 +forward 4 +forward 8 +forward 8 +up 2 +down 8 +up 2 +up 2 +up 7 +down 9 +down 1 +forward 1 +down 3 +down 1 +down 4 +forward 3 +down 4 +down 5 +forward 7 +forward 6 +forward 7 +forward 8 +up 6 +down 1 +down 9 +up 2 +up 2 +forward 1 +up 9 +forward 6 +down 2 +forward 6 +forward 8 +up 8 +down 6 +forward 2 +up 4 +up 5 +down 3 +down 2 +forward 7 +down 8 +forward 4 +forward 8 +up 4 +down 7 +forward 6 +forward 1 +up 4 +down 4 +down 9 +down 7 +down 6 +down 1 +forward 7 +up 3 +down 1 +down 9 +down 9 +down 1 +down 7 +down 8 +up 9 +down 7 +up 4 +forward 4 +down 2 +up 8 +down 6 +down 6 +forward 4 +up 5 +down 9 +down 8 +up 7 +down 4 +forward 9 +up 3 +down 6 +forward 7 +up 4 +forward 9 +down 6 +forward 6 +down 3 +down 5 +down 4 +up 5 +down 8 +down 8 +forward 5 +forward 1 +down 3 +forward 7 +down 3 +up 6 +forward 5 +up 7 +forward 8 +down 1 +forward 7 +forward 8 +forward 9 +forward 7 +up 5 +forward 9 +up 7 +down 7 +forward 8 +down 8 +up 6 +down 4 +forward 6 +forward 3 +forward 3 +forward 6 +down 3 +up 4 +down 3 +down 8 +forward 2 +down 1 +down 5 +forward 2 +up 3 +up 5 +forward 2 +forward 8 +down 7 +down 9 +forward 8 +forward 5 +forward 2 +down 3 +forward 6 +forward 3 +forward 4 +forward 9 +down 8 +forward 2 +down 6 +down 8 +forward 1 +forward 5 +up 3 +forward 8 +up 3 +forward 2 +down 3 +down 5 +up 4 +down 9 +up 5 +down 2 +forward 7 +forward 8 +forward 2 +forward 4 +forward 6 +down 1 +up 3 +forward 3 +up 6 +forward 1 +down 9 +forward 4 +forward 5 +forward 3 +down 7 +down 9 +forward 1 +forward 5 +up 1 +down 6 +down 7 +up 4 +up 7 +forward 2 +down 7 +forward 5 +up 9 +up 8 +forward 8 +up 1 +up 6 +down 7 +up 8 +forward 2 +down 1 +forward 7 +forward 6 +forward 2 +up 7 +down 5 +down 6 +forward 8 +down 3 +down 2 +forward 5 +down 7 +forward 2 +down 9 +forward 7 +forward 9 +forward 1 +down 7 +down 3 +down 8 +down 4 +up 1 +down 2 +forward 5 +forward 9 +forward 5 +up 6 +up 1 +forward 3 +forward 1 +forward 7 +down 9 +forward 4 +down 7 +up 6 +forward 1 +down 7 +forward 5 +down 4 +down 2 +up 1 +forward 6 +up 6 +down 3 +up 5 +down 8 +down 5 +forward 2 +down 1 +forward 8 +forward 4 +down 3 +forward 3 +forward 6 +forward 2 +forward 9 +forward 2 +down 3 +forward 8 +down 4 +down 1 +forward 4 +down 1 +forward 5 +down 5 +down 6 +forward 6 +down 6 +down 9 +forward 7 +down 6 +forward 6 +forward 7 +forward 1 +forward 4 +forward 2 +forward 3 +up 8 +down 3 +down 7 +forward 6 +forward 4 +up 7 +forward 6 +forward 6 +down 7 +up 8 +down 5 +forward 6 +forward 8 +down 3 +up 2 +down 5 +forward 2 +forward 5 +up 8 +forward 1 +down 3 +forward 3 +forward 2 +down 3 +down 8 +forward 3 +forward 1 +down 5 +down 1 +up 1 +forward 9 +down 7 +up 2 +forward 8 +down 6 +down 5 +up 9 +forward 2 +forward 5 +forward 8 +up 2 +up 5 +forward 2 +down 2 +down 9 +down 3 +forward 7 +up 5 +forward 7 +down 6 +forward 2 +forward 7 +forward 8 +forward 8 +down 7 +forward 3 +forward 6 +down 5 +forward 8 +forward 6 +up 2 +forward 1 +up 9 +forward 1 +up 3 +forward 6 +down 4 +down 5 +down 8 +up 6 +forward 1 +down 8 +forward 3 +forward 2 +forward 9 +down 5 +down 9 +forward 5 +down 7 +up 9 +forward 5 +forward 7 +forward 6 +forward 5 +down 3 +forward 6 +down 9 +up 8 +forward 4 +forward 7 +forward 3 +down 7 +forward 8 +down 5 +forward 3 +up 6 +up 5 +forward 9 +up 4 +up 9 +forward 9 +forward 3 +down 8 +forward 8 +down 3 +forward 2 +down 4 +down 1 +forward 2 +up 9 +down 7 +forward 4 +up 3 +down 9 +down 6 +forward 2 +forward 5 +down 7 +down 2 +forward 8 +down 5 +forward 8 +down 8 +down 4 +down 1 +down 2 +forward 5 +down 8 +down 1 +down 2 +forward 8 +forward 3 +down 8 +up 8 +up 8 +down 3 +forward 3 +forward 6 +down 9 +up 1 +forward 6 +up 1 +down 1 +down 9 +forward 3 +up 1 +forward 7 +forward 6 +forward 1 +up 3 +down 8 +forward 7 +down 3 +down 5 +down 7 +forward 6 +down 9 +forward 9 +forward 8 +down 9 +forward 1 +down 2 +up 7 +down 3 +down 1 +forward 8 +forward 4 +forward 9 +up 9 +down 4 +forward 1 +down 1 +up 1 +up 1 +up 6 +down 7 +down 5 +forward 1 +forward 7 +up 3 +down 7 +up 3 +down 4 +up 9 +up 9 +forward 1 +down 4 +down 6 +forward 2 +forward 6 +up 1 +forward 1 +down 8 +forward 7 +up 6 +forward 6 +forward 3 +up 1 +up 6 +forward 1 +down 2 +forward 8 +forward 4 +forward 2 +down 3 +forward 2 +forward 3 +forward 1 +down 6 +forward 7 +forward 7 +down 4 +forward 6 +up 3 +up 4 +up 6 +down 7 +down 8 +forward 3 +down 2 +forward 5 +down 4 +forward 6 +forward 7 +forward 8 +forward 9 +forward 3 +down 1 +forward 8 +forward 1 +down 8 +up 1 +down 3 +down 6 +down 1 +up 1 +forward 1 +down 6 +down 5 +forward 6 +down 1 +down 5 +forward 7 +up 3 +forward 4 +forward 4 +forward 1 +up 6 +up 2 +up 4 +down 4 +up 4 +forward 8 +up 8 +forward 1 +down 5 +forward 5 +down 7 +up 5 +up 7 +up 5 +forward 9 +down 1 +down 1 +forward 4 +down 2 +down 2 +down 3 +down 1 +forward 1 +up 7 +forward 6 +forward 9 +up 5 +forward 1 +forward 9 +up 2 +forward 5 +down 4 +forward 6 +down 9 +down 3 +forward 1 +down 2 +down 3 +down 1 +down 3 +forward 8 +up 6 +forward 2 +down 5 +down 9 +down 4 +up 2 +up 9 +forward 2 +down 7 +forward 9 +down 5 +down 5 +up 6 +forward 1 +forward 5 +forward 9 +down 4 +forward 2 +forward 7 +down 2 +forward 4 +down 2 +forward 3 +down 3 +down 2 +up 5 +forward 8 +up 8 +down 9 +forward 9 +down 9 +down 4 +down 1 +forward 4 +forward 9 +down 5 +down 9 +down 4 +down 5 +forward 1 +down 3 +down 3 +down 4 +forward 6 +forward 5 +down 3 +up 4 +forward 9 +forward 5 +forward 3 +forward 6 +down 8 +up 9 +forward 2 +up 6 +forward 2 +down 9 +up 9 +down 4 +forward 1 +forward 9 +down 5 +forward 9 +forward 4 +down 6 +forward 7 +forward 4 +down 7 +down 1 +forward 9 +down 6 +down 5 +forward 5 +down 5 +down 1 +forward 3 +down 7 +down 5 +down 9 +down 5 +up 6 +up 5 +down 5 +up 1 +down 9 +forward 5 +forward 9 +forward 3 +forward 4 +down 7 +forward 3 +forward 3 +down 5 +forward 7 +down 9 +forward 8 +forward 4 +forward 8 +forward 9 +forward 1 +forward 6 +up 9 +down 3 +forward 1 +forward 4 +down 2 +down 8 +up 4 +down 4 +forward 1 +down 5 +down 3 +down 9 +up 1 +forward 8 +down 6 +down 4 +forward 3 +down 8 +down 2 +up 6 +down 5 +forward 8 +down 4 +up 1 +forward 5 +down 1 +down 9 +down 1 +down 9 +down 3 +down 3 +forward 2 +forward 6 +down 8 +forward 1 +up 4 +down 3 +forward 9 +up 2 +down 4 +forward 9 +down 3 +down 1 +down 3 +down 4 +up 6 +down 2 +forward 3 +forward 9 +forward 7 +down 2 +down 5 +forward 4 +forward 5 +down 9 +up 3 +forward 5 +forward 9 +up 2 +forward 3 +down 4 +forward 2 +down 5 +down 8 +down 1 +forward 4 +up 4 +forward 7 +down 9 +forward 8 +down 8 +forward 3 +down 6 +up 9 +up 6 +down 2 +forward 6 +up 1 +down 5 +down 5 +down 9 +up 2 +down 2 +forward 1 +forward 8 +down 2 +up 8 +down 3 +forward 2 +down 1 +down 5 +down 5 +up 4 +forward 5 diff --git a/aoc2021/src/day02.rs b/aoc2021/src/day02.rs new file mode 100644 index 0000000..f9e03d2 --- /dev/null +++ b/aoc2021/src/day02.rs @@ -0,0 +1,86 @@ +use std::fmt::Write; + +use anyhow::{bail, Result}; + +const INPUT: &str = include_str!("../input/day02.txt"); + +pub fn run() -> Result { + let mut res = String::with_capacity(128); + + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) +} + +fn part1(input: &str) -> Result { + let commands = input + .lines() + .map(str::parse::) + .collect::>>()?; + let mut horizontal_pos = 0; + let mut depth = 0; + + for c in commands { + match c { + Command::Forward(dx) => horizontal_pos += dx, + Command::Up(dz) => depth -= dz, + Command::Down(dz) => depth += dz, + } + } + + Ok(depth * horizontal_pos) +} + +fn part2(input: &str) -> Result { + let commands = input + .lines() + .map(str::parse::) + .collect::>>()?; + let mut horizontal_pos = 0; + let mut depth = 0; + let mut aim = 0; + + for c in commands { + match c { + Command::Forward(dx) => { + horizontal_pos += dx; + depth += aim * dx; + } + Command::Up(dz) => { + aim -= dz; + } + Command::Down(dz) => { + aim += dz; + } + } + } + + Ok(depth * horizontal_pos) +} + +enum Command { + Forward(u64), + Up(u64), + Down(u64), +} + +impl std::str::FromStr for Command { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + let mut split = s.split(' '); + + let word = split.next().unwrap(); + let number = split.next().unwrap(); + + let number = number.parse()?; + + Ok(match word { + "forward" => Self::Forward(number), + "up" => Self::Up(number), + "down" => Self::Down(number), + _ => bail!("unkown command"), + }) + } +} diff --git a/aoc2021/src/lib.rs b/aoc2021/src/lib.rs index 784a117..c10d8ec 100644 --- a/aoc2021/src/lib.rs +++ b/aoc2021/src/lib.rs @@ -1,3 +1,4 @@ #![warn(clippy::explicit_iter_loop, clippy::redundant_closure_for_method_calls)] pub mod day01; +pub mod day02; diff --git a/aoc2021/src/main.rs b/aoc2021/src/main.rs index f788a63..316799b 100644 --- a/aoc2021/src/main.rs +++ b/aoc2021/src/main.rs @@ -3,9 +3,10 @@ use anyhow::Result; use aoc::DayFunc; use aoc2021::day01; +use aoc2021::day02; fn main() -> Result<()> { - let days: &[DayFunc] = &[day01::run]; + let days: &[DayFunc] = &[day01::run, day02::run]; aoc::run(days) }