diff --git a/input/year2022/day02.txt b/input/year2022/day02.txt new file mode 100644 index 0000000..80144d8 --- /dev/null +++ b/input/year2022/day02.txt @@ -0,0 +1,2500 @@ +A Z +C Z +C Z +A Z +C Y +C Z +A Z +B Z +A Z +A Z +C Z +A X +C Y +C Z +C Y +C Z +A Z +C Z +A Z +A Z +C Z +C Z +C Z +A Y +C Z +C Z +C Y +A Z +C X +A Z +A Z +C Z +B Y +C Z +C Y +C X +C Z +C Z +B Y +A Z +C Z +C Y +B Y +C Z +A Y +B Y +C Z +C Z +A Z +A Z +A X +A Z +B Z +A Z +A X +A Y +C Z +C Z +A Z +C Y +A Z +C Z +B Y +C Z +C Y +B Z +A Z +C Z +A Z +B Z +A X +C Z +A Z +C Y +C Y +C Z +A Z +C Z +C Y +C Z +C Z +C Z +C Z +C Y +A Z +C Z +C Y +A Z +A Z +A Z +C Z +A X +A Z +A Z +A Z +C Z +C Y +C Y +A Z +A Z +C Y +A Z +C Z +A Z +C Y +B Y +C Z +A Z +A Z +C Z +A Z +C Y +A Z +A Z +C Y +A Z +C Z +A Z +A Z +A Z +C Y +A Z +B Z +C Y +C Z +B Y +A Z +A Z +C Z +C Z +B X +B Y +A Z +A Z +A Z +C Z +C Y +B Z +C Z +C Z +C Z +A Y +A Z +A Z +C Y +C Z +A Z +C Z +A Z +A Z +C Z +C Z +C Z +C Y +C Y +C Y +C Z +A Z +C Z +A Z +A Z +C Z +A Z +C Z +A Z +A Z +B Z +A Z +A Z +C Z +C Z +C Z +C Z +C Z +C Y +B X +A X +A Y +A X +C Z +A X +B X +A X +B Z +A Z +C Z +C Z +C Z +C Z +B Z +C Z +A Z +A Z +A Z +A Z +C Z +A Z +A Z +C Z +A Z +C Y +C Z +C Z +B Y +C Z +A X +A Z +A Z +C Y +C Z +C Z +A Z +C Z +A Z +C Z +A Z +C Y +A Z +B Y +C Z +C Z +A Z +C Z +C Y +C Z +A Z +A Z +C Z +C Z +A Z +A Z +C Z +C Y +C Z +C Z +C Z +C Y +C Z +A Z +C Z +A Z +A Z +A Z +B Z +A Z +C Y +A Y +A Z +C Z +A Z +A Z +C Z +A Z +C Z +C Z +C Z +A Z +B Z +C Y +C Z +C Z +B X +C Z +C Y +A Z +A Y +C Z +C Y +B Y +A Z +C Z +A Z +B Y +C Z +C Z +C Z +B Z +B Z +C Z +C Z +C Z +C Z +A Z +A X +B Y +C Z +C Z +A Z +C Y +A Z +C Z +A Z +C Y +C Z +A Z +C Y +C Y +C Z +A Z +C Z +C Z +C Z +A X +A Z +C Z +C Z +C Z +A Z +C Z +C Z +C Y +C Y +C Y +C Z +C Y +C Z +A Z +A Z +C Z +C Z +C Y +A Y +C Z +C Z +B Z +A Z +A Z +A Y +A Z +B Y +A Z +C Y +A Z +C Y +A Z +A Z +A X +B Z +C Y +A Z +C Z +A Y +C Z +C Y +B Y +A Z +B Z +B Z +C Z +A X +B Y +C Z +A Y +C Z +A Z +C Z +B Z +C Y +C Z +A Z +C Z +C Y +A Z +A X +A Z +A Y +C Z +A Z +C Y +A Z +C Z +C Y +C Z +B X +C Z +C Z +C Z +C Z +C Z +C Z +C Y +C Y +C Z +B Z +B Z +C Z +B Z +A Z +C Z +C Y +C Z +C Z +A Z +C Z +B Y +C Z +A Z +C Z +A Z +C Z +A Z +C Y +A Z +C Z +C Z +C Z +C Z +C Z +C Y +C Y +A Z +A Z +C Z +A Z +A Z +B Y +A Z +A Z +C Z +C Y +A Z +C Z +A Z +A Z +C Z +C Z +C Z +A Z +C Y +C Z +C Z +C Y +C Y +C Y +A Z +C Z +A Z +C Z +B Y +A X +C Z +C Z +C Z +C Z +B Z +A Z +C Z +A Z +B Z +B X +C Z +B X +C Z +C Z +A Z +B X +C Z +A Z +A Z +B Y +C Z +C Z +B X +C Y +A Z +A Z +B Z +A Z +C Z +A Z +B Y +A Z +C Z +B Y +C Y +C Z +C X +C Z +C Z +A X +C Z +A Y +C Z +A X +A Z +C Z +C Z +C Z +B Y +C Y +A Z +C Z +A Z +C Z +C Z +C Z +C Y +C Z +C Z +B Y +A Z +C Z +C Z +C Z +A Z +C Z +A Z +B Z +C Z +A Z +C Z +A Z +C Y +C Z +C Z +C Z +C Z +A Z +A Z +B Z +A Z +B Z +C Z +C Z +C Y +C Z +A Z +A Z +C Z +A Z +B Y +A Z +C Z +C Z +A Z +A Z +A Y +A Z +C Z +A Z +C Y +C Z +C Z +C Z +A Z +C Z +C Z +B X +A Z +A Z +C Y +B Z +C Z +A Z +A Z +A Y +C Z +C Z +C Z +A Z +C Z +C Z +C Z +B Y +A Z +B Z +C Y +B Y +A Z +A Z +A Z +C Z +C Y +A Z +A Z +C Z +C Z +A Z +B Z +C Z +A Z +A Z +C Z +A Z +A Z +A X +B Z +C Z +C Z +C Z +C Z +C Y +A Z +C Z +C Y +C Z +B Y +A Z +A Z +C Z +C Z +A Z +C Y +C Z +A Z +A Z +C Z +C Z +C Y +B Y +C Z +A Z +A Z +C Z +C Z +C Y +C Z +A Z +C Z +A Z +C Z +A Z +C Y +C Z +C Z +C Y +A Z +B Y +C Z +A Z +C Z +C Z +B Z +B Z +A Z +C Z +C Y +C Z +C Z +A Z +B Y +B Z +C Z +A Z +C Z +C Y +C Z +C Z +C Y +C Z +A Y +A Z +A Z +A Z +B Y +C Z +C Z +C Z +C Y +C Z +A Z +C Y +B Y +C Z +A Z +A Z +C Z +C Z +A Z +A X +B Z +A Z +C Z +A Z +C Z +C Y +A Z +A Z +C Z +C Z +B Z +B Y +A X +A Z +A Z +A Z +A Z +C Z +C Z +C Z +C Z +C Y +A Z +A Z +C Y +C X +A Z +A Z +A Z +A Z +C Z +C Z +C Z +C Z +C Z +A X +C Z +A Z +B Y +B Y +A Z +A Z +C Z +C Y +C Z +A Z +A Z +A X +A Z +C Z +A Z +A Y +A Z +C Z +B Y +B Y +C Z +B Y +A Z +B Y +C Z +B Z +B Y +C Y +C Z +C Y +C Z +A Z +C Y +C Z +C Z +C Z +A Z +C Z +C Y +C Z +B Z +C Z +A Z +B Y +B Z +C Z +B Y +C Z +A Z +C Z +C Z +A Z +C Y +C Z +B Y +A Z +B X +C Y +C X +C Y +A Z +B Z +A Z +A Y +B Y +C Z +A Z +C Z +C Y +C Z +A Z +B Y +A Z +A Z +B Y +C Y +A Y +C Y +C Z +C Z +A Z +C Z +C Z +A Y +C Z +A Z +C Z +C Z +B Y +B Y +C Z +B Z +A Z +A Z +A Z +C Z +C Y +C Z +B Y +C Y +A Z +A Z +C Z +B Y +C Y +B Y +C Z +A Z +B Y +A Z +A Z +A X +C Z +C Z +C Y +A Z +C Y +C Y +C Z +A Z +A X +C Z +A Z +A Z +A Z +C Z +C Y +A Z +A X +C Z +C Z +C Y +C Y +A Z +C Z +B Z +B X +A Z +C Z +B Y +C Y +A Z +A Z +C Y +C Z +C Y +C Y +B Y +C Z +C Z +A Z +B Y +C Z +C Z +A Z +A Z +B Y +C Z +C Y +A X +A Z +C Y +A Z +C Z +C Z +A Z +C Y +A Z +C Z +C Z +C Z +C Z +A Z +C Z +C Y +B Z +C Z +A Z +C Z +C Z +B Y +C Z +A Z +A Z +A Z +C Y +C Z +A Z +A Z +C Z +A Z +A Z +C Z +A Z +C X +A Z +A Z +C Z +A Y +B Z +A Z +C Y +A Z +C Y +B Z +C Z +B X +C Z +A Z +A Z +C Z +B Y +C Z +C Z +B Z +A Z +B Y +C Z +C Z +C Z +A Z +C Z +B Z +A Z +C Z +A Z +B Z +A X +C Y +A X +C Z +C Y +C Z +C Z +B Y +B Y +C Z +B X +C Z +A Z +A Z +B X +A Z +C Z +C Z +C Z +B Y +C Z +C Y +A Z +B Z +C Y +C Z +C Z +A Z +C Z +A Y +C Z +C Z +C Z +A Z +C Z +C Z +C Y +C Z +B Y +B X +A Z +A Z +C Z +C Y +C Y +C Y +B Y +A X +C Z +B Y +A Z +A Z +C Z +B Y +B Y +C Z +A Z +C Z +C Z +C Z +C Z +B Y +C Z +B Y +B Y +A Z +C Z +B Y +A Z +A X +C Z +C Z +C Z +C Z +C Z +C Z +C Z +B Y +A Z +B Z +A Z +C Z +A Z +C Z +A Z +C Z +A Z +A Z +C Y +A Z +A Z +C Z +C Z +C Z +C Z +B Z +C Z +A X +A Y +B Y +B Z +A Z +C Y +A Z +B X +A Z +C Z +B Z +B Y +C Z +C Z +C Y +C Z +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A X +A Z +A Z +C Z +C Z +C Z +A Z +B Z +C Z +C Z +A X +C Y +A Z +C Z +C Y +A Z +A Z +C Z +C Z +A Z +C Z +C X +C Y +A Z +A Z +C Z +B Y +C Z +A Z +A Z +A Z +B Z +A Y +B Y +C Z +C Z +C Y +C Y +B Y +A Z +A Z +B Y +C Z +C Z +A Z +A Y +A X +A X +C Z +A Z +A X +A Y +A Z +C Y +A Z +C Y +A Z +C Y +B Z +B Y +A Z +C Z +A Z +C Z +C Y +A Z +C Z +A Z +B Y +A Z +C Z +C Z +C Z +A Y +C Z +C Z +C Z +A Z +C Y +A Y +C X +C Z +A Z +A Z +A Z +A Z +A Z +B Y +B Y +C Z +C Z +C Y +A Z +C Z +C Y +C Z +C Y +A Z +A Z +C Z +A Z +C Z +C Y +A Z +C Y +A Z +C Z +C Y +B Y +C Y +C Y +A Z +A Z +C Y +C Z +C Y +B Z +A Z +C Z +C Z +B Y +C Y +A Z +A Z +C Z +A Z +B Z +C Z +A Z +C Z +C Z +A Z +A Y +B Y +C Y +C Z +A Z +C Z +A Z +C Z +A Z +C Y +C Y +C Z +A Z +A Z +B Y +C Z +A Z +C Z +A Z +A Z +C Z +C Z +C Z +C Y +B Y +C Z +A Z +B Z +A Z +A X +C Z +A Z +A Z +C Z +B Y +A Z +A X +C Y +C Z +C Z +C Z +C Z +B Y +C Z +B Z +A Z +A Z +A Z +A Z +B Z +B X +C Z +A Z +C Y +A X +C Z +C Y +C Z +C Z +B X +C Z +C Y +A Z +C Z +A Z +C Z +B Z +A Z +C Z +B Y +C Z +C Z +C Z +C Z +C Z +C Z +A Z +C Z +A Z +A Z +B Y +A Z +C Y +B Y +B X +C Z +C Y +C Z +C Z +C Y +C Y +B Y +C Y +C Z +A Z +A Z +A X +C Z +C Z +B Y +C Z +C Z +A Z +C Z +B X +C Z +C Z +C Y +C Z +C Z +C Z +A X +C Z +A Z +A Z +C Y +B Z +A Y +C Z +C Y +B Y +C Z +C Z +C Z +C Z +A Z +C Z +C Z +A Z +C Z +C Y +C Z +C Z +A Y +C Z +C Y +A Z +C Z +C Y +C Z +C Y +C Y +B X +A Z +C Z +C Y +C Y +A Z +A X +C Z +A Z +C X +B Y +A X +B Z +C Z +B Y +A Z +C Z +A Z +C Z +A X +C Z +C Z +C Z +C Y +A Z +C Y +C Z +C Z +A Z +A Z +A Z +C Z +A Z +C Y +C Z +A Z +A Z +C Z +A Z +C Z +C Z +C Z +C Z +B Y +A Z +C Z +A Z +C Y +C Z +A Z +C Y +C Z +A Z +C Y +C Y +A Z +A Z +A Z +C Z +C Z +B Y +A X +A X +A Z +C Z +C Y +C Y +C Y +C Z +A Z +B Y +A Z +A Z +C Z +C Y +C Z +C Y +C Z +A Z +C Z +C Z +C Z +C Y +A Z +C Z +B X +C Z +C Z +C Z +C Z +A Z +C Z +C Z +C Z +C Y +C Z +A Z +C Z +B Y +A Z +C Y +A Y +C Z +C Z +B Z +C Z +C Z +B Y +C Z +A Z +C Y +C Z +B Y +C Z +A Z +C Z +C Z +C Z +A Z +B Y +C Y +A Z +C X +C Z +C Y +C Z +A Z +A Z +C Y +C Z +A Z +B Y +A X +C Y +B Y +A Z +B Y +A X +B Z +A Z +A Z +A Z +A Z +C Z +C Z +A Z +A Z +A X +C Z +A Z +A Z +A X +B Y +C Z +C Z +C Z +B Z +C Z +A Z +C Z +C Z +A Z +A Z +C Y +C Z +C Z +A Z +A Z +C Y +C Y +C Z +A Z +B X +A Z +A Z +C Z +C Z +C Z +B Y +A Z +C Z +A X +B Z +B Z +C Z +C Z +C Y +A X +A Z +B Y +C Z +B Y +C Z +B Y +C Z +C Y +C Z +A Z +C Y +C Y +A Z +C X +B Z +C Z +C Z +A Z +C Y +A Z +A Z +B Z +A Z +C Z +C Z +C Z +C Z +A Y +C Y +A Z +C Z +C Z +C Y +A Z +B Y +A Z +B Z +A Z +A Z +B X +B Z +A Z +C Z +C Z +C Z +C Z +C Z +A Z +C X +C Z +C X +C Z +B Z +C Y +A X +A Z +A Z +C Z +C Y +C Z +C Z +A Z +C Z +A Z +A Z +A X +C Z +A Z +A Z +A Z +A Z +A Z +A Z +B Y +A Z +C Z +B X +B Z +C Z +A Z +A Z +B Z +C Y +A X +C Z +B Y +B Y +C Y +A Z +A Z +A X +C Z +C Z +A Z +C Y +B Y +A Z +B X +A Z +A X +A X +A X +A Z +A Z +C Z +A Z +A Z +A X +B X +B Z +B X +A Z +B Y +A Z +C Z +A Z +A Z +C Z +A Y +C Z +B Z +C Y +C Y +A Z +C Z +C Z +A Z +B Y +C Z +A Z +A X +B Z +A Y +B Z +C Y +C Y +C Z +A Z +C Z +C Z +A Y +C Z +A Z +B Y +C Z +B X +A Z +C Z +C Y +B Y +A Z +B Y +B Z +A Z +A Z +B Y +C Z +A Z +C X +C Z +C Z +B Z +B Z +C Z +A Z +A Z +C Z +A Z +C Z +C Z +A Y +C Z +A X +A Z +A Z +A Z +A Z +A Y +A X +C Z +C Z +C Z +C Z +A Z +B Z +C Z +B Z +B Y +C Z +C Z +C Z +A Z +C Z +B Y +C Y +A X +A Z +A X +C Z +B X +C Z +A Z +B Y +C X +A Z +C Z +C Z +A Z +C Z +A Z +A Z +A Z +A Z +A Y +A Y +A Z +A Z +A Z +A Z +C Z +C Z +C Z +A Z +A Z +C Z +A Y +C Z +B Z +C X +C Z +C Y +A Y +B Y +C Z +C Z +A Z +C Z +A X +B Y +C Y +C Z +C Z +A Z +A Y +A Z +A Z +C Z +A Z +C Z +C Z +C X +A Z +C Z +A Z +A Z +C Y +B Y +C Z +A X +A Z +C Z +A Z +C X +A Z +C Z +C Y +A Z +A Z +C Z +C Z +C Z +A Z +A Z +C Z +A Z +A X +C X +C Z +C Z +A Z +A Z +A Y +C Z +C Z +B X +C Z +C Y +C Z +C Z +A Z +C Z +A Z +C Y +C Y +C Z +A Z +C Z +B Y +C Y +A Z +B Z +A Z +B Z +A Z +A Z +C Z +C Z +C Z +A Z +C Z +A Z +B Z +C Z +C Z +C Z +A Z +C Z +C Z +C Z +C Z +C Z +C Z +C Z +B Y +A Z +B Y +C Y +C X +C Z +C Z +C Z +C Z +C Y +A Z +C Y +A Z +C Y +C Z +C Y +C Z +C Y +A Z +A Z +C Z +C Z +B Z +C Y +C Z +C Z +C Z +B Z +B Z +B Z +A Z +A Z +A Z +C Z +B Z +A Z +A Z +C Y +A Y +C Y +C Z +C Y +C Z +C Z +C Y +A Z +C Z +B Y +C Y +B Y +A Z +C Z +A Z +A X +A Z +C Z +A Z +A Z +A Z +C X +C Z +A Z +C Z +C Z +C Z +C Z +C Z +C Z +A Z +C Z +C Y +A Y +B Y +B X +B Z +C Z +C Z +A Z +B Y +C Z +A Z +B Z +C Z +A Z +C Y +C Y +B Y +C Z +C Y +C Z +C Y +A Z +C Z +C Z +A Z +A Z +A Z +C Z +A Z +A X +A Z +A Z +C Z +C Y +C Z +C Z +C Z +A Y +B Y +A Z +A Z +A Z +A X +B Z +A Z +C Y +B Y +A Z +A Y +B Z +A Z +B Y +C Z +B Y +A Z +B Y +C Z +C Z +A Z +A Z +A Z +C Y +B Y +B X +A Z +C Z +A X +B Z +A X +A Y +C Z +B X +B Y +A Z +A Z +B X +C Z +C Y +C Y +C Y +C X +C Z +C Z +C Z +A Z +B Y +C Z +A Z +A Z +A Z +A Z +C Y +C Z +C Z +A Z +C Z +B Z +B Y +A Z +A Z +C Z +A X +A Y +B Y +A Z +A Z +B Z +A Z +C Z +A Y +A Z +C Z +C Z +A Z +A Z +C Z +B Y +A Z +A X +C Y +A Z +C Z +C Z +C Z +C Z +A Z +C Y +C Z +A Z +A Z +C Y +A X +C Z +B Y +A Z +B Z +C Z +B Z +A Z +C Y +C Z +B Y +C Y +C Z +A Z +C Z +C Z +A Y +A Z +B Z +A X +C Y +A Z +A Z +C Z +B Y +C Z +A Z +C Z +A Z +B Y +A Z +C Z +A Z +B Y +A Z +C Z +C Z +C Z +A Z +A Z +C Z +A Z +A Z +C Y +A Y +B Y +B Z +C Z +C Y +A Z +C Y +C Z +B Y +C Y +C Z +B Z +C Z +C Y +C Z +C Y +C Z +C Y +B X +C Z +C Y +A Z +A X +A Z +C Z +A Z +B Y +C Z +A Z +A Z +B Y +C Y +A Z +A Z +C Z +C Z +C Y +A Z +C Y +B Y +A Y +C Z +A Z +A Z +C Z +C Z +C Z +C Z +A Z +A Z +C Y +A Z +C Z +C Z +C Z +C Z +A Z +A Y +C Y +A Z +C Y +A Z +A Z +A Z +C Z +A Z +C Z +A Z +C Z +C Z +A Z +C Z +C Z +C Y +B Z +C Z +C Y +A Z +B X +C Y +C Y +C Z +A Z +B Y +A Z +A X +B Y +A Z +A Z +B Y +B Z +A Z +A Z +C Z +A X +C Z +C Z +B Z +C Z +C Y +B Y +A Z +B Z +C Z +C Z +C Z +A Y +A X +C Y +A Z +B Z +A Z +B Z +C Z +A Y +C Z +C Y +A Z +C Y +C Z +C Y +B Y +B Y +C Z +A X +C Z +A Z +A Z +C Y +C Y +C Z +A Z +B Z +C Z +C Z +C Z +A Y +A Z +C Z +C Z +C Z +C Z +C Z +B Y +C Z +C Z +A Z +B Y +A Z +C Z +C Z +C Z +B Z +A Z +C Y +A Z +C Z +B Z +C Z +B Y +C Y +A X +C Z +A Z +C Y +C Z +C Z +C Y +A Z +C Z +B Z +A Z +C Z +A Z +A X +C Z +A Z +C Z +B X +C Z +C Z +C Z +C Z +A Z +A X +C Z +C Z +A Z +C Z +A Z +C Z +B Y +A Z +C Z +A Z +C Y +C Z +C Z +A Z +C Z +A Z +A Z +A Z +B Z +C Y +B X +C Y +C Z +C Z +A X +A Z +C Z +B Y +C Z +C Y +C Z +A Z +C Z +B Y +C Z +C Y +B Z +A Z +C Z +B Z +A Z +B Z +A Z +C Z +C Z +B Y +C Y +C Y +A Z +C Z +A Z +A Y +B Y +C X +A X +C Z +C Y +B Y +C Z +A Z +A Z +C Y +C Z +C Z +A Z +B Y +B Z +A Z +A Z +A Z +B Z +C Z +C Z +C Y +A X +C Z +A Z +C Z +B Z +B Y +C X +C Z +A X +A X +C Y +B Y +C Z +C Z +A Z +A Z +A Z +A Z +C Y +C Z +A Z +A Z +C Z +C Z +C Z +C Z +C Z +A Y +A Z +C Y +C Z +B Y +A Z +C Y +A Z +A Z +B Z +C X +B Y +C Z +A Z +C Y +C Z +B Y +A Z +C Y +C Z +B Y +C Y +C Z +A Z +A X +C Z +C Y +B Z +A Z +A Z +B Y +C Z +A Z +C Z +C Z +B Y +A Z +C Z +C Z +B Y +B Y +A Z +C Z +C Z +C Z +C Z +A Z +C Z +B Z +B Y +C Z +B Y +A Z +A Z +C Y +A Z +A X +B Z +C Y +C Z +C Z +C Z +C Y +C Z +C Z +C Y +A X +B X +B X +C Z +C Y +A Z +B Y +C Y +C Z +C Z +A Z +C Y +A Z +B Z +C Z +C Y +C Y +C Z +A Z +C Z +A Z +B Z +B Z +C Y +A Z +C Z +A Z +A Z +C Z +C Z +C Z +C Z +C Z +C Z +A Z +A Z +A Z +B Y +B Z +B Y +C Y +A Z +C Z +C Y +A Z +C Z +A Z +A X +B Z +A Z +C Z +C Z +C Z +A Z +C Y +B Y +C Y +A Z +C Y +B Z +B Y +B Y +C Z +C Z +A Z \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 37327c4..2ea0ad9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,4 +13,5 @@ pub mod year2016 { pub mod year2022 { pub mod day01; + pub mod day02; } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 757714a..b4623f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -83,5 +83,6 @@ fn year2016() -> Vec { fn year2022() -> Vec { vec![ solution!(year2022, day01), + solution!(year2022, day02), ] } \ No newline at end of file diff --git a/src/util/index.rs b/src/util/index.rs index c8cfbfa..94f3197 100644 --- a/src/util/index.rs +++ b/src/util/index.rs @@ -59,6 +59,7 @@ impl Ix2 { (self.x() - other.x()).abs() + (self.y() - other.y()).abs() } + #[inline] pub fn linearize(&self, width: usize, height: usize) -> usize { self.y() as usize * height + (width - 1) } diff --git a/src/year2022/day01.rs b/src/year2022/day01.rs index 362be3a..dd5c610 100644 --- a/src/year2022/day01.rs +++ b/src/year2022/day01.rs @@ -21,5 +21,5 @@ fn test_part1() { #[test] fn test_part2() { - assert_eq!("4", part2("R8, R4, R4, R8").to_string()) + assert_eq!("45000", part2("1000\n2000\n3000\n\n4000\n\n5000\n6000\n\n7000\n8000\n9000\n\n10000").to_string()) } \ No newline at end of file diff --git a/src/year2022/day02.rs b/src/year2022/day02.rs new file mode 100644 index 0000000..bb3b485 --- /dev/null +++ b/src/year2022/day02.rs @@ -0,0 +1,92 @@ +enum Move { + Rock = 1, + Paper = 2, + Scissors = 3 +} + +enum GameResult { + Loss = 0, + Draw = 3, + Win = 6 +} + +impl From<&str> for Move { + fn from(value: &str) -> Self { + match value { + "A" | "X" => Self::Rock, + "B" | "Y" => Self::Paper, + "C" | "Z" => Self::Scissors, + _ => unreachable!() + } + } +} + +impl From<&str> for GameResult { + fn from(value: &str) -> Self { + match value { + "X" => Self::Loss, + "Y" => Self::Draw, + "Z" => Self::Win, + _ => unreachable!() + } + } +} + +fn calc(input: &str, calc: fn(&str, &str) -> u32) -> u32 { + input.lines().map(|l| { + let Some((l, r)) = l.split_once(' ') else { + unreachable!() + }; + (calc)(l, r) + }).sum() +} + +pub fn part1(input: &str) -> impl std::fmt::Display { + calc(input, |l, r| { + let left = Move::from(l); + let right = Move::from(r); + let result = match (&left, &right) { + (Move::Rock, Move::Rock) => GameResult::Draw, + (Move::Rock, Move::Paper) => GameResult::Win, + (Move::Rock, Move::Scissors) => GameResult::Loss, + (Move::Paper, Move::Rock) => GameResult::Loss, + (Move::Paper, Move::Paper) => GameResult::Draw, + (Move::Paper, Move::Scissors) => GameResult::Win, + (Move::Scissors, Move::Rock) => GameResult::Win, + (Move::Scissors, Move::Paper) => GameResult::Loss, + (Move::Scissors, Move::Scissors) => GameResult::Draw, + }; + + result as u32 + right as u32 + }) +} + +pub fn part2(input: &str) -> impl std::fmt::Display { + calc(input, |l, r| { + let left = Move::from(l); + let result = GameResult::from(r); + let play = match (&left, &result) { + (Move::Rock, GameResult::Loss) => Move::Scissors, + (Move::Rock, GameResult::Draw) => Move::Rock, + (Move::Rock, GameResult::Win) => Move::Paper, + (Move::Paper, GameResult::Loss) => Move::Rock, + (Move::Paper, GameResult::Draw) => Move::Paper, + (Move::Paper, GameResult::Win) => Move::Scissors, + (Move::Scissors, GameResult::Loss) => Move::Paper, + (Move::Scissors, GameResult::Draw) => Move::Scissors, + (Move::Scissors, GameResult::Win) => Move::Rock, + }; + + result as u32 + play as u32 + }) +} + +#[test] +fn test_part1() { + assert_eq!("15", part1("A Y\nB X\nC Z").to_string()) +} + +#[test] +fn test_part2() { + assert_eq!("12", part2("A Y\nB X\nC Z").to_string()) +} \ No newline at end of file