summaryrefslogtreecommitdiffstats
path: root/day02b
diff options
context:
space:
mode:
authorShivesh Mandalia <mail@shivesh.org>2022-12-20 18:08:16 +0000
committerShivesh Mandalia <mail@shivesh.org>2022-12-20 18:08:16 +0000
commit277254232b852283cbc6bc6a0f31a588c458bf6a (patch)
treef0b46e514f4d2bb45b3e57d50410b6c5cb15c6f6 /day02b
parent57d36aafff123f2379c7665f7be85703af75a1b1 (diff)
downloadadvent_of_code_2022-277254232b852283cbc6bc6a0f31a588c458bf6a.tar.gz
advent_of_code_2022-277254232b852283cbc6bc6a0f31a588c458bf6a.zip
complete day 2
Diffstat (limited to 'day02b')
-rw-r--r--day02b/Cargo.toml10
-rw-r--r--day02b/examples/input.txt2500
-rw-r--r--day02b/src/main.rs140
3 files changed, 2650 insertions, 0 deletions
diff --git a/day02b/Cargo.toml b/day02b/Cargo.toml
new file mode 100644
index 0000000..400f4a8
--- /dev/null
+++ b/day02b/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "day02b"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+clap = { version = "3.2.20", features = ["derive"] }
+itertools = "0.10.5"
diff --git a/day02b/examples/input.txt b/day02b/examples/input.txt
new file mode 100644
index 0000000..627a35e
--- /dev/null
+++ b/day02b/examples/input.txt
@@ -0,0 +1,2500 @@
+B Z
+B X
+C Y
+B Y
+B Y
+A X
+A X
+B Z
+A Z
+B Z
+B Y
+B X
+C X
+B Y
+A Z
+B Y
+A X
+B X
+C Y
+B Y
+B Y
+C Y
+B X
+B X
+C X
+B Y
+B Y
+B Y
+C Y
+C X
+B Y
+C X
+C X
+B Y
+B Z
+C Y
+B Y
+B Z
+B X
+B Y
+B Y
+C Y
+B Y
+C Y
+C Y
+A Z
+B X
+C X
+B Y
+B X
+C X
+A X
+B Y
+C Y
+B X
+C X
+C Y
+B X
+B Z
+B Y
+B X
+C Y
+B X
+B Y
+B Y
+B Y
+B Y
+A X
+A Z
+B Z
+B Y
+C X
+B Y
+B Y
+C Y
+C Z
+C Z
+C X
+B X
+C Z
+B Y
+B Y
+C X
+C Z
+C X
+A Z
+C Y
+B Y
+B Y
+B Y
+C Y
+C Y
+C X
+C X
+C Z
+A X
+B Y
+C X
+B Z
+B Y
+C X
+B X
+B Z
+A Z
+C Y
+B Z
+C X
+C X
+B Y
+B Y
+B Y
+C Y
+C X
+B X
+B Y
+A Z
+A Z
+C Y
+B Y
+C Y
+C Y
+C Y
+B X
+A Z
+C Y
+C Y
+A Z
+A Z
+B X
+B Y
+B Z
+A Z
+B X
+B Y
+C Z
+C Z
+B Z
+B Y
+B X
+A Y
+C Z
+C X
+A Z
+A Z
+B Y
+B Y
+C Y
+C Y
+B Y
+B Y
+B Y
+A Z
+C Y
+C Z
+C X
+A Z
+B X
+B Y
+A Y
+A Y
+B Y
+B Y
+C X
+B Y
+B Y
+C Z
+B Y
+B Y
+A Z
+C Y
+B X
+C X
+A X
+C X
+B Y
+B X
+A Z
+C X
+C Y
+A Z
+B Y
+A Z
+B X
+B X
+A Z
+B Y
+C X
+C X
+A Z
+A X
+C X
+C X
+C X
+B Y
+C Z
+C Y
+C X
+B Y
+B Y
+B Y
+A X
+A Z
+C Y
+B Y
+B Y
+A X
+C Y
+C Z
+C Y
+C X
+B Y
+B Y
+B Y
+B Y
+A Z
+B Y
+A Z
+B X
+B Y
+B Y
+B X
+C Y
+A X
+A Z
+B Y
+C Y
+C Y
+B Y
+B Y
+C X
+B Y
+B X
+A Z
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+A X
+B X
+B Z
+C Y
+B Z
+C X
+C X
+B Z
+B Y
+A Z
+A Z
+B Y
+C X
+A X
+C Y
+B Y
+B Y
+A X
+B Y
+A Y
+C Y
+B Y
+C X
+B Y
+A Z
+B Z
+C Y
+B Y
+B Y
+C X
+B Y
+B Y
+B Y
+C Z
+A X
+B Y
+B X
+C X
+C Z
+C Z
+C Y
+C Y
+A X
+C Y
+B Y
+A X
+C X
+A Z
+C X
+B Y
+C Z
+C Z
+A Z
+A X
+C Y
+C X
+B Y
+C Z
+B Y
+C Y
+C X
+C Y
+B Y
+B Y
+B Y
+A X
+A Z
+B Y
+B X
+B X
+B Y
+B Y
+B Y
+A Z
+B Y
+B Y
+A X
+A X
+A Z
+A Z
+B X
+C Y
+A Z
+B Y
+B Y
+C Z
+C X
+C Y
+A Z
+C Y
+C Y
+C Y
+C Y
+C X
+A Z
+C Z
+A Z
+C Y
+C X
+B Y
+B Y
+C Z
+B X
+B Z
+C X
+A Y
+C Y
+B X
+B X
+B Y
+C Y
+A Z
+A Z
+B X
+B Z
+B X
+C Y
+A X
+A X
+C Z
+B Y
+C Y
+C X
+B Y
+A Z
+B Y
+C Y
+B Z
+C Z
+C X
+B Z
+C Z
+B Z
+A X
+C Y
+A Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+A Z
+C Z
+B X
+C X
+C Y
+C Y
+B Y
+C X
+C X
+A Y
+C Y
+C Y
+A Z
+C Z
+B Y
+B X
+C X
+B Y
+C X
+B Y
+B Y
+C X
+B Y
+B Y
+B Y
+A Z
+C Y
+B Z
+B Y
+C X
+B Y
+C X
+A Y
+A Z
+B Y
+B Y
+B Y
+A Z
+B Y
+B Y
+B Y
+B Y
+B Z
+C Y
+B Z
+B Z
+A Z
+B Y
+B Y
+C X
+A X
+B Y
+A Z
+C X
+C X
+B Y
+B Y
+A X
+B Y
+B Y
+C X
+B Y
+C X
+B Y
+B Y
+B Y
+B Y
+A X
+B Y
+B Z
+B Y
+A Z
+C X
+C X
+C Y
+A Z
+C Y
+B Y
+B X
+A X
+B Y
+A Z
+B Y
+C Y
+B Y
+B Y
+C Y
+C X
+A Z
+A X
+A Z
+C Z
+B Y
+B Y
+C Y
+B X
+C X
+B Y
+A Z
+B Y
+C X
+A X
+C X
+C Y
+C Y
+B X
+B Y
+B Y
+C Z
+B Y
+C X
+A Z
+C Z
+C Y
+A Z
+C X
+C Y
+C Y
+C X
+B Y
+B Y
+C Z
+A Z
+B Y
+A X
+B Y
+A X
+A X
+C Y
+C X
+A Z
+B Y
+C Y
+C X
+B Y
+B Y
+B Y
+B X
+B X
+A X
+C X
+B Y
+C Y
+A Z
+A Z
+A Z
+B Y
+A Z
+B Y
+C X
+B Y
+C X
+C Y
+A Z
+B Y
+B Z
+A Z
+B Y
+A Z
+B Y
+B Y
+C Z
+B Y
+B Y
+A Z
+A X
+C Z
+C Z
+B Z
+B Y
+A Z
+B Y
+B Y
+B Y
+B Y
+C Z
+A Z
+C X
+B X
+B Y
+A X
+A X
+B Y
+A Z
+A X
+C Y
+B Y
+C X
+A Z
+B Y
+C Z
+C Y
+B Y
+A X
+C Y
+B Y
+B Z
+A Y
+B Y
+B Y
+A Z
+B Y
+C Z
+C X
+B Y
+A Y
+C Z
+B X
+A X
+B Y
+B Y
+B Z
+B Z
+C Y
+B Y
+B Y
+A Z
+A Z
+B Y
+B X
+C Y
+C Y
+B Y
+B Y
+B Z
+B Z
+B Y
+C Y
+A Z
+B Y
+A Z
+B Y
+B Y
+A Z
+A Z
+C X
+C Z
+B Y
+C X
+B X
+A Z
+B Y
+B Y
+C X
+B Y
+B Y
+B Y
+B Y
+B X
+B Y
+A X
+B Z
+A Z
+C Z
+B X
+A Z
+C Y
+C Y
+A Z
+B Y
+C Z
+C Z
+C Y
+B Y
+B Y
+B Y
+A Z
+B Y
+B X
+C X
+B Y
+B Y
+B Y
+B Y
+C Y
+B Y
+C Y
+B Y
+C Y
+C X
+A Z
+C Y
+C Z
+C Z
+B X
+C Y
+B Y
+B X
+C Y
+B Y
+B Y
+C Y
+C X
+C X
+A Z
+B Y
+C X
+A Z
+C Z
+B Y
+B Y
+C X
+C X
+B Y
+B X
+C Y
+B Y
+B Y
+A Z
+A Z
+C Z
+A Z
+B Y
+C X
+C X
+B X
+B Y
+B Y
+B Z
+B Y
+B Y
+B Y
+B Y
+B Z
+B Y
+C Y
+C Z
+B Y
+C Y
+C Y
+C Y
+C Y
+A Z
+A Z
+C Y
+C Y
+A X
+B Y
+C Y
+A X
+C X
+C Y
+A Z
+B Y
+B Z
+A X
+B Y
+B Z
+B Y
+B Y
+B Z
+C X
+C Y
+B Y
+B Z
+B X
+A Z
+B Y
+C Y
+B Y
+B Y
+A X
+C X
+B Y
+C X
+B Y
+C Y
+A X
+A X
+A Z
+C Y
+B Y
+C Y
+C X
+B X
+C X
+C X
+A X
+A Z
+B Y
+B Y
+B Y
+A Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B X
+B Y
+C Y
+B Y
+A Z
+B Y
+C X
+C Y
+B Z
+C Z
+B Y
+A Y
+C X
+B Y
+B Y
+B Y
+C X
+A Y
+C Z
+B Y
+C X
+C Y
+C Y
+C Y
+C X
+C Y
+B Z
+B Y
+C Y
+C X
+B Y
+B Y
+B X
+C Y
+B X
+C Z
+B Y
+C X
+B Z
+C X
+B Y
+C X
+B Y
+C Y
+C Y
+A Z
+C Y
+C X
+B Y
+C X
+B X
+A Z
+B Y
+A Z
+A Z
+A Z
+C Y
+B X
+A Y
+C Y
+B Y
+B Y
+C Y
+C Y
+C X
+B X
+A X
+A Z
+C X
+A Y
+B X
+C Z
+B Y
+B Y
+B X
+C X
+B Y
+B Y
+B Y
+B X
+B Y
+C X
+B Y
+B Y
+C Z
+C Y
+B Y
+C Y
+B Y
+A Z
+C Z
+A Y
+B Y
+B Y
+B Y
+C Y
+C Y
+C Y
+B Y
+C Z
+B Y
+C Z
+A Z
+A Z
+C Z
+C Y
+C Z
+C Y
+A Z
+C X
+B X
+B Y
+C Y
+B Z
+C Z
+C X
+B Y
+A Z
+B Y
+C X
+B Z
+A X
+B Y
+A Z
+C Z
+C X
+C X
+C Y
+B Y
+B Y
+A Z
+A Z
+B Y
+B X
+A Z
+B Y
+C Y
+A X
+C Z
+B Y
+B X
+B Y
+C Y
+C Z
+B Z
+A Z
+B Y
+A X
+C X
+B Y
+A Z
+C X
+B Z
+C Y
+C Y
+C X
+C X
+C Y
+B Y
+B Y
+B Z
+B X
+C X
+B Z
+C X
+B X
+C Z
+C Z
+C X
+B Y
+C Y
+C X
+B Y
+A Z
+C Y
+C Z
+C Z
+C Y
+B Y
+A X
+C Z
+C X
+B Y
+C X
+C Z
+B Y
+C Y
+B Y
+C Y
+A Z
+B Z
+C Z
+C X
+B Z
+B Z
+B Y
+A Y
+C Y
+C Y
+B X
+B X
+B Y
+B Y
+B Y
+C X
+B Z
+B Y
+B Y
+B Y
+C X
+A X
+C Y
+A X
+B Y
+B Y
+B Y
+B Y
+B Y
+C Y
+C Y
+B Y
+B Y
+B Y
+B Y
+C Y
+B Y
+C X
+B Y
+B Y
+C X
+A Z
+A X
+C Y
+C Z
+B Y
+C X
+B Y
+B X
+A Z
+B X
+B Y
+B Y
+A Z
+B Y
+B Y
+B Y
+B Z
+A Z
+A X
+B Y
+A Z
+C Y
+B Y
+C X
+B Y
+C Y
+B Y
+B Y
+C X
+C Y
+A Y
+C X
+C Y
+B Y
+A Y
+A Z
+C Z
+A Y
+A Z
+B Y
+C Y
+C Y
+B Y
+B Y
+B Y
+B Y
+A Z
+B Y
+B Y
+B Y
+C X
+C X
+B Y
+C X
+B Y
+A Z
+B Y
+B X
+C Z
+C Y
+A Y
+B Y
+C Y
+B Y
+C Y
+C Y
+C Y
+C X
+C Y
+B Y
+B Y
+C Y
+B Y
+C Y
+A Z
+A X
+B Y
+A Z
+B Y
+C X
+C X
+B Y
+C Z
+B Y
+B Y
+C Y
+B Y
+C Z
+A Y
+B Y
+C Y
+B Y
+A Z
+C Y
+B Z
+C Y
+C Y
+C Z
+B Y
+C X
+B Z
+B Y
+B Y
+B Y
+C Z
+B Y
+B Y
+B Y
+A Z
+C X
+B Z
+B Y
+B Y
+C Y
+B Y
+C X
+B Y
+B Y
+C Y
+C X
+C Y
+B Y
+B Y
+C Y
+B Y
+A Y
+B Y
+A Z
+B Y
+B Y
+B X
+A Z
+B Y
+B Y
+C Y
+C X
+C Z
+A Z
+A Z
+C X
+B Y
+C Y
+B Y
+C X
+B Y
+B Y
+C Y
+C X
+B Y
+B Y
+B Y
+B Y
+B Y
+C X
+B Z
+B Z
+A Z
+B Z
+B Y
+B Z
+B Y
+C Y
+A Z
+A X
+B Y
+C Z
+B X
+A X
+C Y
+B Y
+B Y
+C Y
+B Y
+C Y
+B Y
+A Z
+B Y
+B Y
+A Z
+B Y
+B Y
+A Z
+B Y
+B Y
+B Y
+B Y
+C Y
+B Y
+A X
+A X
+B Y
+B Y
+A Y
+C Z
+A Z
+A Z
+B Y
+A Z
+C Y
+B Y
+B Y
+B Y
+B Y
+C Y
+B Y
+A X
+B X
+B Y
+B Y
+B Y
+B Y
+B X
+C Y
+B Y
+B Y
+B X
+C Y
+A Y
+B Y
+B Y
+B Y
+A X
+B Z
+C X
+A X
+C Z
+B Y
+B Y
+B Y
+C X
+B Y
+B Y
+B Y
+B Y
+C Y
+B Z
+B Z
+B Y
+B Z
+B Y
+B Y
+C Z
+C Y
+B Y
+C Z
+C Z
+B Y
+C X
+A Y
+B Y
+B Z
+A Z
+B Y
+C X
+B Y
+B Y
+C Z
+A Z
+B Y
+B X
+B Y
+C Y
+B Y
+B Z
+B Y
+B Y
+C X
+C X
+C Z
+B Y
+B Y
+B Y
+A Z
+A X
+B Y
+A Z
+B Y
+B Y
+B Y
+B Z
+C X
+C Z
+B Y
+B Y
+B Y
+C Z
+B X
+C Z
+A X
+B Y
+C Y
+B Y
+A Z
+A X
+C X
+B X
+A Z
+C X
+B Y
+C Y
+B X
+A Z
+C Y
+C Y
+B Z
+C X
+B Y
+C X
+C Z
+C Y
+B Y
+C Z
+B Y
+B Y
+C X
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+C X
+B Y
+B Y
+B Y
+A Z
+B Y
+B Y
+C Z
+B Y
+B Y
+B Y
+C X
+A Z
+B Z
+C Y
+C Y
+B Y
+A X
+C Y
+B Y
+C Z
+B Z
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+C Z
+A X
+B Y
+C Y
+A X
+B Y
+B Y
+A X
+B Y
+A Y
+C X
+A Z
+A Z
+C Y
+B Y
+C Z
+C Y
+C Y
+C Z
+A Z
+A X
+C Z
+B Y
+C X
+A Z
+C X
+B Y
+B Y
+B Y
+C Z
+C Y
+C X
+C Y
+A Y
+C X
+A Z
+A Z
+B Z
+C X
+B Y
+B Y
+C X
+A Z
+C Z
+C Z
+B Y
+B Y
+A Y
+C X
+B Z
+B Y
+B Y
+C X
+C X
+C Z
+C Z
+B Y
+B Y
+B X
+B Y
+B Y
+C Z
+C Y
+C Z
+B Y
+B Y
+B Y
+C Y
+B X
+C X
+A Z
+C X
+C X
+C Y
+B Y
+B Y
+C Y
+B Z
+B Z
+C X
+C Y
+B Y
+B Z
+B Y
+B X
+A Z
+C X
+B Z
+A Z
+C X
+B Y
+C Y
+C Y
+B Y
+B Y
+B Y
+B X
+A X
+B Y
+A X
+A Z
+C Y
+B Y
+B Y
+B Y
+B Y
+B Y
+C Z
+B X
+B Y
+C X
+A Z
+B Y
+B Y
+A Z
+B Y
+C Y
+C Z
+C X
+C Y
+B Y
+B Y
+B Z
+B Y
+A X
+C Y
+B Y
+A X
+B Y
+C X
+A Z
+B Y
+C X
+A Z
+B Y
+C X
+C Y
+C X
+B Z
+C Z
+B Y
+C Y
+C X
+C Y
+B Z
+B X
+A X
+C Z
+B Y
+B Y
+C Y
+B Z
+C X
+C X
+B Y
+B Y
+C Y
+B X
+B Y
+C Y
+B Y
+B Y
+A Z
+B Y
+B Y
+B Y
+A X
+A Z
+B Z
+B Z
+B Y
+A Z
+B Y
+C Y
+B Y
+C X
+B X
+B Y
+B Y
+B X
+C Z
+B Y
+C Z
+C X
+B Y
+C Z
+B Y
+C Y
+B Z
+C Y
+C Y
+C Z
+C Z
+A X
+B Y
+A Z
+B Y
+B X
+A X
+B Y
+B Y
+B Y
+C Y
+B Y
+B X
+B Z
+C Z
+B X
+B Z
+B Y
+C Y
+B Y
+B Z
+C X
+A Z
+B X
+B Z
+C X
+C Z
+B Y
+A Z
+C X
+C Y
+B Z
+B Y
+C Y
+B Y
+C Y
+B Y
+B Y
+B Y
+C Y
+B Y
+C Y
+C X
+C Z
+B Y
+B Y
+B X
+C Z
+B X
+A Z
+C Y
+A Z
+C X
+C Y
+B Y
+C Z
+B Z
+C Z
+C Y
+C X
+B Y
+C Z
+C X
+B Y
+B Y
+B Y
+B X
+B Y
+B Y
+C X
+A X
+B Z
+C X
+C Z
+B Y
+C Y
+B Z
+C Z
+B Y
+C X
+B Y
+B Y
+A Z
+C Z
+B Y
+C Z
+C X
+B Y
+B Y
+C X
+C X
+C Y
+B Y
+A X
+A Z
+B Y
+C X
+B Y
+B Y
+C Y
+B Y
+A Z
+A Z
+C X
+C Z
+C X
+C X
+A X
+B Y
+B Y
+C Y
+C Z
+C Y
+B Z
+C Y
+B Y
+B Y
+B Y
+C Y
+B Z
+B Y
+B Y
+B X
+C Y
+C Y
+B Y
+A X
+C X
+A X
+C Z
+C Y
+A Y
+B Y
+B Y
+B Z
+C X
+C X
+B Y
+A X
+B Y
+A Z
+B Y
+A Z
+C X
+C X
+B Y
+B Y
+B Y
+B Y
+A X
+B Y
+B Z
+C Y
+C X
+C Z
+C Z
+B Y
+C Z
+B Y
+B Y
+C X
+B Y
+A X
+A Z
+B Y
+A Z
+C X
+B Y
+C Y
+B Z
+C Z
+B Y
+B Y
+B Y
+B Y
+C Y
+C Z
+B X
+B Y
+A Y
+C Y
+B Z
+B Y
+C Y
+A Z
+B Y
+B Y
+C Y
+C Y
+A Y
+C Y
+A Z
+C Y
+B X
+B Y
+B Y
+C Y
+A Z
+C Y
+A Z
+B Y
+B Y
+B Y
+B Y
+A X
+C Y
+A Z
+B Y
+B Y
+B Y
+B Y
+B Z
+C Z
+C Y
+C X
+B Y
+C X
+B Y
+B Y
+B Y
+B Y
+A Z
+B Y
+C Y
+C Y
+A Z
+A X
+B Y
+C Y
+C Y
+B Y
+C Y
+C Y
+C Y
+C Z
+A Z
+C X
+C Y
+C X
+B Y
+B Y
+C X
+C Z
+C X
+C Z
+B X
+B Y
+C Z
+B Z
+A Z
+C Y
+B Z
+C Y
+B Y
+A X
+B Y
+A Z
+B Y
+A X
+B Y
+B X
+B Z
+B X
+B Y
+B Y
+B Y
+C X
+B Y
+B X
+C X
+B Y
+B Z
+B Y
+C Y
+B Y
+B Y
+C X
+A Z
+C X
+B Y
+C Y
+C Z
+B Y
+C Z
+B Y
+B Y
+B Y
+B Y
+C Z
+C X
+C Y
+C Z
+B X
+A Z
+A Z
+B Y
+B Z
+C Y
+A X
+B Y
+B Y
+A Z
+B Y
+B Y
+B Y
+B Y
+A Z
+C Z
+B Z
+C Y
+A Z
+C Y
+B Y
+B Y
+B Y
+B Z
+B Y
+C X
+C Z
+B X
+C X
+B Y
+C Z
+C X
+B Y
+A Z
+A Z
+B Y
+B Y
+B Y
+C X
+A Y
+B Y
+B Y
+A Z
+A Z
+C Z
+C Y
+B Y
+B Y
+A X
+B Z
+A X
+B Y
+A Z
+B Y
+C X
+B Y
+A Y
+B Y
+B Z
+B Y
+B Z
+B Y
+B Y
+C Y
+C Y
+B Y
+C X
+C Z
+B Y
+B Y
+B Y
+C Z
+A Z
+C X
+B Y
+B Z
+B Y
+C Y
+B Y
+C X
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B X
+B Y
+B Y
+C X
+B Y
+B Z
+A Z
+A Z
+C X
+B X
+B X
+C Y
+C Z
+B Y
+C X
+A X
+B Y
+C X
+C Z
+C X
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+A Z
+C Z
+C X
+B Y
+B Y
+A X
+B Y
+C Y
+B Y
+B Y
+C Y
+B X
+B X
+A X
+C Y
+C Z
+C Y
+B Y
+B Y
+C X
+A X
+A X
+C X
+B Y
+C X
+B Y
+B Y
+B Y
+C Y
+A Z
+B Z
+A Z
+B Y
+B X
+C Y
+B Z
+B Y
+A Z
+B Y
+C Y
+B Y
+C Y
+A X
+B Y
+B Y
+B Y
+C X
+A Z
+C Y
+B Y
+B Y
+B Y
+C X
+B Y
+C Y
+B Y
+B X
+C X
+B Y
+B Y
+C Y
+C X
+C Z
+C Z
+B Y
+B Y
+B Y
+B X
+C X
+B X
+A Y
+A Z
+C Y
+A X
+B Y
+B Y
+B Y
+A Z
+C Y
+C X
+C Y
+C Z
+A Z
+B Y
+B Y
+B Y
+B Y
+A Z
+B Y
+A Z
+B Y
+B Y
+C Y
+C Z
+C Y
+A Z
+C Y
+B Y
+C Y
+B X
+B Y
+A X
+C Z
+C Z
+A X
+C X
+C Z
+C X
+C X
+B Y
+A X
+A Z
+C Y
+B Y
+C X
+B Y
+B Y
+B X
+C Y
+C Z
+B Y
+B Z
+A Z
+C Y
+B Y
+A Z
+B Y
+C X
+C X
+B Z
+C Y
+B X
+B Y
+C Y
+B Z
+A Z
+C X
+C Y
+C X
+C Z
+B Z
+C Z
+B Y
+B X
+B Y
+B X
+B Y
+B Y
+B Y
+B Y
+C X
+C X
+C Y
+B Z
+C X
+B Y
+B Y
+B Z
+C Z
+C Y
+B Y
+B Y
+B Y
+C X
+B Z
+B Y
+B X
+B Y
+C Y
+C X
+C Z
+C X
+C Y
+B Y
+B Y
+B X
+B Y
+C X
+B X
+A X
+B Y
+C Y
+B Y
+A X
+C Y
+B Z
+B Z
+C X
+C Z
+C X
+B Y
+C Y
+C Y
+B Y
+C Z
+B Y
+C Y
+B Y
+C Y
+A Z
+B Z
+C X
+C X
+B Y
+B Y
+B Z
+B Y
+B Z
+A X
+C X
+C X
+B Y
+C X
+A Z
+C Y
+B Y
+A Z
+C Z
+B X
+C Y
+C X
+C X
+A Z
+B Y
+B Y
+C Z
+B Y
+A Y
+C Y
+B Y
+B X
+B Z
+C X
+B Y
+B X
+C Z
+B Y
+B X
+B Y
+B Y
+B Y
+A Z
+A Z
+B Z
+A Z
+C Y
+C Z
+B X
+C X
+A Z
+C X
+B Y
+B Y
+A X
+B X
+B Y
+B X
+B X
+A Y
+A Z
+C X
+B Z
+B Z
+C Y
+C Y
+B Y
+B Y
+B Y
+A Z
+A Z
+B Y
+B Y
+C Y
+C Y
+C Y
+C Z
+C X
+C Y
+B Y
+B X
+B Y
+A Y
+A X
+C Y
+B Y
+A Z
+B Y
+B Y
+C X
+C X
+B Y
+B Y
+C Y
+A Z
+B Y
+C Y
+C Z
+C Z
+C Y
+A Y
+B Y
+B Y
+C Y
+B X
+C Z
+C Z
+C Z
+B Y
+B Y
+B Y
+C Y
+A Z
+B Y
+A Z
+B Y
+A Z
+C X
+C Z
+C Y
+B Y
+A Z
+B Y
+B Y
+C Z
+B Y
+C X
+B Y
+C Y
+C Y
+B Y
+B Y
+A X
+C Z
+B Y
+C Y
+C X
+B Y
+B Y
+B Y
+B Z
+A Z
+B Y
+B Y
+B Y
+A Z
+B Y
+A X
+B Y
+B Y
+B Y
+C Y
+C X
+C Y
+A Z
+B Y
+C Y
+B Y
+C Y
+C Y
+C Y
+A X
+C Z
+B Y
+B Y
+C Z
+B Y
+B Y
+C Z
+B Z
+B Y
+C Y
+B Y
+B Y
+B Y
+B Y
+B X
+C X
+C Y
+B Y
+A Z
+B Y
+A X
+B Y
+B Y
+B Y
+B Y
+C Z
+C Z
+B Y
+A Z
+B Y
+C X
+C X
+C Y
+B X
+A X
+B X
+B Y
+C X
+C Z
+C Y
+C Y
+B Y
+C Z
+B Y
+B Y
+C Z
+A X
+B Y
+C Z
+B Z
+B Y
+C X
+C X
+B Y
+B Y
+B X
+C Z
+A Z
+A X
+B Y
+C X
+B Y
+B Y
+C Z
+B Z
+C Y
+B Y
+B X
+C X
+C Z
+B Z
+B Z
+C Y
+B Y
+A X
+B Y
+B Y
+C X
+B X
+A Z
+B Y
+A Z
+B Y
+B Y
+A Z
+C X
+C X
+B Y
+B X
+B Y
+A Z
+C Y
+C Z
+B Y
+B Y
+A X
+B Y
+C Y
+C Y
+B Y
+A X
+B Y
+B Y
+A Z
+C X
+C X
+C Y
+B Y
+A X
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+B Z
+B Y
+C Y
+C Y
+B Y
+C X
+C X
+B Y
+C Y
+B Y
+C X
+B Y
+B Z
+B Y
+A Z
+A Z
+C X
+A Z
+A Z
+B Y
+B X
+C Z
+B Y
+B Y
+B Y
+B Y
+B Y
+C X
+C Y
+B Y
+A X
+C X
+C X
+C Y
+B Y
+C X
+C X
+C Z
+B Z
+C Y
+C X
+B Y
+B Y
+C X
+B X
+C Z
+B Y
+B Y
+C Y
+A Z
+C Y
+C X
+C Y
+B Y
+B Y
+C X
+C Y
+C Y
+C X
+B Z
+B Z
+B Y
+B Y
+C Y
+B Y
+C X
+A Z
+A X
+C Z
+B Y
+C Y
+C Y
+B Y
+B Y
+C Y
+B Y
diff --git a/day02b/src/main.rs b/day02b/src/main.rs
new file mode 100644
index 0000000..55c00c5
--- /dev/null
+++ b/day02b/src/main.rs
@@ -0,0 +1,140 @@
+/// --- Part Two ---
+///
+/// The Elf finishes helping with the tent and sneaks back over to you. "Anyway, the second column
+/// says how the round needs to end: X means you need to lose, Y means you need to end the round in
+/// a draw, and Z means you need to win. Good luck!"
+///
+/// The total score is still calculated in the same way, but now you need to figure out what shape
+/// to choose so the round ends as indicated. The example above now goes like this:
+///
+/// In the first round, your opponent will choose Rock (A), and you need the round to end in a
+/// draw (Y), so you also choose Rock. This gives you a score of 1 + 3 = 4.
+/// In the second round, your opponent will choose Paper (B), and you choose Rock so you lose
+/// (X) with a score of 1 + 0 = 1.
+/// In the third round, you will defeat your opponent's Scissors with Rock for a score of 1 + 6
+/// = 7.
+///
+/// Now that you're correctly decrypting the ultra top secret strategy guide, you would get a total
+/// score of 12.
+///
+/// Following the Elf's instructions for the second column, what would your total score be if
+/// everything goes exactly according to your strategy guide?
+use clap::Parser;
+use itertools::Itertools;
+
+use std::fs::File;
+use std::io::prelude::*;
+use std::io::BufReader;
+use std::path::PathBuf;
+
+const FILEPATH: &'static str = "examples/input.txt";
+
+#[derive(Parser, Debug)]
+#[clap(author, version, about, long_about = None)]
+struct Cli {
+ #[clap(short, long, default_value = FILEPATH)]
+ file: PathBuf,
+}
+
+#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)]
+enum RockPaperScissorsKind {
+ Rock,
+ Paper,
+ Scissors,
+}
+
+#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)]
+enum GameOutcome {
+ Win,
+ Loss,
+ Draw,
+}
+
+#[derive(Copy, Clone, Debug)]
+struct GamePrediction {
+ outcome: GameOutcome,
+ opponent: RockPaperScissorsKind,
+}
+
+fn kind_to_value(kind: RockPaperScissorsKind) -> i32 {
+ use RockPaperScissorsKind::*;
+ match kind {
+ Rock => 1,
+ Paper => 2,
+ Scissors => 3,
+ }
+}
+
+fn opp_to_kind(val: char) -> Option<RockPaperScissorsKind> {
+ use RockPaperScissorsKind::*;
+ match val {
+ 'A' => Some(Rock),
+ 'B' => Some(Paper),
+ 'C' => Some(Scissors),
+ _ => None,
+ }
+}
+
+fn exp_out_to_outcome(val: char) -> Option<GameOutcome> {
+ use GameOutcome::*;
+ match val {
+ 'X' => Some(Loss),
+ 'Y' => Some(Draw),
+ 'Z' => Some(Win),
+ _ => None,
+ }
+}
+
+fn outcome_to_value(outcome: GameOutcome) -> i32 {
+ use GameOutcome::*;
+ match outcome {
+ Win => 6,
+ Draw => 3,
+ Loss => 0,
+ }
+}
+
+fn pred_to_player_kind(pred: GamePrediction) -> RockPaperScissorsKind {
+ use GameOutcome::*;
+ use RockPaperScissorsKind::*;
+ match (pred.outcome, pred.opponent) {
+ (Win, Rock) => Paper,
+ (Win, Paper) => Scissors,
+ (Win, Scissors) => Rock,
+ (Loss, Rock) => Scissors,
+ (Loss, Paper) => Rock,
+ (Loss, Scissors) => Paper,
+ (Draw, x) => x,
+ }
+}
+
+fn game_pred_to_value(prediction: GamePrediction) -> i32 {
+ outcome_to_value(prediction.outcome) + kind_to_value(pred_to_player_kind(prediction))
+}
+
+fn main() {
+ let args = Cli::parse();
+
+ let file = File::open(&args.file).unwrap();
+ let reader = BufReader::new(file);
+ let res: i32 = reader
+ .lines()
+ .map(|l| {
+ l.unwrap()
+ .split(' ')
+ .map(|w| w.parse::<char>().unwrap())
+ .collect_tuple::<(char, char)>()
+ })
+ .map(|v| v.unwrap())
+ .map(|(o_char, out_char)| GamePrediction {
+ outcome: exp_out_to_outcome(out_char).unwrap(),
+ opponent: opp_to_kind(o_char).unwrap(),
+ })
+ .map(|pred| game_pred_to_value(pred))
+ .sum();
+
+ println!(
+ "The total score if everything goes exactly according to your strategy guide is {}",
+ res
+ );
+}