summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGard Spreemann <gspr@nonempty.org>2022-12-02 20:45:22 +0100
committerGard Spreemann <gspr@nonempty.org>2022-12-02 20:45:22 +0100
commit281d7c773ed6483670e6643479f78b507f69dabd (patch)
tree456c7a7da539a1b33716baee49a9cbbbb71e63c6
parent73e4bce8e7a5312c5b4d4559cb1707622771f4f2 (diff)
Day 2
-rw-r--r--02/Cargo.toml15
-rw-r--r--02/input.txt2500
-rw-r--r--02/src/part-1.rs67
-rw-r--r--02/src/part-2.rs74
-rw-r--r--02/test.txt3
5 files changed, 2659 insertions, 0 deletions
diff --git a/02/Cargo.toml b/02/Cargo.toml
new file mode 100644
index 0000000..0307602
--- /dev/null
+++ b/02/Cargo.toml
@@ -0,0 +1,15 @@
+[package]
+name = "day-02"
+version = "0.1.0"
+authors = ["Gard Spreemann <gspr@nonempty.org>"]
+edition = "2021"
+
+[[bin]]
+name = "part-1"
+path = "src/part-1.rs"
+
+[[bin]]
+name = "part-2"
+path = "src/part-2.rs"
+
+[dependencies]
diff --git a/02/input.txt b/02/input.txt
new file mode 100644
index 0000000..6ec569e
--- /dev/null
+++ b/02/input.txt
@@ -0,0 +1,2500 @@
+B Z
+A Z
+B Z
+C Z
+C Z
+B X
+A X
+C X
+A Z
+C Y
+C X
+C Y
+C Y
+A X
+A Z
+A Z
+A X
+B Z
+B X
+A Z
+A X
+C Y
+A X
+B Z
+B Z
+A X
+C Z
+A Z
+A X
+B Z
+A Z
+A Y
+C Y
+A Z
+C Z
+A Z
+C Y
+C Z
+C Z
+A Z
+A X
+A X
+B X
+A Z
+B Z
+A X
+A Z
+A Z
+A X
+A X
+C Y
+A Z
+B X
+C Y
+A X
+B Y
+A Z
+A X
+A Z
+A X
+C Z
+A Z
+A Y
+A X
+C Y
+A X
+B X
+A X
+A Z
+C Y
+A Z
+A X
+C X
+C Z
+C Z
+A Z
+A X
+A Z
+C X
+C Z
+B Z
+A Z
+C Y
+C Z
+B X
+A X
+A Z
+A X
+A X
+C Y
+A Z
+C Z
+B X
+A X
+A X
+A Z
+A Y
+A X
+C X
+A Z
+B X
+C Y
+A X
+A X
+A X
+C X
+B Z
+B Z
+A Z
+A X
+A Z
+C Z
+C X
+C Y
+B X
+C Z
+A Z
+C X
+A Z
+A X
+A X
+A X
+A X
+A Z
+B X
+A X
+B X
+C Z
+A Z
+A Z
+A X
+A X
+A X
+B X
+A Z
+A X
+A Z
+A X
+B Z
+A Z
+A X
+B Z
+A Z
+A Z
+C Y
+B Z
+A Z
+B Z
+A Z
+A X
+C X
+A X
+C Y
+C X
+A X
+A X
+C Y
+A Z
+A X
+B Z
+A Z
+A Z
+B X
+B Z
+A X
+A Z
+A X
+A X
+A Z
+A X
+A Z
+A Z
+C X
+A Z
+A X
+C Y
+A Z
+A Z
+A X
+A X
+A X
+A X
+B Z
+B X
+A Z
+A X
+A Z
+C Y
+B Y
+C Y
+B X
+A Z
+A Z
+A Z
+C Y
+A Z
+A X
+B Z
+C X
+A X
+C Z
+C X
+C Y
+A Z
+A X
+A Z
+C Z
+A Z
+A Z
+A Y
+C Z
+A X
+A X
+B Z
+A Z
+C Z
+A Z
+A X
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+C X
+A X
+A X
+A X
+B Y
+B X
+A X
+A Z
+A Z
+A X
+A Z
+A X
+A X
+A Z
+B X
+A Z
+C Z
+A Z
+C Z
+A Z
+A Z
+C Z
+A X
+C Z
+A X
+C X
+A Z
+A Z
+B Z
+A Y
+B Z
+A X
+B Z
+A Z
+A X
+A Z
+A Z
+A X
+A Z
+B Z
+C X
+A Z
+A X
+B Z
+C Y
+B Z
+C X
+A Z
+A Z
+C X
+B X
+C Z
+A Z
+A X
+A Z
+C X
+A Z
+C Z
+C Z
+B Z
+B Z
+A Z
+C X
+A X
+B Y
+A Y
+A Z
+C X
+B X
+A Z
+A Z
+B Y
+A Z
+A Z
+C Z
+A Z
+A X
+A Z
+B X
+C Z
+B X
+A Z
+B Z
+C Y
+A X
+A X
+A Z
+A Z
+A Z
+C Y
+A X
+A Z
+A Z
+A X
+B Z
+A Z
+C X
+C Z
+A Z
+A X
+B Z
+A X
+C Y
+A X
+A Z
+A Y
+C Z
+A Y
+A Z
+C X
+C Y
+A Z
+C Y
+A Z
+A X
+C Y
+A Z
+A X
+A X
+B Z
+A X
+C X
+A X
+C X
+A X
+A Z
+A X
+A Z
+A Z
+A X
+C X
+C Z
+A Z
+C Z
+C X
+A Z
+C Y
+A X
+A Z
+A Z
+C Y
+A X
+B X
+C Y
+B Z
+C Y
+A X
+A X
+C Z
+A X
+A Z
+A X
+A X
+C X
+A X
+A Z
+B X
+C Z
+A Y
+B Y
+A Z
+A Z
+A Z
+A Z
+B Y
+A Y
+A Z
+B Z
+A Z
+A X
+C Z
+B Y
+C Y
+A X
+A Z
+C Z
+B Z
+A Z
+A Z
+A Y
+C Z
+A Z
+A Z
+C Z
+C Z
+C Z
+A X
+B Y
+C X
+A X
+A Z
+A Z
+B Z
+A Y
+A X
+A Z
+B X
+A X
+A X
+A Z
+A Y
+A Z
+A X
+B X
+A Z
+C X
+A Z
+A X
+C X
+B X
+B Y
+B X
+A Z
+A Z
+A Z
+A X
+B X
+A X
+B Z
+A Y
+B Z
+C Z
+A X
+C Z
+C X
+A Z
+C Y
+C Y
+A Z
+A X
+A X
+A X
+B X
+A Z
+A Y
+C Y
+B X
+A X
+A X
+A X
+C Y
+A Z
+A Y
+A X
+C Z
+A Z
+A Z
+A Z
+C Z
+A X
+A Z
+C Z
+B X
+C Y
+A Z
+B Z
+B Z
+C Z
+C Z
+A X
+A Z
+A Z
+B X
+B X
+A Z
+A Z
+A Y
+C Z
+A Z
+A X
+C Z
+A Z
+C Z
+C Z
+A Z
+A Z
+B Z
+A X
+B Y
+A Z
+A X
+C Z
+A X
+B X
+A Z
+C Y
+A Z
+C X
+C Y
+A X
+C X
+C X
+A Z
+C Z
+C Y
+A Z
+A Z
+A X
+A X
+C Z
+A Y
+A Z
+A X
+B Z
+A X
+A Z
+A Z
+A X
+B Z
+A X
+A Z
+C X
+A Z
+A Z
+C X
+A Z
+A X
+A Z
+A X
+B Z
+A Z
+A Z
+C Y
+C Y
+C Z
+C Z
+C Y
+A X
+A X
+A X
+A Z
+A Z
+C Y
+A Z
+C Z
+A Z
+C Z
+B Z
+B X
+A Y
+C Y
+A X
+A Z
+A X
+A X
+A Z
+C Z
+C Y
+C Y
+A Y
+A X
+A Z
+A X
+C Z
+A X
+A Z
+A Z
+C Y
+A X
+A Z
+A Z
+A X
+B Y
+A Z
+A Z
+A Z
+A Z
+C Y
+A Z
+A X
+A X
+A Z
+A Z
+C Y
+A Z
+A Z
+B Z
+A Z
+A X
+A X
+A Y
+C Z
+C Z
+A Z
+B Z
+A Z
+A Z
+A X
+A X
+C Z
+A Z
+A X
+A X
+A Z
+A Z
+B Y
+A Y
+C Y
+A X
+A Z
+C Z
+C Y
+A Z
+C Y
+A X
+A X
+A X
+A Z
+C Y
+C Y
+A Z
+B X
+C Y
+A Z
+A X
+A Z
+A Y
+C Y
+C Z
+B Z
+A Z
+C Y
+A X
+C Z
+A X
+C Y
+C Z
+A Z
+C Y
+C Y
+A Y
+B X
+A Z
+C Z
+B Z
+B Y
+A Z
+C Y
+A X
+A Z
+A Z
+C Y
+A Z
+C Z
+A Z
+A Z
+A X
+A Z
+A Z
+C Z
+A X
+A Z
+C Z
+C Y
+A X
+A X
+C Z
+C Y
+A Z
+C Y
+A Z
+A X
+A X
+A Z
+A Z
+A X
+A Z
+C Y
+C Z
+A Z
+B X
+C Z
+A Z
+A Z
+A X
+B X
+A Z
+A Y
+A X
+C Z
+B X
+A Z
+C Y
+C Z
+C Z
+C Z
+A Z
+A Z
+A X
+A Z
+C Z
+C Y
+A X
+A Z
+A Z
+A Y
+A X
+A Z
+A Z
+C X
+B Z
+A X
+A Z
+A X
+C Z
+A X
+C X
+A X
+C Y
+C Y
+A X
+A X
+A Z
+B Z
+A Z
+A Y
+B Z
+A X
+C X
+A X
+C X
+A X
+C X
+A Z
+A X
+A X
+A X
+C Y
+A X
+A X
+C X
+C Z
+A X
+B Y
+A X
+B Z
+A Z
+A X
+C Z
+A Z
+A X
+A Z
+A X
+C X
+C Z
+A X
+C Z
+C Y
+C Y
+A X
+A X
+A X
+C Z
+C Z
+A Z
+C Z
+A Z
+B Z
+A Y
+B Z
+A X
+A Z
+A Z
+A Z
+C Z
+A Z
+A X
+A X
+B Z
+A Z
+C Y
+C Z
+B Z
+C Y
+C Z
+A X
+A X
+C X
+B X
+C Z
+A Z
+A Z
+C Z
+A X
+A Z
+A Z
+B X
+B Z
+A Z
+A Z
+B Z
+A Z
+A Z
+B Z
+B Z
+C Z
+A Z
+C Z
+A Z
+A Z
+C Z
+A Z
+A Z
+B Z
+A Z
+A X
+A X
+A X
+A Z
+C Z
+A X
+A Z
+A X
+A Z
+B Z
+B Z
+C Z
+A Z
+A Y
+C X
+A X
+A Z
+A X
+A X
+C X
+C Z
+B Y
+A X
+A X
+C Y
+C Y
+A X
+A Z
+A Z
+B Z
+B Z
+A Z
+C Z
+A Z
+C Z
+C X
+A Z
+A X
+A Y
+A X
+A Z
+C Z
+A X
+A Z
+A Z
+A Z
+A X
+C X
+B Z
+A Z
+A Y
+C X
+A Z
+A Z
+A Z
+A X
+A Y
+A X
+C Y
+A Z
+C Y
+A Z
+A Z
+C X
+A Z
+A Y
+C Z
+A X
+A X
+A Z
+A Y
+A Z
+A X
+C Z
+A Z
+A Z
+B Z
+A Z
+A Z
+C X
+B Z
+C Y
+A X
+A Y
+B X
+A Z
+C Z
+C X
+C Z
+A X
+A X
+A Z
+A Z
+A X
+A Z
+B Z
+B Z
+A Z
+B Y
+B Z
+A X
+A X
+C Z
+A Z
+C Y
+B Z
+C Z
+C Z
+A Z
+A X
+B Z
+A X
+A X
+A Z
+A Z
+A X
+B Z
+A Z
+C Z
+A Z
+A Z
+B X
+C Z
+B Z
+C Y
+A Z
+A X
+A X
+B X
+A X
+B Z
+C Y
+C Y
+B Z
+C Y
+C Y
+A X
+A Z
+A Z
+C Y
+B Z
+A X
+A Z
+A X
+B X
+A X
+C Y
+A X
+A X
+B Z
+A X
+B X
+A Z
+C Y
+B Z
+A X
+A Z
+A X
+A X
+B X
+A X
+A X
+A X
+A Z
+A Z
+C Y
+A Z
+B Z
+C Z
+C Y
+C Z
+A X
+A Z
+A X
+C Z
+C Z
+C Z
+C Y
+A X
+B X
+B X
+C X
+C Z
+C X
+C Z
+B Z
+A Y
+A X
+C X
+B X
+A X
+A X
+A Z
+A X
+A Z
+A X
+A X
+A Z
+A Z
+C Z
+A X
+C Y
+C Y
+C Z
+A Z
+A X
+A Z
+A X
+A Z
+A Y
+A Z
+A X
+A X
+A Z
+A X
+A Y
+A Y
+C X
+A Y
+C Y
+C X
+A Z
+C Z
+C Y
+C Z
+A Z
+C X
+A X
+C Z
+A Z
+C Y
+B Z
+A Z
+A Z
+A Z
+C Y
+A X
+A X
+A Z
+A Z
+A Z
+B Z
+C Z
+A X
+C Y
+A X
+A Z
+A X
+C X
+C Z
+A Z
+C Y
+A Y
+A Y
+A Z
+A X
+A Z
+A Y
+A X
+C Z
+A Z
+A Z
+A X
+A X
+B Z
+B Y
+B Y
+C X
+A Z
+A Z
+C Z
+A X
+A Z
+C Y
+B X
+C Y
+A Z
+A Z
+A X
+A Z
+A X
+A X
+C Z
+A Z
+A Z
+A X
+A X
+C Y
+A X
+A X
+C Y
+A Y
+C X
+A X
+C Y
+A Y
+A Z
+B Y
+A X
+C Z
+B X
+A X
+C Z
+A Z
+B Z
+A Z
+A Z
+C X
+A Z
+B Z
+C X
+A Z
+C Y
+A Z
+C Z
+A Z
+C X
+A X
+A Z
+A Y
+B X
+A X
+B X
+A Z
+A Z
+C Y
+A Z
+C Z
+A Z
+A Z
+A Z
+C X
+A Z
+B X
+A X
+A Z
+C Z
+A Z
+A X
+C Y
+A Z
+C Y
+A Z
+A Z
+C Z
+A X
+A Z
+A Z
+B X
+A Z
+A X
+C Z
+B Y
+A Z
+A X
+C Z
+A X
+A Z
+A Z
+A Z
+C Z
+A Z
+A Z
+C X
+A X
+A X
+C X
+A X
+A X
+B Z
+A Z
+A X
+B X
+A X
+A Z
+C Y
+A Z
+B X
+C Y
+A X
+C Z
+A Z
+B Z
+A X
+A Z
+A Z
+C Z
+A X
+C Z
+A X
+C X
+A Y
+A X
+A Z
+C X
+A X
+A X
+A X
+A X
+A Z
+A X
+B Z
+C Z
+C Y
+B Z
+B Z
+B X
+A Z
+A X
+B Z
+A Z
+A X
+C Z
+A Z
+C Y
+B Z
+C Y
+A X
+C X
+A X
+A Z
+C Y
+A Z
+A X
+A Y
+C Y
+C Y
+A Z
+A Z
+C Y
+A Z
+A Z
+A X
+C Y
+B Y
+A X
+A X
+A X
+C Y
+B X
+A Z
+A Y
+A Z
+A Z
+A X
+C Z
+A Z
+A Z
+C X
+A Z
+B Z
+B X
+A X
+C Z
+A X
+C Y
+A Z
+C Z
+C Y
+C X
+C Y
+A Z
+A X
+A Z
+A Z
+A Z
+B Z
+A Z
+C Z
+A Z
+C Z
+B Z
+C Z
+C Z
+A Z
+A Z
+B X
+A Z
+A X
+A Z
+A X
+A Y
+A Z
+B Z
+C X
+A Z
+A Z
+B X
+A X
+C X
+C Z
+A X
+A Z
+A X
+C Y
+C Z
+A Z
+C Y
+A X
+A Z
+A Z
+B Z
+C Y
+A Z
+A Z
+C Z
+A X
+C X
+A Z
+A Z
+A Y
+C Z
+C Z
+A Z
+A X
+B Z
+A X
+A X
+A X
+A X
+A Z
+A Z
+A X
+A X
+C Z
+C Y
+C Y
+C Y
+A Z
+C X
+B Z
+C Y
+C Z
+A X
+A X
+A Z
+C Z
+C Z
+A Y
+C Y
+B X
+C Y
+A X
+A X
+A Y
+A X
+A Z
+A Z
+A X
+A Z
+A Z
+A Z
+A X
+A Z
+B Z
+A X
+A X
+A X
+C Z
+C X
+A Z
+C Y
+C Z
+A X
+A Z
+A Z
+A X
+A Z
+A X
+B Z
+A Z
+A Z
+A Z
+C Y
+C Z
+B Z
+A Z
+B Z
+A X
+A X
+A X
+C Y
+A Z
+A Z
+A Z
+C X
+A X
+A X
+A Z
+A Z
+A Z
+A Z
+B Z
+A X
+A Z
+A X
+C Z
+A Z
+A Z
+A Z
+B Z
+A Y
+A Z
+C Z
+B Z
+C Y
+A Z
+A X
+C Y
+A X
+A X
+A Z
+A Z
+A X
+B Z
+B X
+C Z
+C Z
+A Y
+A Z
+A X
+A Z
+A Z
+A Z
+A Z
+A Z
+B Z
+A Z
+B X
+A Z
+A Z
+C Z
+B Z
+A Z
+C X
+B Z
+C X
+B Z
+A Z
+A Z
+A Z
+A Z
+A X
+B Z
+A X
+B Z
+C Y
+A Z
+A Z
+C X
+A X
+A Z
+A Y
+A Z
+C Y
+C X
+C Z
+A X
+A Z
+C Z
+A Z
+A X
+A Z
+B Z
+A X
+A Z
+B Z
+C Y
+A Z
+C Y
+A Z
+C Y
+B X
+C Y
+A Z
+B Z
+A X
+B Z
+B Z
+C X
+A Z
+C Z
+A Z
+C Z
+A Z
+C Z
+B Z
+C Y
+C Z
+A Z
+C Y
+A Z
+C X
+B Y
+B Y
+C X
+C Y
+A Z
+C Z
+A Z
+C X
+A Z
+A Z
+C Y
+A Z
+A Z
+C X
+A Y
+A X
+A X
+B Z
+A Z
+C Z
+A Z
+B Z
+C Y
+C Z
+A Z
+C Y
+B X
+C Z
+A X
+C X
+C Y
+C Y
+C Y
+A Z
+A Z
+B Y
+C Y
+A Z
+A X
+A Z
+A X
+A Z
+C X
+C Z
+A X
+C Z
+B X
+A X
+C Z
+A Z
+C X
+A Y
+A Z
+A X
+A Z
+C Z
+B Z
+B Z
+A Z
+C Y
+A Z
+C Z
+C Y
+C Z
+A Z
+A Z
+B X
+C X
+C Z
+A X
+A Z
+A Y
+C Y
+A X
+A Z
+C Y
+A Z
+B X
+A Z
+A Z
+A Z
+A Z
+C X
+A X
+A Z
+A Y
+A X
+B Y
+A X
+A X
+A X
+A X
+B Z
+A X
+C Y
+C X
+A X
+A Z
+A X
+A Z
+A Z
+A Z
+A Z
+A X
+A Z
+C X
+C Z
+C Z
+A X
+B Y
+A X
+C Y
+A X
+C Z
+A X
+A Z
+A Z
+A Z
+A Z
+C X
+A X
+C Y
+A Z
+A Z
+C Y
+A Z
+A X
+A Z
+A X
+A Z
+B Y
+C Y
+B Y
+C Y
+A Y
+A Z
+C X
+B X
+A X
+A Y
+C Z
+A X
+B Z
+A X
+A X
+A Y
+A X
+A Z
+A Z
+C Z
+C X
+A Z
+C Y
+A Z
+A Z
+C X
+A Y
+A Z
+A X
+A Z
+A Z
+C X
+A Z
+A Z
+A Z
+C Y
+A X
+A X
+A X
+C Z
+A Z
+C Y
+A X
+A X
+C Y
+C X
+C Y
+A Y
+C X
+A Z
+A Z
+A Y
+C X
+A Z
+A Z
+A Z
+C Y
+C X
+A Z
+B Z
+A Z
+A X
+C Y
+A X
+C Y
+C Y
+A X
+C Y
+A X
+C Y
+B Z
+A Z
+A X
+A Z
+A X
+A X
+A Z
+A X
+A X
+C Z
+A Z
+B Y
+C X
+B X
+B X
+A Z
+A Y
+B Y
+A Z
+A X
+A X
+C Y
+C X
+B Z
+A Z
+C Y
+C X
+C Y
+A Y
+A Z
+C X
+A X
+A X
+A Z
+A Z
+B Z
+C X
+A Z
+B Z
+A X
+B Y
+C X
+A X
+A Y
+C X
+A X
+C Y
+A Z
+A Z
+A X
+A X
+C Z
+C Z
+B Z
+A X
+B Z
+B Y
+A Z
+A Z
+C Y
+A Z
+B Y
+A Z
+A X
+C Z
+C Z
+A X
+A X
+A X
+A Z
+A Z
+C Y
+A X
+A X
+A Z
+A X
+C X
+A Z
+A X
+B Z
+B X
+A X
+A X
+A Z
+B Z
+A X
+A Z
+C Y
+C Y
+B Z
+C Z
+A X
+B X
+B X
+A Z
+A X
+A Z
+C Y
+A X
+A X
+B Y
+C Y
+A X
+A X
+C Y
+A Z
+A Z
+C Z
+A Z
+B Z
+A Y
+A Z
+C Y
+B Y
+A X
+C X
+A X
+C Z
+A Z
+A X
+A Z
+A Z
+A X
+B Z
+C Z
+A Z
+A X
+C X
+A X
+C Y
+B Z
+B X
+C Z
+C X
+A X
+A X
+A Z
+A X
+C Y
+B Z
+A Z
+C Z
+A Z
+A Z
+A X
+B X
+A X
+A Z
+A X
+A X
+A Z
+A Z
+A Y
+A Z
+C Z
+B Z
+A X
+A X
+A X
+A Z
+B Z
+A Z
+A Z
+C Z
+C Y
+C Y
+A Z
+A X
+A Z
+C Z
+A X
+A X
+A Z
+A Z
+C X
+B Y
+A X
+B Z
+B Z
+A Z
+A Z
+C Z
+C Z
+A X
+A X
+A Z
+C Z
+A Z
+C Z
+B X
+A X
+A Z
+A Z
+C Z
+A X
+A Z
+B Y
+B X
+A X
+C Y
+C X
+C Y
+B X
+A X
+C Y
+A Z
+B Y
+A Y
+A X
+C Y
+A Z
+A Z
+A Z
+A Z
+A Z
+C Z
+A Z
+A Z
+A Z
+C X
+B X
+C Z
+A X
+B X
+A X
+C Y
+A X
+C X
+A X
+A Z
+A Z
+B X
+A X
+A Z
+A X
+C Z
+A Z
+A Z
+A X
+C Z
+A Z
+C X
+A Z
+A Z
+A Z
+A Z
+B Z
+A X
+A X
+C Y
+A Z
+A Z
+B Z
+A X
+A Z
+A Y
+A Z
+C X
+B Z
+A Z
+A X
+B Y
+A Z
+A X
+C X
+C X
+A X
+A Z
+A X
+A Z
+B Z
+B Y
+A Y
+A Z
+C Y
+B Z
+A Z
+C X
+C Y
+C Z
+C X
+A X
+A Z
+A X
+A X
+A Z
+A X
+A X
+A X
+A Z
+C Z
+C Y
+A Z
+A X
+C X
+B Z
+C Z
+C Y
+C Y
+A Z
+A X
+A Z
+A Z
+A Z
+A X
+A Z
+A Z
+A X
+C Z
+A X
+A X
+A Z
+C X
+B Y
+A X
+C Z
+A X
+C X
+A Z
+A X
+A Y
+C Z
+A X
+A Z
+C X
+B X
+A Z
+A Z
+A X
+A X
+A Z
+C Y
+C Z
+A X
+A Z
+C Z
+C X
+A X
+A Z
+A X
+A X
+B X
+C Z
+B Z
+A Z
+A X
+A X
+B Y
+A Z
+A X
+A X
+A Z
+A Z
+A Z
+A X
+C Y
+A Z
+C Y
+A Z
+A Z
+A X
+C Z
+A Z
+B X
+A X
+C Z
+A X
+A Y
+B X
+C X
+A X
+A X
+A Z
+A X
+A X
+A X
+C Y
+A Y
+A Z
+B Z
+B Z
+B Z
+A Z
+A Z
+A Z
+A X
+B X
+C Y
+A X
+A Z
+C Z
+B Y
+A X
+A Z
+A Z
+A X
+A X
+B Z
+A X
+C Y
+A Z
+A X
+A X
+A Z
+A Z
+A Z
+A Z
+A Z
+A X
+A Z
+A X
+A X
+C Z
+A X
+C Z
+A Z
+C Y
+A X
+A Z
+C Z
+A Z
+A Z
+A X
+A X
+A Z
+A X
+A Z
+B Z
+A X
+A X
+C X
+A Z
+A X
+A Z
+C Y
+C Y
+C Y
+C Y
+C Z
+A Z
+B X
+C Z
+A X
+A Z
+C Y
+A X
+A Z
+B X
+A Z
+C X
+C Z
+C X
+C X
+A Z
+A Z
+B X
+A Z
+A Z
+A Z
+B Z
+A Z
+C Z
+A X
+A X
+A Z
+A X
+A Z
+C Z
+C Z
+A Z
+C Z
+C X
+A Z
+A X
+B Z
+A X
+B Y
+C X
+A X
+A Y
+A Z
+A Z
+A X
+A X
+A Z
+A X
+A Z
+A X
+A Z
+A X
+A Y
+A X
+C Z
+A Z
+A Z
+A X
+A X
+A Z
+A X
+C Y
+C Z
+A Z
+A Y
+A Z
+A X
+A Z
+C X
+B X
+A Z
+C Z
+B Y
+A Z
+A Z
+C Y
+A X
+A Z
+A Z
+C Z
+C Y
+A Z
+B Y
+A X
+C Y
+A X
+A X
+A Z
+C Z
+A Z
+A Z
+A X
+C Z
+A X
+C Y
+C Y
+A X
+B X
+C X
+A Y
+A X
+A Z
+B X
+A X
+B Z
+A Z
+A X
+C X
+A X
+B X
+A X
+A Z
+A X
+C Y
+A Z
+C Z
+C Y
+A X
+B X
+C Y
+C X
+A X
+A Z
+A X
+A Z
+A X
+A X
+A Z
+A Z
+A X
+A Z
+A Y
+A X
+A X
+A Y
+A Z
+A Z
+C Z
+A X
+A Z
+A X
+A X
+B X
+A X
+B Y
+C Y
+A Z
+B Z
+A Z
+B Y
+A Z
+C Y
+A Z
+A X
+A X
+A Z
+C X
+C Z
+B X
+A X
+A Z
+A X
+A Z
+A Z
+B X
+A Z
+A X
+C Z
+B Y
+C Y
+C X
+A X
+A Z
+A X
+C Y
+A Z
+C Z
+A X
+A X
+A X
+A Z
+A Z
+A Z
+B X
+C X
+A Y
+B Z
+A X
+A Z
+A Z
+C X
+C Y
+A X
+A Z
+C Y
+A X
+A Z
+A X
+A Z
+A X
+A X
+B Z
+A X
+C X
+A X
+A X
+A X
+A Z
+A Z
+A X
+A Z
+C Y
+C Z
+B Z
+B X
+A Z
+A X
+C X
+C Y
+A X
+B Z
+B Z
+A Z
+B Z
+C Y
+A X
+A X
+A X
+C Y
+A Z
+A X
+A Z
+A Z
+A Z
+A X
+A Z
+A X
+A Z
+C Y
+A X
+C X
+C Y
+C Y
+C X
+A X
+C Y
+A Z
+C Y
+B Z
+B Z
+C Z
+A X
+B X
+C X
+A Z
+A Y
+A Z
+B Z
+A Z
+B Z
+A X
+A X
+A Z
+A Z
+A Y
+A Z
+A X
+A Y
+A Z
+A Z
+A Z
+A Z
+B X
+A Z
+A Z
+A Z
+A Z
+C Y
+B Y
+C X
+A Z
+B Z
+B X
+A X
+C Z
+A Z
+C Z
+A Z
+A X
+A X
+A X
+A X
+A X
+A Z
+C Y
+A X
+C X
+A Y
+C X
+C X
+A X
+A Z
+A X
+C Z
+A X
+C Y
+B Z
+C Y
+C Z
+B X
+A Z
+C Y
+A Z
+C Y
+A X
+A X
+A X
+A Z
+A Z
+A Z
+A Z
+C Z
+C Y
+A X
+C Y
+B Y
+A X
+A X
+A Z
+C Y
+C Z
+A X
+A X
+A Z
+A Z
+A X
+A X
+A Z
diff --git a/02/src/part-1.rs b/02/src/part-1.rs
new file mode 100644
index 0000000..eff4724
--- /dev/null
+++ b/02/src/part-1.rs
@@ -0,0 +1,67 @@
+// TODO: This should of course all be table lookups instead of nested switches.
+
+use std::io::{BufRead};
+
+fn main() {
+ let stdin = std::io::stdin();
+ let handle = stdin.lock();
+
+ let mut score: usize = 0;
+
+ for l in handle.lines() {
+ let line = l.unwrap();
+ let mut chars = line.chars();
+ let opponent_move = chars.next().unwrap();
+ assert_eq!(chars.next().unwrap(), ' ');
+ let my_move = chars.next().unwrap();
+
+ score += match opponent_move {
+ 'A' => { // Opponent plays rock.
+ match my_move {
+ 'X' => { // We play rock.
+ 1 + 3
+ },
+ 'Y' => { // We play paper.
+ 2 + 6
+ },
+ 'Z' => { // We play scissors.
+ 3 + 0
+ },
+ _ => panic!("Unreachable")
+ }
+ },
+ 'B' => { // Opponent plays paper.
+ match my_move {
+ 'X' => { // We play rock.
+ 1 + 0
+ },
+ 'Y' => { // We play paper.
+ 2 + 3
+ },
+ 'Z' => { // We play scissors.
+ 3 + 6
+ },
+ _ => panic!("Unreachable")
+ }
+ },
+ 'C' => { // Opponent plays scissors.
+ match my_move {
+ 'X' => { // We play rock.
+ 1 + 6
+ },
+ 'Y' => { // We play paper.
+ 2 + 0
+ },
+ 'Z' => { // We play scissors.
+ 3 + 3
+ },
+ _ => panic!("Unreachable")
+ }
+ },
+ _ => panic!("Unreachable")
+ };
+ }
+
+ println!("Total score: {}", score);
+
+}
diff --git a/02/src/part-2.rs b/02/src/part-2.rs
new file mode 100644
index 0000000..2c6e146
--- /dev/null
+++ b/02/src/part-2.rs
@@ -0,0 +1,74 @@
+// TODO: This should of course all be table lookups instead of nested switches.
+
+use std::io::{BufRead};
+
+fn main() {
+ let stdin = std::io::stdin();
+ let handle = stdin.lock();
+
+ let rock: usize = 1;
+ let paper: usize = 2;
+ let scissors: usize = 3;
+ let lose: usize = 0;
+ let draw: usize = 3;
+ let win: usize = 6;
+
+ let mut score: usize = 0;
+
+ for l in handle.lines() {
+ let line = l.unwrap();
+ let mut chars = line.chars();
+ let opponent_move = chars.next().unwrap();
+ assert_eq!(chars.next().unwrap(), ' ');
+ let my_move = chars.next().unwrap();
+
+ score += match opponent_move {
+ 'A' => { // Opponent plays rock.
+ match my_move {
+ 'X' => { // We need to lose, play scissors.
+ lose + scissors
+ },
+ 'Y' => { // We need to draw, play rock.
+ draw + rock
+ },
+ 'Z' => { // We need to win, play paper
+ win + paper
+ },
+ _ => panic!("Unreachable")
+ }
+ },
+ 'B' => { // Opponent plays paper.
+ match my_move {
+ 'X' => { // We need to lose, play rock.
+ lose + rock
+ },
+ 'Y' => { // We need to draw, play paper.
+ draw + paper
+ },
+ 'Z' => { // We need to win, play scissors
+ win + scissors
+ },
+ _ => panic!("Unreachable")
+ }
+ },
+ 'C' => { // Opponent plays scissors.
+ match my_move {
+ 'X' => { // We need to lose, play paper.
+ lose + paper
+ },
+ 'Y' => { // We need to draw, play scissors.
+ draw + scissors
+ },
+ 'Z' => { // We need to win, play rock
+ win + rock
+ },
+ _ => panic!("Unreachable")
+ }
+ },
+ _ => panic!("Unreachable")
+ };
+ }
+
+ println!("Total score: {}", score);
+
+}
diff --git a/02/test.txt b/02/test.txt
new file mode 100644
index 0000000..db60e36
--- /dev/null
+++ b/02/test.txt
@@ -0,0 +1,3 @@
+A Y
+B X
+C Z