summaryrefslogtreecommitdiff
path: root/aoc22/day2
diff options
context:
space:
mode:
authormathiasmagnusson <mathiasmagnussons@gmail.com>2022-12-09 18:00:02 +0100
committermathiasmagnusson <mathiasmagnussons@gmail.com>2022-12-09 18:00:02 +0100
commite41e6c8bc72e3300a0fa137f198454341bc315b1 (patch)
treea26e34327b7e68adf9b1dc802a897b9b0626de86 /aoc22/day2
parent444d543b1af11ff8718cf07c690944ddacb29105 (diff)
downloadprogramming-problem-solving-e41e6c8bc72e3300a0fa137f198454341bc315b1.tar.gz
Add aoc
Diffstat (limited to 'aoc22/day2')
-rw-r--r--aoc22/day2/Cargo.toml7
-rw-r--r--aoc22/day2/input2500
-rw-r--r--aoc22/day2/src/main.rs64
3 files changed, 2571 insertions, 0 deletions
diff --git a/aoc22/day2/Cargo.toml b/aoc22/day2/Cargo.toml
new file mode 100644
index 0000000..f274206
--- /dev/null
+++ b/aoc22/day2/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "day2"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+lib = { path = "../lib" }
diff --git a/aoc22/day2/input b/aoc22/day2/input
new file mode 100644
index 0000000..cb4efdf
--- /dev/null
+++ b/aoc22/day2/input
@@ -0,0 +1,2500 @@
+B Z
+A X
+B Z
+B Z
+C Z
+B Z
+A Z
+B X
+C Y
+C Y
+A X
+A X
+A Z
+B Z
+A X
+A Z
+B X
+C Y
+A Y
+A Y
+C Y
+B Y
+C X
+C Y
+B Z
+A X
+A Y
+B Y
+A X
+A Z
+B X
+B Y
+B Z
+B Z
+B Z
+C Y
+B X
+A X
+C Y
+B Z
+B Z
+C X
+A Z
+B Z
+B Z
+C X
+C X
+B X
+B X
+A X
+B X
+C Z
+C Y
+C Y
+C Y
+C X
+B Z
+B Y
+C X
+A X
+C X
+C Y
+C Y
+C Y
+B X
+B Y
+A Z
+B Z
+A X
+B Z
+C Y
+B Y
+B Z
+B X
+C Y
+B Y
+A Y
+A X
+B Z
+B Z
+B Z
+B Z
+C X
+A X
+B Y
+C Y
+C Y
+B Z
+B Z
+A Z
+B Y
+A X
+A Z
+B Z
+A X
+B X
+B X
+B X
+B X
+A X
+A Z
+B X
+B Z
+B X
+B Z
+B X
+C Y
+C Y
+C X
+B X
+A Z
+C Y
+B Z
+C Z
+B X
+B Z
+B Z
+C Z
+C Y
+B X
+B X
+C Y
+A Y
+A X
+C Z
+B X
+B X
+C X
+C X
+C Y
+C X
+C Y
+C Y
+C Y
+B Z
+B Z
+A X
+C Y
+C Y
+A Y
+C Y
+A Z
+B Z
+A Y
+C Y
+C Y
+A X
+B X
+B Z
+C Y
+C Y
+B Z
+B X
+C Y
+B Y
+A Z
+A Z
+C Y
+B X
+C Y
+B Z
+C Y
+B Z
+B Z
+B X
+C Y
+C X
+B Z
+C Z
+A Y
+C Y
+C Y
+A Y
+C X
+A Y
+B Z
+B Y
+C X
+A Y
+C Y
+C X
+C Y
+C Y
+B Z
+A Y
+B Z
+A Y
+B Z
+B Z
+B Z
+C Y
+A Y
+A X
+B Z
+C Y
+C Y
+C Y
+B X
+B Z
+C Y
+C Y
+C Y
+B X
+C X
+B X
+A X
+B Z
+B X
+C Z
+A X
+A X
+A X
+C Y
+C Y
+B Z
+A Z
+C X
+B X
+C Y
+A Y
+A Z
+A Z
+A X
+A X
+C Y
+B Z
+A Z
+B Z
+B X
+C Z
+B X
+B X
+B Y
+A Z
+B Z
+C Y
+B X
+C X
+C X
+A X
+B Z
+B X
+A Y
+B Z
+A X
+B X
+B Z
+A X
+B Z
+C Y
+B Y
+C Y
+A Z
+B X
+B X
+B X
+B Z
+B Z
+B Z
+A X
+B X
+B Z
+B Z
+A X
+B X
+C Z
+B X
+A Z
+A Z
+C Z
+A Y
+C Y
+B X
+B Z
+A X
+B Z
+B X
+C Y
+C Y
+B X
+C Y
+C X
+C Y
+B Z
+A Z
+C Y
+A Z
+B X
+B Z
+B Z
+A X
+A Y
+A X
+B Z
+B Z
+B Y
+A Z
+C Y
+B Z
+B X
+B Z
+A Y
+C X
+B Z
+C Y
+A Y
+A X
+A Z
+C Y
+C Z
+A Y
+B X
+A X
+B X
+C Y
+C Z
+B Y
+B Z
+B Z
+C Y
+B Z
+C Z
+B Y
+A Z
+A Z
+B Z
+B X
+B X
+A Z
+C Y
+B X
+B Z
+A Y
+C Y
+B Z
+C Y
+B X
+C Y
+C Y
+C Y
+A Y
+C Y
+C X
+A X
+C Y
+C Y
+A X
+C Y
+C Z
+B X
+B X
+C Y
+A X
+A Y
+C Y
+A X
+C X
+A Y
+A Z
+A X
+B Z
+B Z
+C X
+C Y
+B X
+A X
+A Z
+B X
+B Z
+A X
+B Z
+B Z
+B Z
+B X
+B Z
+B Z
+A Y
+C X
+A X
+B X
+B Z
+C Y
+C Y
+C Y
+C Y
+B Z
+C Y
+B Y
+C Y
+A Z
+C Y
+B Z
+B X
+B Z
+B Z
+B X
+C Y
+A Z
+B X
+B Z
+B Z
+B X
+C Y
+B X
+C X
+C X
+A X
+C Y
+A X
+B Y
+C Y
+B Z
+B X
+C Y
+B Y
+B X
+B X
+B Y
+B X
+A Z
+B X
+B X
+B X
+B Z
+B Y
+A X
+B X
+C Y
+C Y
+B Y
+B X
+A Y
+C Z
+B X
+C Y
+B X
+C Y
+A Z
+B Y
+A Z
+B Z
+A Y
+A X
+C Y
+B X
+B X
+A X
+B Y
+A Z
+B X
+B Z
+A X
+C Z
+B Y
+A X
+A X
+A X
+A X
+B Y
+C Z
+C Y
+B Y
+C Y
+B X
+B Z
+A X
+C Y
+A Y
+A X
+C Y
+C Y
+B X
+B Y
+A X
+C Y
+A Y
+A Z
+A X
+A Y
+C Y
+A X
+C Z
+C Y
+B Z
+B Y
+C Y
+C Z
+A X
+A X
+C X
+B X
+C X
+B X
+A Z
+B Z
+C Y
+C Y
+A Z
+C Y
+A X
+C X
+B Z
+C X
+C Z
+B X
+B X
+C Y
+B X
+A Y
+B X
+B Z
+C X
+C Y
+B X
+B X
+B Z
+B X
+C Y
+B Z
+C Y
+C Y
+A Z
+C Y
+C Y
+C Y
+B X
+B X
+A X
+C Y
+B X
+B X
+C Y
+B Z
+A X
+B X
+C Y
+B Z
+B Y
+B Z
+A X
+B Y
+B Z
+C X
+C Y
+B Z
+B Z
+B Z
+B Z
+B Z
+C X
+B Z
+C Y
+C X
+B Y
+B X
+B X
+C Y
+B X
+B X
+C Y
+C Y
+A X
+C Y
+C Z
+A Z
+C Y
+C Y
+C Z
+A X
+C Y
+A Y
+B X
+C X
+C Y
+C Z
+C Y
+C Y
+B X
+A X
+B Z
+A Y
+B Z
+B Z
+B X
+B Z
+A Z
+B Y
+B Y
+C Y
+A Y
+C Y
+B X
+A X
+C Z
+B Z
+B X
+A Z
+C Y
+C Y
+C X
+A Z
+C Y
+C Y
+A Y
+B Y
+B Y
+B Z
+B Z
+B X
+B X
+B Z
+B X
+B X
+B Z
+A Y
+A Y
+C Y
+C Y
+B X
+A Y
+A X
+C Y
+A Z
+C X
+B Y
+B Y
+B Y
+A Z
+C Y
+B Z
+B Z
+A Y
+B Z
+B Z
+C Z
+C X
+C X
+B X
+C Y
+B X
+B X
+C Y
+A X
+A Z
+C X
+B X
+A X
+B Z
+A X
+B X
+A Y
+B X
+B Z
+B X
+B X
+C Z
+A Z
+B Z
+C Z
+B X
+B X
+A X
+B Z
+B Z
+B Z
+B Z
+B Z
+B Z
+B X
+C Y
+B Z
+B X
+B X
+C Y
+C Y
+B Z
+B Z
+B X
+A Y
+A X
+A Z
+C Z
+A X
+B Z
+B X
+B Z
+B X
+C Y
+A X
+A Y
+C Y
+C Y
+B X
+B X
+B X
+B Z
+B X
+B Z
+A Y
+A X
+C Y
+A Z
+C Y
+A X
+C Y
+B Z
+A Y
+C Y
+C Y
+C Y
+B Z
+B Z
+A Z
+A X
+B X
+C Y
+A X
+B Y
+C Y
+B X
+B Z
+B Z
+A Z
+B Z
+C Y
+B Z
+A X
+C X
+B Z
+B X
+A X
+C Y
+C Y
+A Z
+C Y
+C Z
+A Z
+A Z
+B X
+B X
+B Z
+C Y
+B Z
+B Z
+C Y
+B X
+B Y
+B Z
+C Y
+A X
+C Y
+A Y
+C Y
+C Y
+C Y
+B X
+B X
+B Z
+B Y
+C Y
+B Y
+A Z
+A Z
+B X
+A Z
+C X
+C Y
+B Z
+B X
+B Z
+B X
+B Z
+B Z
+B X
+B Z
+B Z
+C X
+C Y
+A Z
+C Y
+B Y
+A X
+B Z
+B Y
+A Z
+A X
+B X
+C Y
+B Z
+C Y
+B X
+C Y
+B Z
+B Y
+B X
+A Z
+B Y
+C Y
+B X
+C Y
+A X
+B Y
+B X
+C Y
+C X
+B X
+B X
+C Y
+C Y
+B Z
+A X
+B X
+B Z
+A X
+B X
+A X
+B X
+B X
+B Y
+C Y
+A X
+C X
+C Y
+C X
+B Y
+A Z
+A X
+C Y
+B X
+B X
+B Z
+C Y
+B Z
+B X
+B Z
+B Y
+B Y
+B Z
+B X
+C Y
+B Y
+A X
+C Y
+B Z
+B Z
+C Y
+A Z
+C Y
+B Y
+C Y
+B Y
+B X
+B Z
+B X
+C Y
+B X
+C Y
+B Z
+C Y
+B Z
+B X
+B X
+B Z
+A X
+C Y
+A X
+B X
+C Y
+B X
+C Z
+C Y
+B Z
+A Y
+A Y
+C Y
+B Z
+A Z
+B Z
+C Y
+A Z
+B X
+A X
+B X
+C Y
+B Z
+A X
+B X
+A Y
+B X
+B Z
+A Z
+C Y
+A Z
+C X
+A Z
+B X
+C Y
+B Z
+B Z
+A X
+B Y
+C Z
+B Z
+A Z
+C Y
+B X
+C Y
+B X
+C Y
+B Y
+B Z
+C Y
+B Z
+C Y
+C Y
+B Y
+B Y
+C Y
+C Y
+A Y
+B Y
+B X
+C Y
+C Y
+C X
+C Y
+C Y
+B Z
+B X
+B X
+C Y
+C Y
+A X
+C Y
+C Y
+B X
+A Y
+B X
+A X
+B Y
+B X
+B Z
+B X
+C Y
+B Z
+A Z
+B Z
+C X
+B Z
+B Y
+B Z
+B Z
+C Y
+B X
+B X
+C Y
+B Z
+B Z
+B Z
+B Z
+A X
+C Y
+A Z
+A X
+C X
+B Z
+B Y
+A Y
+B X
+C Y
+B X
+C Y
+C Z
+A Z
+C Y
+C Y
+C Y
+B Z
+B Y
+A X
+C Y
+B X
+B X
+B Z
+B X
+C Y
+C Y
+A X
+B Z
+B Z
+C Y
+B Y
+B Y
+B Z
+A X
+B Z
+A X
+B Y
+C X
+A Z
+B Z
+B Z
+B X
+C Y
+B Y
+B Y
+B X
+C Y
+B X
+B Z
+C Y
+B Z
+A X
+A Z
+B Y
+C Y
+B X
+B Z
+C Y
+B X
+B X
+B Z
+B Y
+C X
+B X
+A X
+B X
+B Z
+B Z
+B Z
+A Z
+A Z
+B X
+C X
+B X
+B Y
+C Z
+C Y
+B Y
+A X
+A Z
+B Z
+B X
+B Z
+B Z
+A Y
+A Z
+C Y
+C Y
+C Y
+A Y
+B Z
+C X
+C Y
+C Y
+A Z
+B Z
+C Y
+B Z
+C Y
+A X
+C Y
+C Y
+B X
+A X
+B X
+A X
+A Z
+A X
+B Y
+B X
+A X
+B Z
+B Z
+B X
+A Z
+B X
+A X
+B Z
+B Z
+B Z
+A X
+B X
+C Y
+C Y
+B Z
+A X
+A X
+B Z
+C X
+B Z
+C Y
+C Y
+C Y
+A Y
+B X
+C Z
+C Y
+B X
+A Y
+A Z
+C X
+B Y
+B Z
+C Y
+B X
+A Z
+C Z
+C Y
+C Y
+B Z
+B X
+B Z
+A Z
+C Y
+B X
+A X
+C Y
+C Y
+B X
+B Y
+B X
+B X
+C Y
+B Y
+C Y
+B Z
+B X
+A Y
+A X
+B Z
+A Z
+B Z
+B Z
+A Y
+C Y
+A X
+B X
+B X
+A X
+C Y
+B Z
+B Y
+B Z
+B Z
+B X
+C Y
+C Y
+C Z
+B Y
+B Y
+B Z
+B X
+B Z
+C Y
+B X
+A Z
+C Y
+B Z
+B X
+C Y
+C Y
+C Y
+B Z
+C Y
+B Z
+C Y
+B Z
+B Z
+B Z
+C Y
+C Y
+B Z
+C Z
+A Y
+A Z
+A Z
+C Y
+C Y
+A Z
+B X
+B X
+A X
+B Z
+B Z
+A X
+A Z
+C Y
+B X
+A Z
+B X
+C Y
+A Z
+C Y
+B Z
+B X
+B X
+B Z
+B X
+C Y
+C Z
+C Z
+B X
+A X
+A Y
+B Y
+B X
+B X
+A Y
+A X
+B X
+C Y
+C Y
+B Z
+B Z
+A X
+C Y
+B Z
+B X
+B Z
+C Y
+B X
+C Y
+B Z
+B Y
+B Z
+B X
+B X
+C Y
+B Z
+B Z
+B Z
+A X
+B Z
+B Z
+B Z
+A Y
+A X
+C Y
+B Z
+B X
+A X
+B Z
+C Y
+B X
+B Z
+C Z
+C Y
+C Y
+B Y
+B Y
+C Y
+A Y
+B Y
+A Y
+C Y
+A Z
+B X
+B Y
+C Y
+A X
+B Z
+C Y
+A X
+B X
+C Y
+B X
+A Y
+C Z
+C X
+C Z
+B Z
+C X
+A Z
+C X
+B Z
+B Z
+B Z
+A X
+C Y
+B X
+A Y
+C Y
+B Z
+A Y
+A Z
+B X
+A Z
+C Y
+C Y
+C Y
+B Z
+B Y
+A X
+C Y
+C X
+A Y
+B Z
+A X
+A Z
+C Y
+A Z
+B Z
+B Z
+C X
+B X
+C Y
+A X
+C Y
+A Z
+B Z
+B Z
+B X
+C Y
+C Y
+C X
+C Z
+C Y
+C X
+C X
+C Y
+B X
+C X
+C Z
+C Y
+B Y
+C X
+A X
+C Y
+A X
+C Z
+C X
+C Y
+B X
+A Z
+B Z
+B X
+B Z
+B X
+C Y
+B Y
+B Z
+B X
+B Z
+C Y
+C Z
+B X
+B Y
+C Y
+C Y
+C Y
+C X
+A Y
+B X
+C X
+B X
+B Y
+B Z
+C X
+B Z
+B Z
+A X
+A X
+B Z
+B Z
+A Y
+A Z
+B Y
+A X
+B X
+B X
+C Y
+A X
+A Y
+B X
+B Z
+C Z
+B Z
+B X
+C Y
+C Y
+B Z
+A Z
+B X
+A Y
+A Y
+C Y
+B Z
+B X
+A X
+B Y
+A Y
+B Z
+B Z
+B Z
+B Y
+C Z
+A X
+C X
+B Y
+A Y
+B Z
+C Y
+A X
+B Z
+C Y
+A X
+B X
+B Z
+B X
+B Z
+B Z
+C Y
+A Z
+B X
+C Y
+B Z
+A Y
+B X
+C X
+B X
+B X
+B Z
+B X
+B Z
+B X
+B Z
+B Z
+C Y
+B Z
+C Y
+B X
+B Z
+B X
+B Z
+C Y
+B X
+C Y
+A Z
+A Z
+B Z
+B X
+B Z
+B X
+C Y
+A Y
+A X
+B Z
+B X
+B X
+A Z
+A X
+C Z
+A X
+A X
+C Z
+C Y
+B X
+B X
+B Z
+A Z
+B X
+C Y
+B X
+B Z
+C X
+C Y
+C Y
+A Z
+B X
+B X
+C Z
+C Y
+B X
+A X
+C X
+B Z
+B Z
+B X
+C Y
+B Z
+A X
+B X
+B Z
+A Z
+B X
+A Y
+B Z
+B X
+C Y
+B Y
+C Y
+A Z
+A X
+C Y
+A Z
+A X
+C Y
+C Y
+C Y
+C Y
+C Y
+B X
+C X
+B Y
+A Z
+B Z
+C Y
+A X
+B Z
+C X
+C Y
+B X
+A Y
+B X
+B Z
+C Y
+B X
+A Y
+B Z
+C Y
+B Z
+A X
+B X
+C Y
+A Y
+B Z
+B X
+A Z
+C Y
+B Y
+A Y
+A Z
+B Y
+C Y
+B Z
+B Z
+B Z
+C X
+C X
+B Y
+B Z
+A X
+C Y
+C Y
+A Y
+A X
+A X
+C Y
+A Y
+B Z
+B Z
+B Z
+B X
+A X
+B X
+C Y
+A Z
+B X
+A Y
+A X
+A X
+B Z
+B Z
+C Y
+B X
+B Z
+C Y
+B Z
+A Z
+C Y
+B X
+B Z
+C X
+C Y
+C Y
+C Z
+B Z
+B X
+A X
+B Z
+C Z
+C Y
+C Y
+C Y
+B Z
+A Y
+C Y
+B X
+C Y
+C Y
+B X
+B X
+C Y
+C Y
+B Z
+B X
+A Z
+C Z
+B Z
+A X
+B Y
+B Z
+A X
+C Y
+C Y
+B Z
+A Y
+C Y
+B Y
+B Z
+C Y
+A X
+C Y
+C X
+C Y
+C Y
+A Y
+B Z
+C Y
+C Y
+B X
+C Y
+B Z
+B Z
+C Z
+B Z
+C Y
+B Z
+B Z
+C Y
+A X
+C Y
+A Z
+B X
+C X
+B X
+C X
+A Z
+C Y
+A X
+A X
+B Z
+C Y
+B Z
+B X
+A Y
+B Z
+C X
+B Z
+A Y
+C Y
+B X
+A Z
+B Z
+B Z
+B Z
+B Z
+B Z
+C Y
+C Y
+C Y
+B X
+A Y
+A Z
+B Z
+C Y
+B Y
+C X
+B X
+B Z
+B X
+C Y
+A X
+C Z
+C Y
+A X
+B X
+C Y
+B X
+A X
+C Z
+C Y
+C Y
+C Z
+C Y
+C Y
+B X
+C Y
+A Y
+B X
+B Z
+B Z
+C Y
+A X
+B Z
+B Z
+C Y
+B X
+B Z
+B Z
+C Y
+C X
+B Z
+B Z
+A Z
+B X
+B Z
+B Z
+B X
+B X
+B X
+A X
+A Z
+B Z
+B Z
+B X
+B X
+C Y
+C Y
+B X
+A Y
+C Y
+B Z
+C Z
+B Y
+B Z
+C X
+A X
+B X
+C Y
+C Y
+A Y
+C X
+B Z
+B Z
+B Z
+B Z
+A Z
+A Y
+A X
+A Y
+B Y
+A Y
+B Z
+C Y
+C X
+C X
+B Z
+C Y
+A X
+B Y
+B X
+B X
+B X
+A Y
+B Z
+B X
+B Z
+B Z
+B Z
+A Z
+C Y
+C Y
+C Y
+B Z
+C X
+B Z
+A X
+A Y
+B Z
+C Z
+B Z
+A X
+B Z
+A X
+B Z
+A Z
+A X
+B Z
+B Z
+B Z
+B X
+A Z
+B X
+C Y
+B Y
+B X
+A X
+B Z
+A Z
+B Z
+B Z
+B Y
+C X
+B X
+B Z
+A X
+B X
+B Z
+B X
+C Y
+C Z
+A Y
+B Y
+A X
+B Z
+B Y
+A Z
+C X
+C Y
+B Z
+A X
+C Y
+A Y
+C Y
+C X
+A Y
+B X
+B X
+B Z
+C Y
+B Y
+A X
+B Z
+B X
+A X
+A X
+B X
+A X
+B Z
+B X
+B Y
+C Y
+B Z
+C Y
+C X
+B Z
+B Z
+B Z
+C Y
+A X
+B Z
+A Y
+A X
+C Y
+B Z
+C Y
+C X
+C Y
+C Y
+A X
+B Z
+A X
+A X
+B X
+B Y
+C Y
+C Y
+A X
+B Z
+C Y
+C X
+B Z
+B Z
+B Z
+B X
+A Y
+B X
+C Y
+A X
+C Y
+B Z
+C Y
+C Y
+A X
+B Y
+B Z
+B Y
+A Y
+B Z
+B Y
+B Z
+A Y
+C Y
+A Y
+A X
+A Z
+A X
+B X
+C Y
+C Y
+B X
+A Z
+B X
+B Z
+B X
+B X
+B Z
+C Y
+B Z
+B Z
+B X
+A Z
+A Y
+C Y
+B Y
+C Y
+C Y
+B Z
+C Y
+C Y
+B Y
+B Z
+B X
+C Y
+B Z
+B Z
+A Y
+A Y
+B X
+B X
+C Y
+B Z
+B Z
+B X
+B X
+C Y
+A Z
+B X
+B X
+A Z
+B X
+B Z
+B X
+B X
+A X
+C Y
+C Y
+C Y
+B X
+A Z
+C Y
+C Y
+B Z
+B X
+B Z
+B Z
+B Z
+B Y
+A X
+A Z
+C Y
+C Y
+B X
+B Y
+C X
+A Z
+C X
+C Y
+C X
+C Y
+C Y
+C X
+A X
+B Z
+B X
+B Z
+C Y
+A Y
+B X
+B Z
+C X
+B X
+B Y
+B Z
+B Z
+A Z
+C X
+B X
+B X
+B Y
+B Z
+C Y
+C Y
+C Y
+A Z
+B Z
+A Z
+B Z
+B X
+C Y
+B X
+B X
+A Y
+C Y
+A X
+B Z
+C Y
+B Z
+B Z
+B Z
+B Y
+C Y
+A Z
+B X
+C Y
+B Z
+C X
+B X
+A X
+B Z
+B X
+A Y
+B Z
+B Z
+C X
+B X
+B X
+B Z
+B Z
+B X
+C Y
+B Z
+A Y
+B X
+C X
+C Y
+B Y
+B Z
+B X
+C X
+C Y
+B X
+B Z
+B Z
+B X
+C Z
+B Z
+B X
+C X
+C X
+B Z
+B Z
+C Y
+B X
+C Y
+A Z
+A Z
+B Z
+B X
+A Z
+B X
+B Z
+B Y
+B Z
+C Y
+B Z
+A Z
+C X
+B Z
+B Z
+C Y
+A Z
+C Y
+C Y
+C Y
+A X
+A Z
+A Z
+B Z
+C X
+A X
+C Y
+B X
+B X
+C Y
+C X
+A Z
+B X
+B Z
+B X
+B Y
+C Y
+A X
+C Y
+C Y
+A X
+C Y
+B Z
+B X
+C Y
+C Y
+B X
+C Y
+C Y
+C Y
+A X
+B Z
+B X
+B Z
+B Y
+A Z
+B Z
+C Y
+B Z
+A X
+A Z
+A Y
+B Y
+B Z
+B Z
+A X
+B Y
+A Z
+B Z
+B Z
+A Y
+C Y
+B X
+B Z
+A X
+B Z
+B Z
+A X
+B Z
+B Z
+B X
+A Z
+B X
+B Z
+A Y
+A Y
+A X
+C Y
+B Z
+A X
+B Z
+C Y
+B Z
+B X
+C Y
+C Y
+C Y
+B X
+A Z
+C Y
+B Y
+B Z
+B Z
+B Z
+B X
+C Y
+C X
+A X
+B Z
+A X
+C Y
+C Y
+B X
+B X
+B Z
+C Z
+C Y
+C Y
+A Y
+C Y
+B Z
+B X
+B X
+B Z
+C Y
+B Z
+B X
+B X
+C Z
+B X
+C X
+C Y
+C Y
+C X
+C Y
+C Y
+B Z
+B X
+B X
+C Y
+C Y
+C Y
+B Y
+A X
+B Z
+B Y
+A Z
+B Z
+C X
+B Y
+B X
+B Z
+B X
+A Z
+A Z
+C Y
+C X
+C Y
+A Z
+B Y
+A Y
+C Y
+B Z
+A Z
+A Z
+C Y
+B Z
+B X
+B Z
+C Z
+C Y
+C X
+B Z
+B X
+A X
+A Y
+B Z
+B X
+A Y
+B X
+B X
+C Y
+B X
+B Z
+A Z
+C Y
+C Y
+A Y
+B Z
+C Y
+B Y
+C Y
+C Y
+C Y
+B Z
+A Y
+B Z
+A X
+B X
+B Z
+B Z
+B Z
+A X
+C X
+B X
+C X
+A Z
+C Y
+B X
+B Z
+B Y
+C Y
+C Y
+B Y
+B Y
+C Y
+C Y
+A X
+C Y
+B Y
+B X
+B X
+A Z
+B X
+C Y
+B Z
+A Z
+C Y
+C X
+A Z
+B Z
+A Z
+C Y
+B Z
+B X
+C Y
+B Z
+B Z
+B X
+C Z
+B X
+B Z
+B Y
+B Y
+B X
+B Z
+C Y
+B Z
+B Z
+B X
+B Z
+B Z
+B Z
+C X
+B X
+C Y
+B Z
+C X
+C Y
+C X
+C X
+B Y
+B Z
+A X
+C X
+B Z
+A Z
+A X
+B Z
+B Z
+B Z
+C Y
+B X
+B X
+C Y
+B X
+C Y
+B Z
+B Y
+B X
+B Y
+A X
+B Z
+A X
+C X
+C X
+B Z
+C Y
+A Y
+B X
+B X
+C Y
+C Y
+C Y
+C Y
+B Z
+B Z
+C Y
+B Z
+B X
+B X
+B Z
+B X
+B X
+B Z
+B Y
+C Z
+C X
+C Y
+B X
+B X
+A X
+B X
+C Y
+A Z
+B Z
+B X
+C Y
+B Z
+B Z
+B Z
+B Z
+B Z
+B Z
+A Y
+C Y
+C X
+C Y
+C Y
+A X
+B X
+B Z
+B Y
+B Z
+C Y
+B Y
+A Y
+A Z
+B Z
+B Y
+C Z
+B Z
+C Y
+B Z
+C Y
+B Z
+B Z
+C Y
+C Z
+A X
+C Y
+C Y
+A Z
+A X
+C Y
+B Z
+C X
+C Y
+B Z
+B Z
+B Z
+C Z
+B Y
+B Z
+B Z
+C Y
+C Y
+A Y
+B Y
+B X
+B X
+B Z
+B Y
+A Z
+A X
+A Y
+C Y
+B Z
+C Z
+A Y
+B X
+B Y
+C Y
+C X
+C Y
+B X
+B X
+C X
+C Y
+B Z
+C Y
+C Y
+C Z
+B Z
+B X
+A X
+C X
+C Y
+B Z
+B X
+B Z
+B Z
+B Z
+C Y
+A X
+C X
+B Y
+B X
+A X
+A Y
+B X
+C Y
+B X
+C Z
+C X
+B X
+A Z
+B Z
+B X
+B Z
+A Y
+C X
+A Z
+B Y
+B Z
+C X
+C Z
+B X
+B Z
+B X
+B Z
+B Z
+C X
+B X
+B X
+A Z
+C Y
+B X
+C Y
+B Z
+B Z
+C X
+C Y
+B Z
+A X
+B Z
+C Y
+B X
+A X
+C Y
+A X
+A X
+C Y
diff --git a/aoc22/day2/src/main.rs b/aoc22/day2/src/main.rs
new file mode 100644
index 0000000..51936b8
--- /dev/null
+++ b/aoc22/day2/src/main.rs
@@ -0,0 +1,64 @@
+fn main() {
+ let input = lib::read_input(2);
+
+ part1(&input);
+ part2(&input);
+}
+
+fn part1(input: &str) {
+ let mut score = 0;
+
+ for line in input.split("\n") {
+ let mut split = line.split(" ").flat_map(|s| s.chars().next());
+ let Some(opp) = split.next() else { continue };
+ let me = split.next().unwrap();
+
+ let outcome_score = match (opp, me) {
+ ('A', 'Z') | ('B', 'X') | ('C', 'Y') => 0,
+ ('A', 'X') | ('B', 'Y') | ('C', 'Z') => 3,
+ ('A', 'Y') | ('B', 'Z') | ('C', 'X') => 6,
+ _ => unreachable!(),
+ };
+
+ let choice_score = match me {
+ 'X' => 1,
+ 'Y' => 2,
+ 'Z' => 3,
+ _ => unreachable!(),
+ };
+
+ score += outcome_score + choice_score;
+ }
+
+ println!("{}", score);
+}
+
+fn part2(input: &str) {
+ let mut score = 0;
+
+ for line in input.split("\n") {
+ let mut split = line.split(" ").flat_map(|s| s.chars().next());
+ let Some(opp) = split.next() else { continue };
+ let outcome = split.next().unwrap();
+
+ let opp = match opp {
+ 'A' => 0,
+ 'B' => 1,
+ 'C' => 2,
+ _ => unreachable!(),
+ };
+
+ let (me, outcome_score) = match outcome {
+ 'X' => ((opp - 1 + 3) % 3, 0),
+ 'Y' => (opp, 3),
+ 'Z' => ((opp + 1 + 3) % 3, 6),
+ _ => unreachable!(),
+ };
+
+ let choice_score = me + 1;
+
+ score += outcome_score + choice_score;
+ }
+
+ println!("{}", score);
+}