diff --git a/aoc2022/benches/aoc2022_bench.rs b/aoc2022/benches/aoc2022_bench.rs index 65817f5..618c7f5 100644 --- a/aoc2022/benches/aoc2022_bench.rs +++ b/aoc2022/benches/aoc2022_bench.rs @@ -1,11 +1,9 @@ use criterion::{criterion_group, criterion_main, Criterion}; use aoc2022::day01; -use aoc2022::day02; fn aoc2022_all(c: &mut Criterion) { c.bench_function("day01", |b| b.iter(|| day01::run().unwrap())); - c.bench_function("day02", |b| b.iter(|| day02::run().unwrap())); } criterion_group! { diff --git a/aoc2022/input/day02.txt b/aoc2022/input/day02.txt deleted file mode 100644 index 3914035..0000000 --- a/aoc2022/input/day02.txt +++ /dev/null @@ -1,2500 +0,0 @@ -A Z -A Y -B X -B X -C X -B X -A X -A X -C X -A X -A X -A Y -B X -A Y -C X -C X -A X -A Y -C X -B X -A X -B X -A X -A X -B Y -B Y -A X -A X -A X -A X -A X -A Y -A X -B X -B Y -A Y -C Z -C X -A X -A Y -A X -A X -A Y -A X -A Y -A X -B X -C X -A X -B X -A X -C X -A Y -B X -B X -A X -A X -C Y -B X -A X -C X -B X -B X -A X -A X -B X -A Y -C X -A Y -A X -A X -A Y -B X -A X -A X -A X -B Y -A X -A X -A Y -A X -A X -B Y -B Y -B X -C X -B Y -A X -C X -C X -A Y -A X -A Z -B X -C X -A Y -B X -A X -A X -A X -A Y -C X -A X -A Z -A X -A Y -B Y -A X -C X -B X -A Y -B Z -B X -C Y -B X -B Z -A Y -B X -C X -C Y -A X -A Y -A X -B X -A Y -B Y -A X -C Y -A Y -B Y -A X -B Y -B X -B Y -A X -B Y -A X -C Z -A X -C X -A Y -A X -C X -A X -A X -A X -C X -B Z -A X -B Y -B X -A Y -A X -A X -B Y -B Y -A Y -B X -A X -C Y -A X -C X -A X -A X -A X -A X -A X -C Z -C X -A Z -C Z -A X -A Y -B X -C X -B X -B Y -C X -B X -A X -A X -A X -A Y -B X -B Y -A X -C X -A X -A X -A X -A X -C Y -A Z -C X -A X -A Y -B X -A Y -A X -A Y -A X -A X -A X -A X -A Y -A X -B X -A X -A X -C Y -C Y -A X -C X -A X -A X -C X -C X -B Z -B X -B X -A X -A Y -B Y -A X -A X -C X -C X -C X -B X -C X -B Y -A X -B Y -B X -B X -A X -B Y -A Y -C X -B X -C X -A Y -B X -C X -A X -C X -A X -B Y -A X -A X -B Z -C X -B X -C X -B X -A X -A X -A X -A X -A X -C X -C X -A X -A Z -A Y -A X -A X -A X -A X -C Y -C Y -B Z -A X -A X -B X -B X -A Y -A X -B Y -A X -B Y -A X -C Y -C X -A Y -B Y -C X -A X -A X -A X -A Y -A X -A X -A X -B Y -B X -C X -C Y -A Y -A Z -B X -C X -B X -C X -A X -B Z -B Y -A X -C X -A Y -B X -B X -A Y -A X -A X -A Y -A X -B X -A X -A X -C Y -C Y -A Y -A Y -B Y -B Y -B Y -B X -A X -A Y -B Y -B X -A Y -A X -A Y -C X -C X -B Y -A Y -B Y -A Y -A X -B Y -B X -C X -A X -A X -A X -B Y -B X -A X -B Y -A Y -A X -C X -A X -B Y -A X -A X -B Y -A Y -A X -C Y -B Z -A Y -C X -A Y -A X -B Y -A X -B Y -B Y -B X -B X -A X -A X -C X -B Y -B X -C X -B Y -A X -A X -A X -A X -B Y -C X -B X -A X -A X -A Y -C Y -A Y -B X -A X -B X -A X -A Y -B Y -A X -C X -C X -A Y -B X -C Y -A Y -B X -A X -A Y -C X -A X -A X -B Y -A Y -B X -B Y -B Y -A X -A X -A X -B Y -A Y -A X -B X -A Y -A Y -B X -C Y -A X -A Y -A X -B X -A X -B X -C Z -A X -A X -B Y -A X -A X -A X -C Z -C X -A Z -C Y -B X -A Y -B X -A X -A Y -A X -C X -A X -A X -C Y -A Z -C Y -B Y -B X -B X -A Y -C X -B X -A Z -A X -A Z -C X -A X -C Z -C X -B Z -C Y -B Y -A X -B Y -A X -A X -C X -B X -A X -C Z -B Y -B Y -A Y -B Y -A X -A X -B Y -A X -A X -C Y -C X -A X -C Y -C X -B X -B X -A X -B Y -A Y -A X -B Y -B Y -B X -B X -A X -B X -B X -B Y -B Y -C X -B X -B X -A X -A X -A X -A X -A Y -C Y -A X -A Y -C Z -A Y -C X -A X -C Y -A X -A X -A Y -A Z -A Y -A Y -A X -A Y -A Z -C X -C Z -B X -A X -A X -B X -A X -A X -A X -C X -A X -A Y -A X -A X -A Y -C Z -C X -A X -A X -A Z -A X -C X -A Y -C X -A Y -C X -C X -A X -A X -A Y -B Y -C X -C X -B X -B Z -B X -B X -A X -C X -A Y -C X -A Z -B X -B Y -A Y -A Y -A X -A Y -A X -A X -A Y -A X -A X -B Z -A X -A X -A X -B Y -B Y -C Z -A Y -A Y -B Y -A X -B X -C X -C Y -C X -B X -C X -A Y -A X -A X -B X -C X -B X -A Y -B X -B Z -A Y -A X -A Y -B X -B Z -A X -A X -C X -A X -A Y -A X -B X -A X -A X -A Z -B X -B Y -C Y -C X -A Y -A X -B Y -C X -A X -C Y -A X -A Y -A Y -A X -A X -C X -C X -A Y -A Y -C X -A X -B X -C X -B Y -C Y -C X -B X -B Y -C X -B X -B Y -A X -A X -B X -A Y -A X -B X -A X -C Y -A X -B X -A Y -C Y -A X -A Y -A Z -C Z -A X -A X -C X -A X -B X -A X -C X -C X -A Y -A X -C Y -A Y -A X -B Y -A X -A Y -A X -C Z -C Z -C X -A X -A X -A X -A X -C X -A X -C X -B X -B X -A X -A Y -B Y -B X -B X -A Y -A Y -A X -A X -B Y -B X -A X -C X -B X -C X -B Y -B Z -B Y -A X -A X -A X -A X -A X -B Y -A X -C X -B Z -A X -C Y -A X -B X -C Y -A X -A Y -B X -A X -B Y -B X -A Y -C Y -C X -A Y -A X -A X -A X -C X -B X -C X -A Y -A X -A Y -C Z -C X -A X -A Y -B X -B X -B X -B X -A X -B X -A Z -B Y -A X -A X -A X -C Z -A Y -A Y -C X -C X -C Y -B Y -A Y -A X -A X -C Y -A X -C X -A X -A X -C Y -A Y -A X -C X -A X -A Y -C X -A Y -A X -A X -A X -B X -B X -A X -B Y -C Y -C X -A Y -B X -B X -B Z -C X -B Y -A Y -C Z -B X -C X -A X -A Y -B Y -B X -C Z -B X -A X -C X -C X -A X -A X -A Y -B Y -B X -A Y -C Y -B Y -B Y -A X -A Y -A X -B X -A Y -A X -A Y -A X -B Z -B X -A X -A Y -A X -B Y -A Y -A X -A X -C X -A X -A X -A X -A X -B Y -B X -A X -A X -C Y -C X -A Y -A X -B X -A X -B X -B X -B Y -A X -B X -B Y -A X -B X -C X -A X -A X -C Z -A X -B X -A X -B X -B X -B Y -A X -B Y -C Y -A X -C X -A X -B X -B Y -A X -C X -B X -A X -C Y -C X -B X -A X -B X -A Z -C Y -A X -A X -B X -A Y -B X -A X -A Y -B X -A X -C Y -A X -C X -B X -A X -C Y -C X -A X -B Y -B X -A Y -B X -A X -B X -A Y -B X -A X -A X -C X -A X -A X -A X -A X -C X -C X -B X -B Y -B X -B Z -A X -B X -B Y -B X -B X -A X -A Z -A Z -A X -B Y -A X -B X -B Y -A X -B Y -B X -A X -C X -C Y -A X -A X -B X -B X -B Y -A X -C X -B Y -A X -A Z -A X -C Y -A Y -B X -C X -C X -A X -B X -C X -A Z -A X -A X -B Y -C X -A X -A Y -C Z -B X -A Y -A X -A Z -C Y -A X -C X -A X -C Y -B X -A X -A X -B Y -A X -B X -B X -B X -C X -C X -A X -C Z -A X -C Y -A X -C Y -A Y -B Y -B X -B Y -B X -C Y -B Y -B Y -B X -B Y -A Y -A Y -C Z -A X -A X -A X -A Z -B X -B Y -B X -B Y -A X -C X -B X -A X -C Y -B X -C X -C Y -B Y -A X -B Y -B X -C X -B X -C X -B X -A X -C X -B Z -B Z -C X -A Y -B X -A Y -A X -B X -C Y -C X -A Y -C Y -B Z -B Y -B Y -B Y -B Z -B Y -A X -A X -A Y -B Y -B Y -A X -A Z -C X -A X -A Y -C X -A Y -A X -B X -A X -A X -C X -A X -A X -C Y -B Y -A Y -A X -A X -B Y -A X -B X -A X -A X -B X -B X -A X -B Y -A X -A Y -B Y -A Y -A X -C X -A Y -A X -C X -A X -A X -B X -C Y -C Y -B X -B Z -A X -A Y -A X -A X -C Z -A X -B X -A Z -A X -A X -A X -A X -A X -A X -C X -B X -B X -C X -A X -A X -A X -A X -A X -A X -B X -A X -C X -A Y -A X -A X -A X -A X -B X -B Y -A Y -A X -A X -C X -C X -A X -A X -C X -A X -A X -A X -A X -A X -A X -C X -A X -A X -A X -A X -B X -A X -A X -B Y -C Y -A X -A Y -C Y -A X -B X -B X -A X -A X -A X -B X -A X -A X -A X -A Y -A X -B Y -A Y -A X -A Y -A X -C X -A X -C Y -B X -B X -A X -A X -A X -A X -A X -C Y -A Z -A X -B X -B X -A X -A X -C Z -A X -B Z -B Y -C Y -A X -A X -C X -B X -B X -B X -C X -A X -A Y -B Y -C X -A X -B Y -A X -C Z -B X -A Y -A X -A X -C Y -A X -A X -C X -A X -B X -B Y -B Y -B X -A X -A Y -C X -A X -A X -A X -B X -C X -B Y -A X -A X -A Y -A X -A X -B X -C X -C X -A Y -B X -A X -A X -A X -B Y -A X -B X -A X -A X -A X -A Y -A X -A Z -C X -B Y -B X -A X -B X -C X -A X -A X -B X -A X -A X -A X -A X -B X -A X -C X -A Y -B X -C X -A X -B X -A X -B Y -A X -C Y -A X -C Y -C X -B Y -A Y -A X -A X -B X -A X -C X -A X -A Z -B X -A X -A X -A Y -A X -A X -C X -B Y -C Z -A X -A Y -B X -B X -A X -B Y -C X -A X -B X -A Y -B X -A X -A Y -A X -A X -C Y -B X -A Y -C X -C X -A Y -A Y -A X -B Z -A Y -C X -C X -C Y -A Y -B X -B Z -A X -B Y -A X -A X -B X -A Y -C X -C Y -A X -B Y -A Y -A X -B Z -B Y -A X -B X -A X -A X -B Y -A Y -A X -A X -A X -A Y -A X -A X -C X -A X -A X -C X -A X -A X -C Z -B X -A Y -A X -B Y -B X -A X -A X -A X -C Y -C Y -B Y -A X -C X -C X -B X -A X -A X -A X -A Y -A X -A X -B Z -C X -A X -A X -A X -B Y -B X -C X -B X -A X -B X -A X -C X -A X -C X -A X -C X -B Y -B X -A X -A X -B Y -B X -B X -A X -B X -C Y -A X -A Y -A Y -A Y -A Z -B Y -A X -A X -A X -A X -A Z -A X -A X -A X -B Z -B Y -C Y -A X -A X -B X -C X -A Y -A X -B X -A X -A X -B X -B Y -A X -B X -C X -B X -A X -A X -A X -A X -B X -B X -C Y -B X -B X -A X -B X -A X -B Y -B X -A X -A X -A Y -B X -A X -B Y -A Y -B Y -B X -A Z -A X -B Y -A X -B X -A X -A X -A X -B Y -B X -A X -C Z -A Y -A Y -C X -B Z -B X -C Z -B X -B X -A X -A X -B Y -C X -A X -A Z -B X -A X -A X -B Y -A X -A X -A X -B Y -A X -C Y -A X -C Y -A X -C Y -B X -A Y -A X -B X -A X -B Y -A X -B X -B X -A Z -A X -C Y -B Y -A X -A X -C X -B Y -C Y -C X -A Y -B Y -A Y -A Y -B X -A X -A X -A X -A X -A Y -A X -A X -A X -B Y -A X -A Y -C X -A X -B X -A X -A X -A X -C Z -A X -A Y -A X -C Z -B Y -B X -A X -A Z -A X -A X -A Y -A X -A X -A X -B Y -A X -B X -A X -A X -A X -A X -B X -B Z -C X -C X -C X -B Y -A X -B Y -B X -A Y -B X -B X -A X -C Y -B X -A X -A X -A X -A X -A X -A X -B Y -C Y -B X -C Y -B Y -C X -A Y -C X -B X -C X -B X -A X -A X -B Y -A X -C X -A Y -C X -C X -B Y -A X -C X -C X -B Z -A X -C X -A Y -B Y -A X -A Y -A X -B X -A X -A X -B Y -A Z -A X -B Y -B X -A X -A Y -B X -B X -A X -A X -A Y -A X -C X -A X -B X -C X -C X -C Y -A X -B X -B Y -A X -C X -A X -B Y -A X -B X -B Z -A X -A X -A X -B X -C X -C X -B X -A Y -A X -A Y -A X -A X -A X -A X -C Y -B X -A X -A X -A X -B Y -A X -B X -B Y -A Z -A Y -A X -A Y -A X -A Y -B Z -A X -B Y -B Z -B X -A X -C X -C Y -A X -A X -A X -B X -A Y -C X -A X -B Y -A Y -B X -B X -A X -A Y -B X -A Y -C X -A X -C X -A X -C X -A X -A X -C X -A X -A X -A Y -B X -C X -B Y -A Y -A X -A X -A X -A Z -B Y -A X -A X -B Y -A Y -B Y -A X -B Y -B X -A X -A X -A X -B X -B Y -A X -C Z -B Z -A X -A X -A X -B X -B Y -A X -B Z -A X -A Y -A Y -A Y -C X -B Y -A X -A X -C Y -B X -A Y -A X -A X -B Y -C X -C X -C X -A X -A X -A X -B Z -A X -C X -A X -A X -B X -B X -A X -C Y -A X -B X -C X -B Y -A X -B Y -C X -A X -C X -B Y -A X -A Y -C X -C Z -A X -C X -A X -A X -C X -A Y -C X -B Y -A X -C Z -A X -B X -B Y -A Y -A X -A X -A X -A X -A Y -A Y -B X -C X -A Y -A X -C X -B X -B Y -C X -B X -A X -B X -A X -C Y -A X -A X -A X -A X -C X -A X -B X -A X -B X -A X -A Y -C X -C Y -C X -A Z -B X -A Z -A X -B Y -A Y -B X -A X -B Y -A Y -A X -B Y -A X -B X -A X -A X -A X -A X -B Y -A Y -A X -A X -B X -B Z -A Y -A Y -C Y -C Y -A X -C X -A X -B Y -B X -B Y -B X -C X -B X -C X -A X -B Y -A X -B X -A X -B X -C Y -B X -A X -A Y -A X -B Y -C X -C X -A X -B Z -A X -A X -B Y -A X -A X -B X -A Y -C X -A X -C Y -A Y -C X -A Y -A X -A X -A X -A Y -B X -B X -A Y -C X -B Y -A Y -B X -B X -B X -B X -A X -B X -B X -A X -C X -A X -C X -C X -A X -C X -B X -A Y -A Z -A X -A X -A X -A Y -A X -A X -C Z -A X -B X -C X -A X -B X -C X -C X -A X -B Y -A X -A X -A X -A Y -B Y -B Y -A X -B X -A X -C X -A X -B Y -C Y -C X -C X -B X -B X -C X -A Y -B X -A X -A X -A X -A X -A Y -B X -B X -C Y -C Y -B Y -B X -A X -C Y -A X -C Z -C X -A X -B Z -A X -A Z -C X -B Y -A X -A Y -A X -B X -A Y -C X -C Y -B X -B X -B Y -B Y -C X -B Y -B Y -B X -C X -C X -A X -A X -A Y -A X -A Y -B X -A X -B Y -B X -A X -A X -A Y -B X -B X -A X -B X -C Y -A Y -B Y -C Y -B Y -A X -B Y -B X -B Z -A Y -A Y -C Y -B X -A X -A X -B Y -A X -A X -B X -A X -A X -A X -B X -B X -B Y -A X -C X -A X -B X -A X -A X -A Y -B X -B X -B X -C X -B Y -C Z -A X -C X -A X -B X -A X -A Y -B Y -A Z -A X -C X -A Y -A X -A X -A X -A X -A Y -A X -C X -A X -C Y -B X -A X -A X -A X -A X -A X -C X -A X -B X -B Y -B Y -B X -C Z -C X -B X -C Y -A X -A X -A X -A X -A X -C X -A X -B X -C X -C X -A X -A X -B X -A X -A X -A X -B X -A X -C X -A X -A Y -A X -B Y -A X -B X -A Y -C X -B X -C Y -C Y -B X -A X -B X -C X -A X -C X -A X -C X -B X -B X -C X -C X -B X -B X -C Y -B X -A X -B X -B X -B Y -A Y -B X -A X -C Y -A Y -C Y -A X -B Y -A X -A X -A X -B Y -B X -A Y -A X -A X -A Y -B X -B Y -A Y -B X -C X -C Z -B X -A Y -A X -C X -A X -C X -B Z -C X -A Y -A X -C X -B Y -A Z -B Y -A X -A X -A Y -C X -A Z -A X -B Y -A X -B X -A Y -A Y -A X -A X -A X -C Y -B X -A X -B X -B Y -B Y -A X -A X -A Y -A X -C X -B X -C X -B X -B X -C Y -A Y -B X -A X -A X -A X -C X -C X -A X -B X -A X -A X -A Z -A X -C X -B X -A X -C Y -A Y -C Y -B Y -B Y -B Z -A X -C X -A X -B Y -B Y -A X -B Y -A X -B Y -B X -B X -C X -B Y -B X -A X -A Y -B X -A X -B Z -A Y -B X -B X -A Y -C Y -B X -B Y -A X -B X -A Y -A Y -B X -B Y -B X -A X -C X -A X -A X -A X -B Y -A Y -B X -C X -C Z -A X -B Y -A Y -A X -B X -A X -A Y -A X -A Y -A X -A X -A X -C X -A Y -C Y -A X -A X -C Z -B X -A Y -B X -B X -B X -B X -B X -A X -A X -B X -B Y -A X -C Y -C X -A X -A X -A X -A X -A X -A X -A X -A Y -B Y -A X -A X -A Z -C Y -C Y -B X -C Z -A X -A X -A X -B Z -B Y -A X -A X -A X -B X -A X -C X -C X -C X -B X -A X -A X -C Z -B Z -C Y -A X -A X -A X -C Z -A X -A X -C X -C X -A X -C Y -A X -A Y -A X -A X -A Z -C X -C X -A Y -B X -B X -A Y -A X -B X -C Y -A X -A Y -B Z -A X -C Y -A X -B Y -A X -A Y -A X -C Z -A X -B X -A X -B Y -A X -A X -A X -A X -A X -B Y -C X -A X -B X -A X -A Y -A Z -A X -A X -B Y -B X -C X -A X -A X -B X -B Y -B Y -A Y -B Z -B Y -A X -A X -A X -A X -B X -C Y -A X -A X -A X -A X -A X -A X -A X -A X -B Y -A X -B X -C X -C X -C X -C X -A X -B Y -A X -B X -B X -A X -A X -C Z -A X -B X -B X -C X -A X -B X -B X -B X -B X -B Y -A X -B X -A Y -A X -A Y -B Y -A X -C Y -B X -A X -A X -A X -A Z -A Y -A X -C X -C X -B X -A X -A X -B X -A X -A Y -C Z -A Y -B X -B Y -A X -C Y -B Z diff --git a/aoc2022/input/day02_provided.txt b/aoc2022/input/day02_provided.txt deleted file mode 100644 index db60e36..0000000 --- a/aoc2022/input/day02_provided.txt +++ /dev/null @@ -1,3 +0,0 @@ -A Y -B X -C Z diff --git a/aoc2022/src/day02.rs b/aoc2022/src/day02.rs deleted file mode 100644 index 97a24e5..0000000 --- a/aoc2022/src/day02.rs +++ /dev/null @@ -1,202 +0,0 @@ -use std::fmt::Write; - -use anyhow::{bail, Context, 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 mut score = 0; - for line in input.lines() { - let round: RoundPart1 = line.parse()?; - score += round.score(); - } - - Ok(score) -} - -fn part2(input: &str) -> Result { - let mut score = 0; - for line in input.lines() { - let round: RoundPart2 = line.parse()?; - score += round.score(); - } - - Ok(score) -} - -#[derive(Debug)] -enum Shape { - Rock, - Paper, - Scissors, -} - -impl std::str::FromStr for Shape { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - match s { - "A" | "X" => Ok(Self::Rock), - "B" | "Y" => Ok(Self::Paper), - "C" | "Z" => Ok(Self::Scissors), - _ => bail!("unsupported shape encoding: {}", s), - } - } -} - -impl Shape { - fn score(&self) -> u64 { - match self { - Self::Rock => 1, - Self::Paper => 2, - Self::Scissors => 3, - } - } -} - -struct RoundPart1 { - opponent_move: Shape, - my_move: Shape, -} - -impl std::str::FromStr for RoundPart1 { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - let (opponent_move, my_move) = - s.split_once(' ').context("couldn't split round on space")?; - let opponent_move = opponent_move.parse()?; - let my_move = my_move.parse()?; - - Ok(Self { - opponent_move, - my_move, - }) - } -} - -impl RoundPart1 { - fn outcome(&self) -> Outcome { - match (&self.opponent_move, &self.my_move) { - (Shape::Rock, Shape::Rock) => Outcome::Draw, - (Shape::Rock, Shape::Paper) => Outcome::Won, - (Shape::Rock, Shape::Scissors) => Outcome::Lost, - (Shape::Paper, Shape::Rock) => Outcome::Lost, - (Shape::Paper, Shape::Paper) => Outcome::Draw, - (Shape::Paper, Shape::Scissors) => Outcome::Won, - (Shape::Scissors, Shape::Rock) => Outcome::Won, - (Shape::Scissors, Shape::Paper) => Outcome::Lost, - (Shape::Scissors, Shape::Scissors) => Outcome::Draw, - } - } - - fn score(&self) -> u64 { - self.outcome().score() + self.my_move.score() - } -} - -struct RoundPart2 { - opponent_move: Shape, - outcome: Outcome, -} - -impl std::str::FromStr for RoundPart2 { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - let (opponent_move, outcome) = - s.split_once(' ').context("couldn't split round on space")?; - let opponent_move = opponent_move.parse()?; - let outcome = outcome.parse()?; - - Ok(Self { - opponent_move, - outcome, - }) - } -} - -impl RoundPart2 { - fn shape_to_play(&self) -> Shape { - match (&self.opponent_move, &self.outcome) { - (Shape::Rock, Outcome::Lost) => Shape::Scissors, - (Shape::Rock, Outcome::Draw) => Shape::Rock, - (Shape::Rock, Outcome::Won) => Shape::Paper, - (Shape::Paper, Outcome::Lost) => Shape::Rock, - (Shape::Paper, Outcome::Draw) => Shape::Paper, - (Shape::Paper, Outcome::Won) => Shape::Scissors, - (Shape::Scissors, Outcome::Lost) => Shape::Paper, - (Shape::Scissors, Outcome::Draw) => Shape::Scissors, - (Shape::Scissors, Outcome::Won) => Shape::Rock, - } - } - - fn score(&self) -> u64 { - self.outcome.score() + self.shape_to_play().score() - } -} - -enum Outcome { - Lost, - Draw, - Won, -} - -impl std::str::FromStr for Outcome { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - match s { - "X" => Ok(Self::Lost), - "Y" => Ok(Self::Draw), - "Z" => Ok(Self::Won), - _ => bail!("unsupported outcome encoding: {}", s), - } - } -} - -impl Outcome { - fn score(&self) -> u64 { - match self { - Self::Lost => 0, - Self::Draw => 3, - Self::Won => 6, - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - const PROVIDED: &str = include_str!("../input/day02_provided.txt"); - - #[test] - fn part1_provided() { - assert_eq!(part1(PROVIDED).unwrap(), 15); - } - - #[test] - fn part1_real() { - assert_eq!(part1(INPUT).unwrap(), 11150); - } - - #[test] - fn part2_provided() { - assert_eq!(part2(PROVIDED).unwrap(), 12); - } - - #[test] - fn part2_real() { - assert_eq!(part2(INPUT).unwrap(), 8295); - } -} diff --git a/aoc2022/src/lib.rs b/aoc2022/src/lib.rs index c10d8ec..784a117 100644 --- a/aoc2022/src/lib.rs +++ b/aoc2022/src/lib.rs @@ -1,4 +1,3 @@ #![warn(clippy::explicit_iter_loop, clippy::redundant_closure_for_method_calls)] pub mod day01; -pub mod day02; diff --git a/aoc2022/src/main.rs b/aoc2022/src/main.rs index 6f39647..98d4d03 100644 --- a/aoc2022/src/main.rs +++ b/aoc2022/src/main.rs @@ -3,10 +3,9 @@ use anyhow::Result; use aoc::DayFunc; use aoc2022::day01; -use aoc2022::day02; fn main() -> Result<()> { - let days: &[DayFunc] = &[day01::run, day02::run]; + let days: &[DayFunc] = &[day01::run]; aoc::run(days) }