summaryrefslogtreecommitdiff
path: root/2022
diff options
context:
space:
mode:
Diffstat (limited to '2022')
-rw-r--r--2022/Cargo.toml2
-rw-r--r--2022/day2/Cargo.toml8
-rw-r--r--2022/day2/example.txt3
-rw-r--r--2022/day2/input.txt2500
-rw-r--r--2022/day2/src/lib.rs184
5 files changed, 2696 insertions, 1 deletions
diff --git a/2022/Cargo.toml b/2022/Cargo.toml
index 8cefc09..4aeef49 100644
--- a/2022/Cargo.toml
+++ b/2022/Cargo.toml
@@ -1,2 +1,2 @@
[workspace]
-members = ["day1"]
+members = ["day1", "day2"]
diff --git a/2022/day2/Cargo.toml b/2022/day2/Cargo.toml
new file mode 100644
index 0000000..8aa34bb
--- /dev/null
+++ b/2022/day2/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "day2"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2022/day2/example.txt b/2022/day2/example.txt
new file mode 100644
index 0000000..db60e36
--- /dev/null
+++ b/2022/day2/example.txt
@@ -0,0 +1,3 @@
+A Y
+B X
+C Z
diff --git a/2022/day2/input.txt b/2022/day2/input.txt
new file mode 100644
index 0000000..90f6f1b
--- /dev/null
+++ b/2022/day2/input.txt
@@ -0,0 +1,2500 @@
+A Y
+A Y
+B X
+A Y
+C Y
+B Y
+B Z
+B Y
+A X
+B X
+C Z
+B Y
+B Y
+B Y
+B Y
+C X
+A Z
+B X
+A Y
+A Y
+B Y
+A X
+C X
+B Y
+A Y
+B Y
+C X
+A Z
+B Y
+A X
+A Y
+B Y
+A Y
+A X
+B Y
+B Y
+B Y
+B X
+A X
+C Y
+A X
+C Z
+B Z
+A Z
+A Z
+C X
+A X
+A X
+B Y
+B Y
+C Y
+B Y
+B X
+B Y
+B Y
+B X
+C X
+A X
+A X
+A Z
+C X
+A Z
+A X
+B Y
+B Y
+A Y
+A Z
+B Y
+B X
+B Y
+B Y
+B X
+C Z
+A X
+B X
+B X
+A Y
+B X
+C Z
+B Y
+A X
+C Z
+A Y
+B Y
+B Y
+A X
+A Z
+B Y
+B Y
+A Z
+A Z
+B Y
+A X
+A Z
+C Y
+A X
+B Y
+C X
+A X
+B Y
+A X
+A Z
+C X
+A Y
+A X
+B X
+A X
+B Z
+B X
+B Y
+A X
+A Y
+B Y
+B Z
+C X
+B X
+A X
+C Z
+C Y
+A Y
+B Y
+A X
+B Y
+C Y
+B Y
+C Y
+B Y
+C Z
+C X
+A Y
+B Y
+B X
+A X
+A X
+A Y
+A Y
+B Y
+A Z
+B Y
+A X
+C X
+B Y
+B X
+C X
+A Y
+B Z
+B Y
+B X
+B Y
+B Y
+C Z
+B X
+B Z
+A X
+B Y
+A X
+B Y
+C Z
+A X
+A Y
+B Z
+A X
+B X
+A Z
+B Y
+A Y
+A X
+B Y
+C Z
+B X
+B Y
+C X
+B X
+A X
+C X
+B X
+B Y
+B Z
+B Y
+B Y
+A X
+B Y
+A X
+A X
+B X
+A X
+A X
+B Y
+B Y
+B Y
+C X
+B Y
+A Z
+A X
+B Y
+A Y
+A Z
+B Y
+A Z
+C X
+B Y
+C X
+B Y
+B Y
+A X
+B Y
+A X
+B Y
+B X
+B Y
+B Y
+B Z
+B Y
+A Y
+A X
+A X
+A X
+C Z
+A Y
+A X
+C Y
+A X
+B Z
+B Y
+B Y
+B Y
+A Z
+B Y
+B X
+A Z
+B Y
+A Y
+B Y
+A Z
+B Y
+A X
+B Z
+A Z
+C X
+B Y
+B Y
+B Y
+B X
+A X
+B X
+A Y
+B X
+B Y
+B Y
+A X
+B Y
+B Z
+B Y
+B Y
+B X
+B X
+C Z
+A Y
+B Y
+B Y
+B Y
+B X
+A X
+B X
+A Y
+A Z
+A Z
+A Z
+A X
+A Y
+B Y
+C Y
+A Z
+A Z
+A Z
+C X
+A X
+C X
+A Z
+B X
+A Y
+B Y
+A Z
+B Y
+B X
+C Y
+A Z
+A X
+C X
+C X
+C X
+B Y
+A X
+A Y
+C X
+B Y
+C Z
+B Y
+B Y
+A Y
+B Y
+A Y
+B Y
+B Y
+B X
+A X
+A X
+A Z
+A Y
+B X
+B Y
+A Z
+C X
+A Y
+A X
+B Y
+B Y
+B X
+A Z
+B Y
+A X
+A X
+B Y
+A X
+C X
+A Z
+A Z
+B Y
+A Z
+A Y
+A Y
+A Y
+B Y
+A Y
+A Z
+A Y
+A X
+A Z
+B Y
+B Y
+C X
+B X
+C Z
+B X
+A Z
+C Y
+B Y
+A X
+B Y
+A Y
+A X
+B Y
+B X
+C Z
+A Z
+A Z
+B Y
+A Z
+B Y
+B Y
+A X
+A X
+A X
+B Z
+A Y
+B Z
+A Y
+C Y
+A X
+B X
+A Y
+B X
+B Y
+A X
+A Y
+A X
+C X
+C Z
+B Y
+A Y
+B Y
+B Z
+A X
+B Y
+C Y
+A Y
+A Z
+B Y
+A X
+A Z
+A Y
+B Y
+B Y
+A Z
+C Z
+B X
+A Y
+C Y
+A X
+A X
+A X
+B Y
+C Z
+A X
+A X
+B X
+A X
+A X
+A Y
+A X
+C X
+A X
+A Y
+B Z
+A X
+C X
+A X
+B X
+A Y
+A X
+A X
+A X
+C Z
+A X
+A X
+B X
+B Y
+A Y
+A X
+A Z
+A Y
+A Y
+A Y
+A Z
+B X
+A X
+A X
+A X
+A Z
+B Y
+A X
+A Y
+B X
+C X
+B Y
+A Z
+A Z
+A Z
+B Z
+B Y
+A Z
+A Z
+A X
+A Y
+A X
+A X
+A X
+A Y
+A Z
+B Y
+A Z
+B X
+B X
+A Y
+A X
+B X
+B X
+C Z
+B X
+A X
+A Z
+C X
+A X
+A X
+B Z
+A X
+B X
+A X
+A X
+A X
+B Z
+A Z
+A Y
+A Z
+B Y
+A X
+A Y
+A Y
+B X
+C Z
+A X
+A X
+A X
+B Y
+B Y
+A X
+A X
+B Y
+A X
+B X
+A Y
+C X
+B X
+B Y
+C Z
+B Y
+A X
+C Z
+B Z
+B Y
+A Z
+B X
+B Y
+B X
+B Y
+B Y
+B Y
+B X
+B Y
+A X
+B Z
+B Y
+C X
+B Y
+C X
+A Z
+B X
+A Z
+A X
+A Z
+A Y
+A X
+A Z
+B Y
+B X
+B X
+B Y
+B X
+B X
+B Z
+B Z
+B Y
+A X
+C X
+B Y
+B X
+B X
+C X
+B X
+B X
+B Y
+A Z
+A Z
+B Y
+C Y
+A Z
+B Y
+B Z
+A Z
+C Y
+C X
+A X
+B Y
+A Y
+B X
+B Y
+B Z
+A Y
+A Z
+A X
+A X
+C X
+B Z
+A Y
+A Z
+B Y
+A Y
+A Z
+B Y
+A Z
+C Z
+B Y
+A X
+A Z
+B Y
+B Y
+A Y
+A X
+C Z
+B Y
+B X
+A X
+C Z
+B Y
+B Y
+B Z
+B Y
+A Y
+B Y
+A Z
+C Z
+B Y
+B X
+B Z
+B X
+A X
+A Y
+A Z
+A Z
+A X
+A X
+B Y
+B X
+A Z
+A X
+B Y
+B Y
+B X
+A Y
+B Y
+C Y
+B Y
+A X
+B Y
+B X
+B Z
+A X
+B Y
+B Y
+A X
+A X
+A X
+C X
+B X
+A Z
+B X
+C X
+B Y
+A Y
+B Y
+C X
+B Y
+B Y
+B X
+A X
+A X
+A X
+A X
+B Y
+B Y
+B Z
+A Z
+A Z
+A Z
+A Y
+B X
+A Y
+B Y
+C Z
+C X
+B Y
+B Y
+B Y
+B Y
+A X
+A X
+A Z
+C Y
+B X
+A Y
+B Y
+B Y
+C Z
+B X
+A X
+A X
+A Z
+C X
+B Y
+B X
+C Z
+B X
+A Y
+B X
+B X
+B Z
+C X
+A Z
+B Y
+B X
+B Y
+B Y
+A X
+B Y
+A X
+A X
+A Y
+A Z
+B Z
+B Y
+A Y
+A Y
+C Z
+A Y
+A X
+B Y
+B Y
+C Z
+B Y
+A X
+B X
+A X
+B Y
+A X
+A Z
+B Z
+B Y
+A X
+C X
+A X
+A X
+B Y
+A Y
+A X
+A Z
+B Y
+C Z
+C X
+A X
+B X
+B X
+B Y
+B X
+B Y
+B Y
+A Z
+A Y
+A Z
+A X
+B Y
+B X
+B Y
+C X
+B Z
+B X
+C X
+B Y
+A X
+A Y
+A Y
+B X
+A X
+B Y
+B X
+A X
+B X
+B Y
+C Y
+A Z
+C Z
+B X
+B X
+B Y
+A Z
+C Y
+B X
+A Z
+B Y
+A Y
+A Z
+B Y
+A X
+A Y
+C Z
+B Y
+A X
+B Y
+B X
+A Y
+B Y
+C X
+A Y
+B Y
+B Y
+A X
+C Z
+B Y
+B X
+A X
+B X
+B Y
+A X
+B Y
+B Y
+B Z
+A X
+C Z
+A Y
+B X
+A X
+C X
+B Z
+B Y
+A Z
+B X
+A Z
+B Y
+C Z
+A X
+B Y
+B X
+B Y
+A X
+B Y
+A X
+A Y
+A Y
+A X
+B Y
+A X
+B Y
+A X
+A Y
+A Y
+C X
+B X
+B Y
+A Z
+B X
+A X
+B Y
+A Y
+B X
+B Y
+A Z
+B X
+B X
+A Y
+B Y
+A Z
+B X
+B Y
+A Y
+A X
+A X
+B X
+C Z
+A Y
+B Y
+A Z
+A Z
+A Z
+B Y
+A Y
+A X
+A Z
+B X
+B Y
+C Y
+A X
+A X
+C X
+A Z
+B X
+B Y
+B X
+B Y
+B Y
+B Y
+A X
+B Z
+B Z
+B Z
+B Y
+A X
+A X
+B Y
+A Z
+B Y
+C Y
+B X
+B X
+B X
+B Y
+B Y
+A Y
+A X
+B X
+A X
+A Z
+A Y
+C Y
+B Y
+B Z
+B Z
+A Y
+B Y
+A Z
+B X
+B Y
+B Y
+B X
+B X
+B Y
+A X
+C Z
+B Y
+A X
+A X
+A Y
+B X
+B Y
+A Z
+A Y
+B Y
+A Y
+A X
+A Z
+A Y
+A X
+A X
+A Y
+B X
+A X
+B Y
+B Y
+B X
+B Y
+B Y
+B Y
+A Y
+B X
+A X
+C Y
+A Y
+B Y
+C X
+C X
+B Y
+B Z
+A Z
+A Y
+B Y
+B Y
+A Y
+B Z
+A Z
+A X
+B Y
+A X
+C Z
+B Y
+B Y
+A Z
+A Y
+B Y
+A Z
+B Y
+A Z
+A Y
+A Z
+C Y
+A Z
+A X
+A X
+A Z
+A X
+B Y
+A Z
+B X
+A Y
+B Y
+A Z
+B X
+B Z
+B X
+A Y
+A Y
+B Y
+A Z
+A X
+B X
+A Z
+A X
+B Y
+B X
+C X
+A Z
+C X
+C X
+B Z
+A X
+B Y
+A Y
+A Y
+A Z
+B Y
+C X
+A Z
+A X
+A Y
+A Z
+A X
+A Y
+A Y
+A X
+C X
+B Y
+B Y
+B Y
+A Z
+B Y
+A Z
+B Y
+C X
+B Y
+A X
+B X
+B Y
+C X
+A Z
+B Y
+B Y
+B Y
+A X
+C Z
+A Z
+B Z
+A X
+A X
+A X
+A X
+B Z
+A Y
+B X
+B Z
+A X
+B X
+A Y
+A Y
+C Z
+B Y
+B Y
+A X
+C Y
+B X
+B Y
+A Y
+C Z
+A X
+B X
+A Z
+C Z
+C Z
+B X
+A Z
+A X
+B Z
+A Z
+B Y
+B X
+B Y
+A Z
+A Y
+B Y
+B Z
+A X
+B Z
+A Z
+A Y
+C Y
+A X
+B Y
+C Y
+A Z
+A Z
+B X
+B X
+C X
+A Y
+B X
+B X
+B Y
+A Y
+C Z
+A Z
+A Y
+B X
+B Y
+B Y
+A X
+C X
+B X
+A X
+A Z
+B Y
+B Y
+A X
+A Y
+B Y
+C Z
+A X
+A X
+B Y
+A Y
+A X
+C Z
+B X
+C Y
+A X
+A X
+A Y
+B X
+B Y
+A X
+B Y
+A Y
+B Y
+B Y
+B Y
+B X
+C X
+A Z
+A Z
+A X
+C Y
+A Y
+C X
+A Z
+A X
+A X
+B Y
+A X
+A X
+B X
+B Y
+A Y
+B Y
+A X
+B X
+B Y
+B Y
+B X
+C X
+A Z
+B Y
+A Y
+A Z
+B Y
+B Y
+B Z
+B Z
+A X
+B Y
+A Y
+A Z
+A Y
+A X
+A Z
+B X
+A X
+B X
+A Y
+C X
+C X
+A X
+B X
+A X
+C X
+A X
+A Z
+A Y
+B Y
+C X
+A Y
+A Y
+B Y
+B X
+B Y
+B Y
+A Z
+A Y
+A Z
+C X
+B Y
+B Y
+A X
+A X
+B Y
+A X
+B Z
+B X
+B Y
+A X
+A Z
+B Y
+A Y
+B Y
+A X
+C Z
+A Z
+A Y
+B Y
+B Y
+B Y
+B X
+A Z
+A Y
+A X
+B X
+A Y
+B Y
+A Y
+B Y
+A Z
+A Z
+B Y
+B X
+B Y
+A Y
+C Y
+B Z
+B Y
+A Y
+C X
+A Y
+B Y
+B Y
+B Y
+B Y
+A X
+B X
+A Z
+B Y
+A Y
+B Z
+C X
+B Y
+A X
+B X
+B Y
+B Y
+A Y
+A X
+A Y
+C X
+B Y
+A Y
+A X
+B Y
+C X
+A Y
+B X
+C Z
+B Y
+B Y
+C Z
+A X
+A X
+A X
+A X
+B Y
+A Z
+A Z
+B X
+A Z
+A Z
+A X
+C Y
+A Z
+B Y
+B Y
+A Z
+A Z
+C Z
+B Y
+B X
+C Z
+C Z
+B Y
+B X
+A Z
+B X
+C Z
+C X
+B Z
+A Y
+C Z
+B Y
+B Y
+A Z
+B Y
+C X
+C Y
+B Y
+C X
+A X
+A X
+B Z
+A Y
+B Z
+B Y
+A X
+B Z
+A X
+C X
+B Y
+A Y
+A X
+A X
+B X
+A X
+A Y
+A Y
+B Y
+B Z
+B Y
+A X
+A Z
+B Y
+A Y
+B Y
+C Y
+A X
+B X
+A X
+B Y
+A X
+A X
+B X
+B Y
+A Z
+A Y
+A X
+C X
+B X
+C X
+B Y
+A X
+B Y
+A Z
+A Z
+C X
+A Z
+B Y
+A Y
+B Y
+C X
+B Y
+B Z
+A X
+B Y
+B X
+A Z
+B Z
+B Y
+A X
+A Y
+A Z
+A Y
+B Z
+A X
+A Y
+A Z
+A Y
+C X
+B Y
+C Z
+B Y
+B Z
+B X
+B Y
+A Z
+C X
+C Z
+A Y
+A Z
+B Y
+B X
+B Y
+B X
+B X
+A Y
+A X
+B X
+B Y
+A X
+A X
+B X
+B Y
+C X
+A Y
+C Y
+A Z
+C X
+A Y
+A Z
+A Y
+A X
+A Z
+B Y
+C X
+B Y
+A Z
+A Y
+B Y
+B Y
+B X
+B Y
+C Z
+A X
+B X
+A X
+A X
+A X
+B Y
+A X
+B Z
+B X
+B Y
+B Y
+A X
+B Z
+A X
+A Y
+B Y
+A X
+B X
+B Y
+B X
+A Z
+A X
+B Y
+C X
+B Y
+A Z
+B X
+B Y
+A Y
+B X
+A X
+A X
+A Y
+A Y
+B X
+B Y
+B Y
+A X
+A Y
+B Y
+A X
+A X
+A X
+B X
+B Y
+A Y
+A X
+B Y
+A X
+B X
+B Y
+B Y
+A Z
+B X
+B Y
+B Z
+A X
+B X
+A Z
+A X
+A Y
+A X
+B Y
+B Y
+A X
+B Z
+A X
+B Y
+B Z
+A Y
+A Y
+A Z
+A Y
+B Y
+A Y
+B Y
+A X
+C Z
+A Y
+B X
+B X
+A Y
+A X
+B Y
+C X
+B X
+B Z
+A Y
+A Y
+C X
+A X
+B X
+A X
+A X
+A Y
+C X
+A X
+B Z
+C Z
+B X
+B Y
+A Z
+C X
+A X
+B Y
+B Y
+A Y
+B Z
+B Y
+B Y
+A X
+A X
+C Z
+B Y
+B Y
+B Y
+A Z
+A Z
+B X
+A X
+B Y
+A X
+B Z
+A X
+B Y
+B X
+B Y
+B Y
+B Y
+B Y
+B Z
+B Y
+A Z
+A X
+C X
+B Y
+B Y
+A X
+B Y
+B Y
+A Z
+A Z
+A Z
+A Z
+A X
+A Z
+B X
+B Y
+B X
+C Y
+A Y
+C X
+B X
+C X
+A Z
+B Y
+B Y
+A Y
+B X
+B Y
+A Y
+A X
+A X
+B Y
+B X
+A Y
+B Y
+B Y
+C Z
+C X
+B X
+B Y
+A Y
+A Z
+B Y
+A X
+C Z
+B Y
+A Y
+B Y
+B Z
+A X
+A Z
+A Y
+A X
+A Z
+B Z
+A Z
+B Y
+A Y
+A X
+A Z
+B Y
+B Y
+B Y
+B Y
+B Y
+A Z
+B Y
+C X
+B Y
+A Y
+B X
+B X
+B Y
+B Y
+C X
+C X
+B Y
+A Y
+B Y
+B Y
+B X
+A Z
+B Y
+B Y
+B Y
+A X
+B Y
+A Z
+B Y
+A X
+B Y
+B Y
+A Z
+B Y
+A Z
+C Z
+B X
+B Y
+A Y
+C Z
+B Y
+B X
+B Y
+A Z
+A Z
+B Y
+C X
+B Y
+A Y
+B Z
+B Y
+B Y
+B X
+A Z
+A X
+B Y
+A X
+A X
+B X
+B Y
+A Z
+B Y
+C Z
+A Z
+A X
+C Z
+B Y
+B X
+C X
+A X
+A Z
+A X
+B Y
+B Y
+B X
+A Z
+B Y
+B Y
+C Z
+A X
+B Y
+B Y
+B X
+B Y
+B Y
+C X
+B Z
+B Y
+A X
+B X
+B X
+B Y
+A X
+A Z
+B Y
+A X
+A Z
+A X
+B Y
+C Z
+C X
+C Z
+A Z
+B X
+B Y
+A X
+B Z
+A Y
+A Z
+A Z
+A Z
+A X
+C Y
+A X
+B X
+A Y
+C Z
+A X
+B Y
+B Y
+A X
+A Z
+B Y
+A Z
+A X
+A Z
+B Y
+A Y
+B Y
+A Y
+C Y
+B X
+A Y
+B Y
+A X
+B X
+B Y
+A Y
+B Y
+C Y
+C X
+B Y
+B Y
+B Z
+B X
+A Y
+B Y
+B Y
+A X
+C Y
+C X
+A X
+B Y
+B Y
+B X
+A X
+B X
+B Y
+B Y
+C X
+B Y
+B X
+B X
+A X
+A X
+B Y
+B Y
+B Y
+B Y
+B Y
+C Z
+A Y
+B Y
+C Z
+B Y
+C X
+B Z
+B Y
+A X
+A Z
+B Y
+A Y
+A X
+B Y
+B Z
+A X
+C Y
+B Y
+B Y
+A Z
+A Y
+B X
+B Y
+B Y
+B Y
+A Y
+C Y
+B X
+B Y
+B Y
+B Y
+B Y
+B Y
+A Y
+B Y
+A Z
+B X
+A Y
+B X
+B Y
+B Y
+A Z
+B Z
+B Y
+C Y
+A X
+A Z
+A X
+B Y
+C X
+C Z
+C Z
+B Y
+B Y
+B Y
+A Y
+B X
+B Y
+C X
+B Y
+A Y
+A Z
+A X
+A X
+A Z
+B Y
+A Z
+A X
+B X
+B Y
+B Y
+B Y
+A Y
+B Y
+A Y
+A Z
+C Y
+B X
+C X
+C X
+A Y
+B Y
+A X
+A X
+A Y
+A X
+B Y
+B Y
+C X
+B Y
+C X
+C X
+C X
+B Y
+B X
+B Z
+A Y
+C X
+A Y
+B Y
+A Z
+A Z
+C Z
+C X
+A X
+A X
+A Z
+B Y
+C Z
+B X
+B Y
+B Y
+B Y
+A Z
+B Y
+B X
+B Y
+B Y
+A Z
+A Z
+B X
+A X
+B Z
+A X
+B Y
+A Z
+B Y
+A Y
+A X
+B Y
+B Y
+C X
+A X
+B Y
+C Y
+B Y
+B Y
+A Y
+A X
+B X
+B X
+B Z
+C X
+B Y
+B Y
+C Y
+B Y
+A Y
+B X
+B Y
+B X
+A X
+C X
+C X
+A X
+A Y
+A Y
+B Y
+A X
+A X
+B Y
+A X
+B Z
+C X
+B Y
+A X
+B Y
+B Y
+A Y
+B Y
+B Y
+A X
+B Z
+B Y
+B Y
+A Z
+B Z
+B Z
+B X
+B Y
+A Y
+A Y
+A X
+B Y
+A Y
+B Y
+A Z
+B Y
+A X
+C Z
+C Z
+C X
+B Y
+B Z
+B Z
+C Z
+B Z
+B Y
+C X
+A Y
+B Y
+B Y
+A X
+C Z
+A Y
+A X
+A Y
+C X
+A X
+B X
+C X
+A Z
+B Y
+A X
+A X
+B Y
+B Y
+A X
+B Y
+A Z
+A X
+C X
+B Y
+C Z
+B X
+B Y
+C Z
+A X
+B Z
+A Y
+A Y
+B Y
+C X
+C Z
+A X
+A X
+A Y
+A Y
+A Y
+B Y
+A X
+A X
+B Z
+C Y
+A Y
+B Y
+B Y
+B Y
+A X
+A X
+C Z
+B Y
+B Y
+A X
+B Y
+B Y
+A Y
+A X
+A Z
+A Z
+A Z
+B X
+A X
+B Y
+C Y
+B Y
+C Y
+B X
+A Y
+C Z
+A Y
+B Y
+A X
+C X
+A X
+B Y
+C X
+A X
+A X
+B X
+A Z
+B X
+C Z
+A X
+B X
+A Y
+C Y
+C X
+A X
+A Y
+A X
+A X
+B Y
+A Z
+A X
+A Z
+A Y
+B Y
+A Y
+A X
+B Y
+A Y
+A X
+A X
+B X
+B Z
+B Y
+B X
+C X
+A Z
+C X
+B Y
+A Y
+B X
+A Z
+B Y
+A Y
+B Y
+C X
+B Y
+B Y
+C Z
+B Z
+B Y
+A Z
+A Y
+B X
+A X
+A Z
+A X
+A Y
+B X
+A Z
+A Y
+A X
+A X
+B X
+B Y
+A X
+C X
+C Z
+B Y
+C X
+B Y
+A X
+A X
+B X
+A X
+A Z
+B X
+B Y
+C X
+B Y
+B Y
+A Z
+A Y
+A X
+B X
+A Z
+A Y
+C Z
+A X
+A X
+A Z
+C X
+B Y
+A Z
+A Y
+B Y
+A Y
+B X
+B Y
+C Y
+B Y
+C X
+B Y
+B Y
+B Y
+B X
+C X
+A X
+B Y
+B X
+B X
+B Y
+A Z
+B Y
+A X
+A X
+A X
+A X
+C Y
+A Z
+A Y
+C X
+B X
+A X
+B Y
+C X
+C Z
+B Y
+A Z
+B Z
+B Y
+B Y
+A Y
+B X
+B Y
+C X
+B Y
+A Y
+B Z
+A Z
+A X
+A X
+A Y
+C X
+B Y
+A Y
+B X
+B X
+B Y
+B Y
+A Z
+A Y
+A Z
+B Y
+A Y
+A X
+B Y
+C X
+A X
+B Y
+A Y
+A X
+B Y
+B Y
+C Y
+A X
+A Z
+A Y
+B Y
+B X
+B X
+B Y
+A X
+B Y
+B X
+A Y
+B X
+B Y
+B Y
+B Y
+A Z
+B Y
+B Z
+C X
+A Z
+B Y
+B Y
+C Y
+A Y
+B X
+B Z
+B X
+A Z
+B Y
+B X
+A Y
+B X
+B Z
+A Z
+C X
+B X
+B X
+B Z
+B Y
+B Y
+A Y
+A Y
+A Y
+A Y
+B Y
+B Z
+C X
+A X
+B Y
+B X
+A Y
+C Z
+B Y
+A X
+A Z
+C X
+A Z
+A Z
+C Y
+B Y
+A X
+A X
+C X
+A Z
+B Y
+B Y
+B Z
+B Y
+A X
+C X
+A X
+A Z
+A X
+A X
+A Y
+C X
+A Z
+A X
+C Y
+A Y
+C X
+B Y
+B Y
+A X
+B Y
+A X
+B Y
+C X
+B X
+A X
+A Z
+A X
+B Y
+A Y
+B Y
+C X
+B X
+C Z
+B Y
+B Y
+B Y
+A X
+B Y
+A Y
+A Z
+C Z
+A Y
+B Y
+C Y
+C Z
+A X
+A Y
+B Y
+A Y
+B X
+C X
+C Z
+B X
+A Z
+A Z
+B Y
+A Y
+A Z
+B Z
+C X
+A Z
+C X
+B X
+B Y
+A Y
+B X
+A Z
+A Y
+A X
+A X
+B Y
+A Y
+C X
+B Y
+A X
+B Z
+B X
+B Y
+A Y
+B Y
+B X
+A Z
+A X
+A X
+B Y
+A Z
+B X
+A Y
+C Z
+A Y
+A X
+B Y
+B X
+A Z
+C Z
+B X
+A Z
+A Y
+A Z
+B Y
+B Y
+C X
+B Y
+A Y
+A Y
+A Y
+A X
+B Y
+B Y
+A Z
+A X
+B X
+A X
+B Y
+B Y
+A Y
+A Y
+A X
+B Y
+B Y
+B Y
+C Z
+B Y
+A X
+C X
+A X
+C X
+B X
+A X
+A X
+B Y
+B Y
+A X
+B Y
+B Y
+A X
+A Z
+A Y
+B Y
+A X
+C Y
+C X
+B Y
+B X
+B Y
+B Z
+B Y
+A Y
+B Y
+A Z
+C Z
+A Y
+A Y
+B Y
+B Y
+A X
+B Y
+B Y
+A Y
+B Y
+B Y
+A X
+A Z
+A Z
+A Y
+B Y
+A X
+A Z
+B Y
+A X
+B X
+C Y
+A X
+A Y
+B X
+A X
+A Y
+A Z
+C X
+A X
+A X
+B Y
+B Y
+B Y
+A X
+A Z
+A X
+B Y
+B Y
+C Y
+C Z
+B Y
+B Y
+B Y
+C X
+B Y
+A Z
+A X
+B X
+B Y
+C Z
+A Z
+A Z
+B Y
+A Z
+A X
+A Z
+B Y
+A X
+C X
+B X
+A Y
+B Y
+C Y
+A X
+A X
+B Y
+A Z
+A X
+A X
+A Y
+A Y
+A Y
+B Y
+A Y
diff --git a/2022/day2/src/lib.rs b/2022/day2/src/lib.rs
new file mode 100644
index 0000000..435c8f7
--- /dev/null
+++ b/2022/day2/src/lib.rs
@@ -0,0 +1,184 @@
+enum Player {
+ Rock,
+ Paper,
+ Scissor,
+}
+
+impl Player {
+ fn from_str(c: char) -> Self {
+ match c {
+ 'A' | 'X' => Player::Rock,
+ 'B' | 'Y' => Player::Paper,
+ 'C' | 'Z' => Player::Scissor,
+ _ => panic!("Not valid player!"),
+ }
+ }
+}
+
+struct Play {
+ l: Player,
+ r: Player,
+}
+
+impl Play {
+ fn new(input: &str) -> Self {
+ assert_eq!(input.len(), 3);
+
+ Self {
+ l: Player::from_str(input.chars().nth(0).unwrap()),
+ r: Player::from_str(input.chars().nth(2).unwrap()),
+ }
+ }
+
+ fn points(&self) -> u32 {
+ let mut tot: u32 = 0;
+
+ match self.r {
+ Player::Rock => {
+ tot += 1;
+
+ tot += match self.l {
+ Player::Rock => 3,
+ Player::Scissor => 6,
+ _ => 0,
+ };
+ }
+ Player::Paper => {
+ tot += 2;
+
+ tot += match self.l {
+ Player::Paper => 3,
+ Player::Rock => 6,
+ _ => 0,
+ };
+ }
+ Player::Scissor => {
+ tot += 3;
+
+ tot += match self.l {
+ Player::Scissor => 3,
+ Player::Paper => 6,
+ _ => 0,
+ };
+ }
+ }
+
+ tot
+ }
+
+ fn calc_secret_points(&mut self) {
+ match self.r {
+ // Means "Lose"
+ Player::Rock => {
+ match self.l {
+ Player::Rock => {
+ self.r = Player::Scissor;
+ }
+ Player::Scissor => {
+ self.r = Player::Paper;
+ }
+ _ => {}
+ };
+ }
+ // Means "Draw"
+ Player::Paper => {
+ match self.l {
+ Player::Scissor => {
+ self.r = Player::Scissor;
+ }
+ Player::Rock => {
+ self.r = Player::Rock;
+ }
+ _ => {}
+ };
+ }
+ // Means "Win"
+ Player::Scissor => {
+ match self.l {
+ Player::Scissor => {
+ self.r = Player::Rock;
+ }
+ Player::Rock => {
+ self.r = Player::Paper;
+ }
+ _ => {}
+ };
+ }
+ };
+ }
+}
+
+fn get_plays(input: &str) -> Vec<Play> {
+ input
+ .trim()
+ .split('\n')
+ .collect::<Vec<&str>>()
+ .into_iter()
+ .map(|x| Play::new(x))
+ .collect::<Vec<Play>>()
+}
+
+pub fn part1(input: &str) -> u32 {
+ let mut tot: u32 = 0;
+ let rows = get_plays(input);
+
+ for row in rows {
+ tot += row.points();
+ }
+
+ tot
+}
+
+pub fn part2(input: &str) -> u32 {
+ let mut tot: u32 = 0;
+
+ let mut rows = get_plays(input);
+
+ for row in &mut rows {
+ row.calc_secret_points();
+ tot += row.points();
+ }
+
+ tot
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_example() {
+ let data = include_str!("../example.txt");
+
+ let result = part1(data);
+
+ assert_eq!(result, 15);
+ }
+
+ #[test]
+ fn test_input() {
+ let data = include_str!("../input.txt");
+
+ let result = part1(data);
+
+ assert_eq!(result, 11906);
+ }
+
+ #[test]
+ fn test_example_part2() {
+ let data = include_str!("../example.txt");
+
+ let result = part2(data);
+
+ assert_eq!(result, 12);
+ }
+
+ #[test]
+ fn test_input_part2() {
+ let data = include_str!("../input.txt");
+
+ let result = part2(data);
+
+ assert_eq!(result, 11186);
+ }
+}