From 5b3802026514313a04df358e9b09caf9de221acd Mon Sep 17 00:00:00 2001 From: Maciej Jur Date: Fri, 2 Dec 2022 10:26:12 +0100 Subject: [PATCH] 2022 rust day 2 --- 2022/rust/inputs/day02.txt | 2500 ++++++++++++++++++++++++++++++ 2022/rust/inputs/scratch.txt | 17 +- 2022/rust/src/main.rs | 2 +- 2022/rust/src/solutions/day01.rs | 2 + 2022/rust/src/solutions/day02.rs | 122 ++ 2022/rust/src/solutions/mod.rs | 1 + 2022/rust/src/utils.rs | 2 +- 7 files changed, 2630 insertions(+), 16 deletions(-) create mode 100644 2022/rust/inputs/day02.txt create mode 100644 2022/rust/src/solutions/day02.rs diff --git a/2022/rust/inputs/day02.txt b/2022/rust/inputs/day02.txt new file mode 100644 index 0000000..a6dd261 --- /dev/null +++ b/2022/rust/inputs/day02.txt @@ -0,0 +1,2500 @@ +B Y +A Y +B Z +A Z +A Y +B Z +C X +C X +C X +C Y +C Z +B Y +C Y +C Z +A Y +B Y +C Y +B Y +B Y +B Y +C X +B Z +A X +A Z +C Z +C Y +C Y +B Y +B X +C Z +B Y +B Y +C Y +B Y +B Z +B Z +B Y +A Y +A Y +B Z +B Y +B Y +B Y +C Y +A Y +B Y +C Z +B Y +B Y +A Z +B Y +A Y +B Y +B Z +C Y +C Z +A Z +C Z +B Y +A X +C Z +A X +A Z +B Y +B Y +A Y +C Z +B Y +B Z +B Z +B X +C Y +B Y +A Y +A Y +B Y +A Z +B X +B Y +B Y +C Y +C Z +A Z +B Y +A Y +B Z +B Y +B Y +B Y +C X +C Y +B Y +B Y +B Z +B Y +C X +B Y +B Y +C Z +C Z +A X +A X +A X +A X +B Y +C Z +B Z +B Y +C Z +B Y +B Z +B Y +C X +B Y +C X +C Z +B Z +C Z +C Y +B Y +B Y +A Z +C Z +C Y +C Y +B Y +B X +C Y +B Z +C Z +C Z +A Z +B Y +B Y +B Z +B Y +B Y +C X +A Z +A Y +B Y +C Y +B X +C Y +C X +C Y +A Y +B Y +A Y +A Z +C Z +C Z +A Z +C Y +B Y +C Z +C Y +B Y +B Y +C X +B Y +B Y +C Y +C X +B X +C Y +A Z +B Y +A Z +C Y +C Z +B Y +A Z +C X +C X +B Y +B Y +C Z +B Y +A Y +B Y +A Z +A X +A Y +B Y +B Y +A Y +C Z +B Z +B Y +B Y +B Y +B Y +C X +C Z +C Y +B Y +A Y +A Z +C Y +B Y +B Y +B Z +B Z +B Z +A Y +B Z +B Y +C Y +B Y +C X +C Y +C Y +B Y +A Y +A Z +B Y +B Y +A Y +C X +C X +B Y +A Z +A X +C Y +C Y +C Y +C X +C Y +B Y +B Z +B Y +B X +A Z +B Y +B Z +A X +B Y +C Z +B Y +B Z +B Y +B Y +B Y +B X +C Z +C Z +A Y +B Y +C Y +A Y +C X +C Z +A Z +C Y +B Y +B Y +C Z +A Z +C Y +C X +C Z +B X +B Y +C Y +B Y +C X +B Y +A X +B Y +B Y +A Z +B Y +B Y +C X +B Y +A X +A Y +B Y +A Y +C Y +C X +C X +B Z +B Y +C Y +C Y +C Y +B Y +A Y +C Y +B Y +B Y +B Y +B Y +A Z +B Y +B Y +A Z +B Y +C Z +C Y +B Y +B Z +A Y +B Y +A Z +C Z +B Y +C Z +B Z +B Z +A X +A Z +C Z +B Y +A Y +C Z +C Y +B Y +B X +B Y +C Y +C Y +C Y +C X +C Y +B Y +B Y +C Y +B Y +C Z +C Z +B Y +A Y +C Y +B Z +C X +C Y +B Y +B Y +B Y +C Z +B Z +B Y +A Y +B Y +A Z +B Y +B Z +B Y +B Z +B Y +B Z +C Z +C Z +A X +A Y +B Y +C Z +C Y +B Z +A Y +A X +B Y +B Y +B Y +B Z +B Y +B Y +C Y +B Y +B Y +C Y +B Y +A Z +C Z +C Z +C Z +A Z +B Y +B Z +B Y +A Z +B Y +B Y +B Y +B Y +B Y +A X +C Y +B Y +C Z +B Y +B Y +B Y +C Y +A Z +B Y +B Z +B Y +B Y +B Y +B Y +B Y +C Y +B Z +A Z +C Y +C X +C X +B Y +C Z +B Z +B Z +B Y +B Y +B Y +A Z +B Z +A Z +B Z +A Z +B Y +B X +B Y +C Z +C Y +B Y +A Z +A Z +B Y +B Y +B Y +B Y +A Z +B Z +B Y +B Y +B Z +B Y +C Z +B Y +C Y +B Y +C Y +B Y +A Z +B Y +A Z +C Z +C Y +A Z +A Y +A Y +A X +A Y +B Y +B Z +A X +C X +C Z +B Y +A Z +A X +B Y +B Y +B Y +B Z +C Y +C X +B Z +B Y +B Y +B Y +B Y +B Y +B Y +A Z +C Y +B Z +B Y +B Y +B Y +A X +B Z +A Y +C Z +B Z +B Y +B Y +C Y +A Y +C Y +B Y +B Y +A X +C X +B Z +C Y +B Y +B Z +C Y +B Y +B Z +B X +B Y +A Z +B Y +B Z +B Y +B Y +A Z +A X +A Z +B Z +A X +C Y +B Z +B Y +B X +A X +C Y +C X +A Y +B Z +B Y +A X +A Z +C X +C Z +B Z +C X +C X +B Y +A Y +B Y +B Y +C Z +A X +C X +B Y +B Y +B Y +B Y +C X +B Z +B Y +B Y +C X +B X +B Y +C X +A Z +A Y +B Y +B Y +B Y +C Z +B Y +C X +C X +B Z +B Z +B Z +B X +B Y +C Y +B Z +B Y +B Y +B Y +B Z +B Y +C Y +B Y +B Y +B Y +B Y +B Z +C Z +A Y +C Y +B Y +B Y +A Z +C Z +B Y +B Y +A Y +B Y +C Z +C Z +B Y +A Y +A Y +C Y +B Z +B Z +C X +B Y +C X +B Z +C Z +A Z +A Y +B Z +C X +B Y +A X +A Z +A Y +B Y +B X +B Z +A Z +B Z +A X +A X +A Y +B Y +C Y +B Y +B Y +C Z +B Y +A X +B Y +C Y +B Z +C X +B Y +B Y +B Z +A Z +B Y +C Z +B Y +C Y +B Y +A Y +B Y +B Y +A Z +A Y +C Y +B Y +B Z +C Y +B Y +B Y +C Z +B Y +C Z +A X +A Z +B Y +B Y +C Z +B Y +B Y +C Y +A X +C Z +B Y +A Y +B Y +A X +A Z +B Z +B Z +B Y +B Y +C Y +A Y +C X +B Y +A Z +C Y +C X +A Y +A Z +C X +C Z +A Y +B Y +B Y +C X +B Y +A Y +B Z +A X +C Z +A X +B Z +A Z +A Z +B Z +B Y +B Y +B Y +B Y +C Y +B Y +A X +A Y +A Y +B Y +B Y +C Z +A Y +B Z +B Y +C Y +A X +B Y +A X +A X +A Z +C Y +A Z +C Z +B Y +B Y +B Y +A X +B Z +C Z +A X +B Y +B Y +B Y +B Y +B Y +B Y +C Y +B Y +B Y +C Y +C Y +C Z +A Y +C Y +B Z +B Y +C Y +B Y +C Y +A Y +B Y +B Y +B Y +B Z +B Z +B Y +B Y +B Y +B Y +B Y +B Y +C X +A Z +A X +B Y +B Z +A Z +A Z +B Y +B Y +A Z +A Y +A Z +A Z +A Y +B Y +B Y +B Y +B Y +C X +B Y +B Y +B Y +B Y +B Z +B Z +B Y +C Z +A Z +A Y +B Y +B X +C Y +C Y +A Z +A X +B Y +A X +B Y +C Z +B Y +C X +B Y +B Y +B Y +C X +C Y +B Y +B Y +B Y +A Y +B Y +C X +B Z +B Y +B Y +C Z +B Y +B Y +A Z +B Z +B Y +B Z +B X +A Y +B Y +B Y +B Y +B Y +C X +C Y +B Y +A Z +A Y +B Y +B Y +B Y +B Y +B Y +B Z +C Z +A X +B Y +A Y +B Y +B Y +B Y +B Y +B Y +A Y +B Z +B Y +B Y +C Y +A X +A X +B X +C Y +B Y +A Y +B Y +B Z +B Y +C Y +B Z +B Z +A Y +A Y +C Z +B Y +C Z +C X +A Y +B Y +A Y +A X +B Y +C Y +A Z +B Y +B Y +B Y +A Z +B Y +A X +C X +A X +B Z +C Y +A X +C Y +A Z +C Y +B Y +B Y +B Y +B Y +C Y +C Z +A Z +B Z +B Z +C Z +B Y +A Y +B Z +B Z +A Y +B Z +C Z +C Y +C X +C Z +C X +B Y +A X +B Z +B Y +A X +B Y +B Y +B Z +C Y +C Z +C Y +B Y +B Y +B Z +A X +B Y +A X +B Z +A Z +A Z +B Y +C Y +C Y +C Y +B Y +A Z +B Z +B Z +C Y +A Y +A Y +A Z +B Y +A X +B Z +C X +B Z +B Y +A Y +A Y +C Y +A Z +B X +A X +C Y +B Y +B Y +C Y +B Z +C X +C Y +B Y +C Y +B Y +B Y +C Y +B X +A Z +B Z +B Y +A Z +B Z +B Y +A Z +C Y +C Y +B Y +C Y +B Y +B Y +B Y +B Y +B Z +B Y +C Y +C Z +B Y +B Y +A Z +B Y +B Z +A Y +A Y +C Y +A Z +C Y +B Z +B Y +C Y +B Z +C Y +A Z +B Y +B Y +B Y +B Y +C Z +A Y +A X +C X +A Y +C Y +C X +B Y +C Y +A Y +B Y +C Y +B Y +A X +B Y +B Y +B Z +C Y +C Y +A X +B Z +A Z +B Y +B Y +B Y +B X +B Y +B Y +C Y +B Y +C X +A Y +B Y +B Y +A Z +C X +A X +A X +C X +B Y +C Z +B Y +A Z +C Y +B Y +B Y +C X +B Z +C Y +A X +A Y +C Y +A Z +B Y +B Z +C Y +A Z +A Y +A Y +B Y +A X +B Z +B X +B Z +B Y +B Y +A Y +C Y +B Y +B Z +B Y +A Y +C Y +C Y +A X +B Y +A X +C X +A Z +A Y +B Z +B Y +B Y +B Y +C Y +A X +B Z +A X +C Y +C Z +A X +B Z +C X +B Y +B Y +A Y +B Z +B X +B Y +B Y +A Z +C Y +B Y +B Y +C Y +B Y +A X +B Y +B Y +B Z +B Y +A Y +A Z +B Y +B Y +A Y +A Z +A Z +A Y +B Y +A Y +B Z +B Y +B Y +A Z +B Y +B Y +B X +A X +B Y +B Y +C Z +C X +A Y +B Z +B Y +C Y +B Y +B Y +B Y +A X +A Y +B Y +C Z +B Y +B Y +B Y +C Z +B Y +B Z +B Y +B Y +B Y +C Y +B Y +B Y +C Y +C Y +A X +C Y +A Y +B Y +B Y +B Y +B Y +A Y +A Y +C X +B Y +C Z +A X +B X +C Z +C Y +B Y +B Y +B X +B Z +C Y +B Z +B Y +B Y +B Y +B Y +C Z +C Y +C Y +A Y +B Y +B Z +B Y +C Z +B Y +B Y +C Y +B Y +B Z +B Z +B Y +C Z +B Y +B Y +B Y +B Y +B Y +A Y +C X +A Z +A Y +B Y +C X +B Z +B Y +C Y +B Y +A Y +B Y +B Y +B Y +A Z +A Z +B Y +B Y +B Z +A Z +C Y +C Y +C Y +C Z +B Y +C Y +C X +A Z +B Z +B X +B X +C Y +B Y +A Z +B Z +B Y +B Y +B Z +B Y +B Y +B X +B Y +B Y +A Z +A Z +A Y +B Z +B Y +A Y +B Y +A Z +B Y +B Y +A X +B Z +C Y +A Z +C Y +C Y +B Y +C X +C Y +A X +A Z +C Z +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B Y +C X +C Y +C Y +C Y +B Y +B Y +C Y +C Y +A X +B X +C X +C Z +B Y +A Y +A Z +B Y +C Y +C Z +B Y +A Y +C Y +B Y +A Y +B Y +A Y +C Z +C Y +A Y +A Z +B Y +C Y +B Y +B Y +B Y +B Y +B Z +C Z +B Y +B Y +C Z +A Y +B Y +C Y +B Y +A X +B Y +B Y +A Y +B Y +B Y +A X +B Y +B Z +B Y +B Y +B Y +C Z +C Y +A Z +B Y +C Y +C Z +B Y +A Y +B Y +B Y +B Y +C X +B Z +C Y +C X +A X +C Y +B Y +B Y +B Y +B Y +B Y +B Z +C Y +B Y +C X +B Y +B Y +B Y +B Z +A Y +A Y +A Z +B Y +C Y +A Y +A X +B Z +C Y +B Y +B Y +B Y +B Y +B Z +A Y +B Y +C Y +C Z +B X +B Z +B Y +B Y +C Y +B X +A Y +C Y +B Y +C Y +C X +A Y +B Y +B Z +C Z +B Y +B Y +C Z +A Z +A Y +B Y +B Y +B Y +C Y +B Y +B Y +B Z +B Z +C Y +B Y +A Z +C Y +C Y +B Y +A Z +B Y +B Y +B Y +A Y +A X +C Y +C Z +C Y +B Z +B Y +B Y +B Y +C Y +B Y +B Y +B Y +B Z +B Y +B Y +C X +C Y +A Z +C X +B Y +B Y +B Z +B Y +A X +A X +C X +B Y +B Y +B Y +A Z +B Z +B Z +B Y +C Y +B Y +B Y +C Y +A Z +C Y +B Y +B Z +A Z +A Y +B Z +A Z +B Y +B Y +A Z +B Y +C Z +B Y +B Y +B Z +B Y +B Y +B Y +B Y +B Y +B Y +A Z +B Y +B Y +C Y +B Y +A Y +B Y +C Y +B Y +B Y +B Y +C Z +C Y +C X +B Y +A X +C Y +B Z +C Y +B Y +C X +A Y +B Y +A Z +A X +B Z +C Y +C Y +A Z +C Z +B Z +B Y +B Y +B Y +B Y +A Y +A Z +B Y +B Y +A Y +C X +B Y +B Y +C Y +C X +B X +C Y +B Y +A Y +B Y +B Y +B Y +C Y +B Y +B Y +A Z +B Y +A Z +B Y +B Y +B Z +B Y +C Y +B Y +A Y +B Y +A Y +B Y +B Z +B Y +B Y +C X +B Y +B Y +C X +C Z +C Z +B Y +B Z +B Y +A Y +B Y +A Y +B Y +C Y +A Y +B Y +C Y +B Y +B Y +B Y +A Y +C Y +C Z +C X +C Y +C X +C Y +B Y +C Z +C Z +B Y +A Z +B Z +B X +C Y +A Y +C Y +C Y +B Y +B Y +B Y +B Y +C X +B Y +C Y +C X +C Y +C X +B Y +A Y +A Y +B Y +C X +C X +C X +C X +C X +B Y +B Y +B Y +C Y +C Z +C Y +B Y +A Y +C Z +B Y +B Y +A Y +B Y +C Y +A Z +B Y +A Z +C X +C Y +C Y +A X +C Y +C Z +B Y +B Y +C Y +B Z +B Z +B Y +A Z +A X +B Y +B Y +A Z +C Y +C Z +A Z +C Z +B Y +C Y +B Z +C Z +C Y +A X +A Y +B Z +C Z +B Y +B Y +C Z +C X +B Y +B Y +B Z +B Y +A Y +A Z +B Y +A Y +B Y +B Y +A Z +C X +C Y +B Y +B Y +A X +B Y +B Z +C Y +A Y +C Y +B Y +C Y +B Y +B Y +B Y +C X +B X +B Y +B Y +B Y +B Z +B Z +B Y +B X +B Y +B X +B Z +A X +C X +B Y +B Y +A Z +C X +A Y +B Y +B Z +C Z +B Y +B Z +A Y +A Z +B Y +C Z +B Y +A Z +B Y +A Z +A Y +C Y +B Y +B Y +A X +C Y +B Y +A X +B Y +C Z +A Z +B Y +B X +A Y +C Y +B Z +C Y +B Y +B Z +A Y +A Z +B Y +B Y +A Z +A X +C Y +B Z +B Z +B Y +C Z +C Y +C Z +B Y +B Y +B Z +B Y +B Y +A X +B Y +B Y +C X +C Z +B Y +B Y +A X +B Y +B Z +C Z +B Z +A Y +B Y +B Z +B Y +C Y +C Y +B Y +B Y +B Z +A X +B Z +B Y +C Y +A X +B Y +A Y +B Z +A Y +B Y +B Y +B Z +C Y +C Y +B Z +C Y +B Y +C Y +B Y +A Z +A Z +C Z +B Y +B Y +A Z +B Z +B Z +C Y +B Y +B Y +B Z +C Y +A Z +C Y +C Z +C Z +A Y +B Y +C Y +B Z +B Y +C Z +B Y +B Y +A X +B Y +B Y +B Y +B Y +A Z +C Y +A Y +B Y +B Y +C Z +B Y +B Y +B Y +B Z +B Y +B X +C Y +B Y +B Y +A X +C X +A X +B Z +A Z +B Y +B Y +C X +B Z +B Y +B Z +B Y +C Z +A X +B Z +B Y +B Y +B Z +B Y +B Y +A Y +B Y +A X +B Z +C X +B Y +B Y +B Y +B Y +B Y +B Z +B Y +B Y +C Z +B Y +A Y +A X +C Y +B Z +B Z +B Y +B Y +A Y +B Z +B Y +B Y +B Y +B Y +B Z +B X +B Y +B Y +C Y +B Y +B Y +B Y +B Z +B Z +B Y +B Y +B Y +C X +C Z +C Z +A Z +A Y +C Y +B Y +C Z +C Y +C X +B Y +B Y +A X +A Y +C X +B Y +B Y +C Y +B Y +B Y +B Y +C Z +B Y +C Z +C Y +B Z +B Y +B Y +A X +C Z +C Y +B Y +B Y +C Y +C Y +B Z +B Y +B Z +B Y +C Y +B Y +C Y +B Y +C Y +C X +B Y +C Y +B Y +A Z +B Y +A Y +C Y +C Y +B Y +B Y +C X +A Z +A X +B Z +B Y +B Z +A Z +C Y +A Y +A X +C Y +A Y +A Y +C Z +B Y +B Y +B Y +C X +B Y +A X +B Y +B Y +B Y +A Z +A X +B Y +C Y +B Y +A X +B Z +A Y +A X +A Z +C Z +B Z +C X +B Y +A X +B Z +A Z +B Y +A Z +B Y +A Z +C Z +A Y +B Y +B Y +A X +B Y +A X +B Y +A Z +C Z +B Y +B Y +B Y +B Y +B Y +B Y +B Y +A Y +C X +C Y +C Z +B Y +B Y +A X +C Z +A Y +B Y +B Y +C Z +B Z +B Y +B Z +B Y +B Y +B Y +C Y +A Y +C Z +B Y +A X +B Y +C Y +B Y +A X +A X +B Y +C Y +B Y +B Y +A Y +C X +C Y +C X +A Y +B Y +B Y +A Y +B Y +C Y +C Z +B Z +B Y +B Y +C Y +B Z +B Y +B Y +B Y +C Y +B Y +C Y +B Y +C Z +B Y +B Z +B Y +B Y +A Z +B Y +B Z +B Y +B Z +A Y +B Y +B Y +B Y +A Y +C X +B Y +C Y +B Y +B Y +B Y +C Y +B Y +B Y +C Z +B Y +A Z +C Y +C Z +B Y +B Y +C Y +B Z +B Y +A Y +A Y +B Y +B Y +B Y +B X +B Z +A X +C Z +B Z +A Z +B Y +B Y +A X +A Y +C Y +B Y +B Z +B Y +B Y +B Y +B Z +A Y +B Y +B Y +B Y +C Z +C Z +B Y +B Z +B Y +B Y +B Y +C Y +A Z +B Y +B Y +B Z +B Y +B Y +B Y +A X +B Y +B Y +B Y +C Y +B Y +B Y +C Z +B Z +C Y +B Y +B Z +C Y +B Y +B Z +B Y +B Y +A Z +C Z +C Y +B Y +C X +B Y +B Y +B Z +B Y +B Y +A Y +B Z +C Y +C Y +A Y +B Z +C X +C Y +C X +A Z +A X +B Y +C X +B Y +B Y +B Z +A Z +B Z +B X +B Y +B Z +B Y +B X +A Y +B Y +C X +A Z +A X +B Y +B Y +B Y +B Z +B Y +A X +C Z +B Z +B Z +B Z +A Y +B Y +B Y +C X +B Y +A Y +A Z +B Z +B Z +B Y +B Y +C Y +C Y +C X +B Y +C Z +B Z +B Y +B Y +B Y +B Z +C X +C X +B Y +B Y +B Z +B Y +A Y +B Y +B Y +A X +B Y +B Y +B Z +A Y +B Y +A X +B X +A Y +C Y +B Y +B X +A X +B Y +B Z +A Y +B Z +B Y +B Y +C Y +B Y +B Y +B Y +B Y +B Y +A Y +B Y +A Y +B Y +A Y +B Y +B Y +B Y +A X +A Y +A Y +A X +B Z +A X +C Y +C Y +B Y +A X +B Y +A Y +B Y +B Y +B Y +C X +C Y +B Y +C X +C Y +B Y +B Y +C Y +B Y +B Y +B Y +B Z +A Z +B Y +B Z +B Z +A X +C Z +B Y +C Z +B Y +C Z +B Y +A X +C Y +C Z +A Z +A Y +B Y +A Y +B Y +B Y +B Y +B Y +B Y +A Y +C Y +C Y +B Z +B Y +B Y +B Z +A Z +A X +C Z +B Y +B Y +A X +C Y +A Y +B Y +A Y +B Y +B Z +C Y +C Z +B Y +A Y +B Y +C Z +C Z +A X +A X +C Z +A X +A Z +B Y +B Y +C Z +C Y +C Z +A X +A X +B Z +B Y +B Y +A X +B Y +B Z +C Y +C X +B Y +C Z +B Y +C Z +B Y +B Z +B Y +C Y +A Z +B Y +B Y +A X +A Z +A X +C Y +B Y +B Y +C Z +B Z +C X +B Y +C Y +C Y +A Z +C Z +B Z +B Y +B Z +B Y +A Z +A Y +A Y +A X +B Z +C Z +C X +B Y +A X +C X +A Y +B Y +B Y +B Y +A Z +B Y +C X +B Y +A Z +B Z +B Z +C Y +B Y +C X +C X +C Y +C Y +C Z +C X +B Y +C Y +C Y +B Z +B Y +A Y +B Z +A X +B Y +A Z +C Y +B Y +C Z +B Y +A X +C Z +B Z +B Y +B Y +B Y +B Y +B Y +C Z +A Z +C Y +A Z +B Y +C X +C X +A X +A Y +B Z +C Y +C X +C X +C Y +C X +B Y +C X +A Y +C Z +B Y +B Z +B Y +A X +B Y +A Z +A Y +C X +A X +B X +C X +C Z +C X +A Y +A Z +B Y +A Y diff --git a/2022/rust/inputs/scratch.txt b/2022/rust/inputs/scratch.txt index 2094f91..db60e36 100644 --- a/2022/rust/inputs/scratch.txt +++ b/2022/rust/inputs/scratch.txt @@ -1,14 +1,3 @@ -1000 -2000 -3000 - -4000 - -5000 -6000 - -7000 -8000 -9000 - -10000 +A Y +B X +C Z diff --git a/2022/rust/src/main.rs b/2022/rust/src/main.rs index 205b69c..6a78bb8 100644 --- a/2022/rust/src/main.rs +++ b/2022/rust/src/main.rs @@ -3,5 +3,5 @@ mod solutions; fn main() { - solutions::day01::run(); + solutions::day02::run(); } diff --git a/2022/rust/src/solutions/day01.rs b/2022/rust/src/solutions/day01.rs index 9178f66..2b916ca 100644 --- a/2022/rust/src/solutions/day01.rs +++ b/2022/rust/src/solutions/day01.rs @@ -1,5 +1,7 @@ +#![allow(dead_code)] use crate::utils; + pub fn run() -> () { let data = parse_data(utils::read_lines(utils::Source::Day(1))); diff --git a/2022/rust/src/solutions/day02.rs b/2022/rust/src/solutions/day02.rs new file mode 100644 index 0000000..ef6547d --- /dev/null +++ b/2022/rust/src/solutions/day02.rs @@ -0,0 +1,122 @@ +use crate::utils; + + +pub fn run() -> () { + let data = parse_data(utils::read_lines(utils::Source::Day(2))); + + println!("Day 2"); + println!("Part 1: {}", solve1(&data)); + println!("Part 2: {}", solve2(&data)); +} + + +#[repr(u8)] +#[derive(Clone, Copy)] +enum Shape { + Rock = 0, + Paper = 1, + Scissors = 2, +} + +impl Shape { + fn from(char: &char) -> Shape { + match char { + &'A' => Shape::Rock, + &'B' => Shape::Paper, + &'C' => Shape::Scissors, + &'X' => Shape::Rock, + &'Y' => Shape::Paper, + &'Z' => Shape::Scissors, + &_ => panic!(), + } + } + + fn from_num(num: u8) -> Shape { + match num { + 0 => Shape::Rock, + 1 => Shape::Paper, + 2 => Shape::Scissors, + _ => panic!() + } + } + + fn check_against(&self, other: &Shape) -> MatchResult { + let (this, that) = (*self as u8, *other as u8); + if this == that { + MatchResult::Tie + } + else if (this + 1) % 3 == that { + MatchResult::Loss + } + else { + MatchResult::Win + } + } + + fn to_points(&self) -> i32 { + match self { + Shape::Rock => 1, + Shape::Paper => 2, + Shape::Scissors => 3, + } + } + + fn find_from(other: &Shape, result: &MatchResult) -> Shape { + match result { + MatchResult::Win => Shape::from_num((*other as u8 + 1) % 3), + MatchResult::Tie => *other, + MatchResult::Loss => Shape::from_num((*other as u8 + 2) % 3), + } + } +} + +enum MatchResult { + Win, Tie, Loss +} + +impl MatchResult { + fn to_points(&self) -> i32 { + match self { + MatchResult::Win => 6, + MatchResult::Tie => 3, + MatchResult::Loss => 0, + } + } + + fn from(char: &char) -> MatchResult { + match char { + &'X' => MatchResult::Loss, + &'Y' => MatchResult::Tie, + &'Z' => MatchResult::Win, + &_ => panic!(), + } + } +} + + +fn solve1(data: &Vec<(char, char)>) -> i32 { + data.iter() + .fold(0, |acc, (other, my)| { + let my = Shape::from(my); + let result = my.check_against(&Shape::from(other)); + acc + my.to_points() + result.to_points() + }) +} + +fn solve2(data: &Vec<(char, char)>) -> impl std::fmt::Display { + data.iter() + .fold(0, |acc, (other, result)| { + let result = MatchResult::from(result); + let my = Shape::find_from(&Shape::from(other), &result); + acc + my.to_points() + result.to_points() + }) +} + +fn parse_data(data: Vec) -> Vec<(char, char)> { + data.into_iter() + .map(|line| { + let mut chars = line.chars(); + (chars.next().unwrap(), chars.last().unwrap()) + }) + .collect() +} diff --git a/2022/rust/src/solutions/mod.rs b/2022/rust/src/solutions/mod.rs index 12b8f18..28326d5 100644 --- a/2022/rust/src/solutions/mod.rs +++ b/2022/rust/src/solutions/mod.rs @@ -1 +1,2 @@ pub mod day01; +pub mod day02; diff --git a/2022/rust/src/utils.rs b/2022/rust/src/utils.rs index d1151c9..4f9aa8a 100644 --- a/2022/rust/src/utils.rs +++ b/2022/rust/src/utils.rs @@ -2,7 +2,7 @@ use std::fs::File; use std::io::{BufRead, BufReader}; use std::path::Path; - +#[allow(dead_code)] pub enum Source { Scratch, Day(i32) }