summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Segundo2022-12-02 09:20:45 +0100
committerChristian Segundo2022-12-02 09:57:49 +0100
commit6990eb44ae6111ac18667e416dc4dc2883c50f25 (patch)
tree61798deb9ee52c47215ebe9addb7ad225316e28a
parent77623e0a5bdbfb271bc02f26cf2b377ec16b55ec (diff)
downloadadvent-of-zig-2022-6990eb44ae6111ac18667e416dc4dc2883c50f25.tar.gz
add day 2
-rw-r--r--day-2/input2500
-rw-r--r--day-2/main.zig68
-rw-r--r--day-2/main_1.zig68
-rw-r--r--day-2/util/file.zig15
-rw-r--r--day-2/util/mem.zig17
5 files changed, 2668 insertions, 0 deletions
diff --git a/day-2/input b/day-2/input
new file mode 100644
index 0000000..e49a6c4
--- /dev/null
+++ b/day-2/input
@@ -0,0 +1,2500 @@
+A Z
+A Z
+C Y
+A X
+A X
+A Z
+C X
+A X
+C Y
+A Z
+B Y
+B Y
+C X
+C Y
+C X
+B Y
+A Y
+C Y
+B Y
+B Z
+B Y
+C X
+A Z
+C Y
+B Y
+B Y
+A Z
+B Y
+B Y
+B Y
+B Z
+B Y
+A Z
+B Y
+C Y
+B Y
+B Z
+C X
+B Z
+A X
+B Y
+B Z
+C Y
+A Z
+C Y
+A Z
+B Y
+C Y
+A Z
+A Z
+B Y
+C Y
+C X
+A Z
+B Z
+A Z
+B Y
+C X
+B Y
+B Y
+B Y
+A Y
+B Z
+C Y
+C X
+A Z
+B Y
+B Y
+B X
+A Z
+C X
+B Y
+B Y
+A Z
+A Z
+A X
+A X
+B Y
+C X
+A X
+A Z
+A Z
+B Y
+C Y
+B Z
+A X
+B Z
+A Z
+B Y
+A Z
+C Y
+A Z
+A X
+B Y
+C Y
+B Y
+A X
+B Z
+C Y
+B Y
+B Y
+A Z
+A X
+A X
+B Y
+C Y
+B X
+B Z
+C X
+B Y
+A Y
+B Y
+B Y
+B Y
+A X
+C Y
+A Z
+C Y
+C Y
+B Z
+B Y
+A Z
+A Z
+A Z
+B Y
+C Y
+B Z
+C X
+C Y
+B Z
+A X
+A Z
+C Y
+B Y
+C Y
+C Y
+C Y
+B Y
+B X
+B Y
+B Y
+C Y
+A X
+B Z
+B X
+C X
+B X
+C Y
+B Z
+B Y
+A X
+C Y
+C Y
+C X
+B Z
+B Y
+A Y
+B Z
+A Z
+B Y
+B Y
+B Z
+B Z
+C Y
+A Z
+A X
+A X
+C Y
+B Y
+A Z
+B Z
+A X
+A Z
+B Z
+C Y
+C Z
+A X
+A Y
+B Y
+C Y
+B Y
+C Y
+B Z
+B Y
+A Z
+C Y
+B Z
+B Y
+A Z
+A Y
+B Y
+B Y
+C Y
+A Z
+C Y
+B Y
+B Y
+A X
+A Z
+A Z
+B Y
+B Y
+B Z
+C Y
+C X
+B Z
+A Y
+B Z
+A X
+C X
+A Y
+B Z
+B Z
+A X
+C X
+C X
+A Z
+C Y
+A X
+A X
+C X
+A X
+B Z
+C Z
+B Z
+B Y
+B Y
+A Z
+A Z
+B Y
+A Z
+C Y
+C X
+B Y
+A X
+A X
+B Z
+C Y
+C Y
+A X
+B Z
+A X
+C X
+C X
+B Z
+C X
+B Z
+A X
+A Y
+A X
+A Z
+A X
+B Y
+C Y
+A X
+C Y
+A Z
+B Z
+A Z
+C Y
+A X
+A Z
+B Y
+A Z
+B Z
+B Z
+A Z
+B Z
+A X
+B Y
+B Z
+C X
+B Y
+B Y
+B Y
+B Y
+A X
+B Z
+B Z
+A Z
+A Z
+C Y
+B Y
+C X
+A X
+B Y
+B Y
+C X
+B Y
+A X
+C Y
+A Z
+B Y
+A Y
+B Z
+B Y
+A Z
+A X
+B Z
+C Y
+A Z
+C Y
+C X
+B Y
+B Z
+C X
+A Y
+B Z
+A Y
+B Z
+B Z
+B Y
+B Z
+C X
+B Y
+A X
+B Z
+A Z
+B Y
+A Z
+C Y
+C Y
+C X
+C X
+A X
+C X
+A X
+A X
+B Z
+B Y
+B Y
+B Y
+B Y
+C X
+C X
+A Z
+A Z
+C X
+C X
+C Y
+C Y
+C Y
+B Y
+A Z
+C Y
+B Z
+B Z
+B Y
+C X
+C X
+C Y
+C Y
+C X
+B Z
+B Z
+B Y
+C Y
+B Y
+A Z
+C Y
+A X
+B Y
+C Y
+C Y
+C Y
+B Y
+A Z
+B Y
+A X
+B Z
+C X
+A Z
+C X
+A Z
+B Z
+C Y
+C Y
+C Y
+C X
+B Z
+C X
+B Y
+B Z
+C X
+B X
+A Z
+B Z
+B Y
+C Y
+B Z
+C Y
+A X
+B Z
+C Y
+C Y
+B Z
+B Y
+C Y
+B Z
+C Y
+A Z
+C X
+C X
+C Y
+A Z
+C Z
+C Y
+B Y
+C Y
+B Y
+B Y
+B Z
+C X
+C X
+B Z
+B Z
+B Z
+A Z
+B Y
+B Y
+A X
+B Y
+C Y
+B Y
+C X
+C X
+B Y
+B Y
+A Y
+B Z
+B Y
+B Y
+C Y
+A Z
+C X
+A Y
+B Y
+B Z
+B Y
+A Y
+C Y
+A Y
+A Z
+B Y
+A Z
+C Y
+C Y
+B Y
+A Z
+B Y
+B Y
+A Z
+B Z
+B Y
+C X
+C Y
+B Z
+B Y
+B Y
+A Z
+C Z
+A Z
+A X
+C X
+B Z
+B Z
+C X
+C Y
+B Y
+B X
+A X
+C Y
+B Z
+B Y
+C X
+B Y
+A Z
+A Z
+A X
+C Y
+B Z
+B Y
+C X
+C X
+B Y
+A Z
+C Z
+B Y
+A Z
+C Y
+B Y
+C X
+A Z
+A Z
+A X
+C X
+A X
+C X
+C X
+A Z
+C X
+B Y
+A Z
+B Y
+B Y
+C Y
+C X
+A Z
+B Z
+B Y
+B Y
+A Y
+A Z
+B Y
+A Z
+B Z
+B Y
+C Y
+A Z
+B Y
+B Y
+B Y
+C Y
+C X
+A X
+A Z
+B Z
+B Y
+C Y
+B Z
+C X
+B Y
+C X
+A Z
+B Y
+B X
+B Y
+A Y
+A X
+A X
+C X
+C X
+B Y
+B X
+C Y
+A Z
+B Z
+C Y
+C Y
+B Y
+A Z
+C X
+A Z
+C Y
+B Z
+B X
+C X
+B X
+C X
+B Y
+C Y
+C Y
+B Z
+B Y
+B Z
+B Z
+A Z
+B Y
+A Y
+B Z
+C X
+C Y
+C X
+A Z
+B Z
+C Y
+B Y
+B Z
+C X
+B Y
+A Y
+A X
+A X
+C Y
+B X
+C X
+B Z
+A Z
+A Y
+B Z
+C X
+C X
+B Y
+A X
+B Z
+C Y
+B X
+B Z
+C Y
+B Y
+C Y
+B Z
+B Y
+B Z
+B Y
+C X
+B Y
+C X
+B Z
+B Z
+C X
+B Z
+A X
+B X
+B Y
+A X
+B Z
+C X
+B Z
+B Y
+B Y
+C X
+A Y
+B Z
+B Z
+B Y
+B Y
+B Z
+C Y
+B Z
+C Y
+C X
+A Z
+C X
+A X
+C Y
+B Y
+C X
+A Z
+B Y
+A Z
+A Z
+B X
+C Y
+B Z
+C Y
+B Y
+B Z
+A X
+B Z
+A X
+C X
+B Z
+B Y
+C X
+C Y
+C Y
+B X
+C X
+C X
+B Z
+C Y
+B Z
+B Y
+B Z
+C Y
+B Y
+C Y
+C X
+B Y
+B Y
+B Z
+A Z
+C X
+A Z
+B Y
+B Z
+A Z
+C Y
+A Z
+B Y
+A Z
+A Z
+C Y
+A Y
+B Y
+A Y
+C X
+B Y
+C X
+B Z
+C Y
+A Z
+C X
+C X
+B Z
+C Z
+C Z
+B Y
+B Y
+C Y
+C Y
+A Z
+C Y
+C Y
+C Y
+A Z
+B Z
+C Y
+B Y
+C Y
+C X
+C X
+B X
+B Y
+C Y
+A Y
+B Y
+B Z
+B Y
+A Y
+B Y
+B X
+C X
+C Z
+C Y
+C Y
+C Y
+B Z
+B X
+C Y
+B Z
+C X
+C Y
+A Z
+A Y
+B Y
+C X
+A Z
+B Y
+C Y
+B Z
+A Z
+A Z
+B Y
+A Z
+C Y
+A X
+C Y
+B Z
+B Z
+B Z
+B Y
+B Y
+A Z
+A Z
+B Y
+C X
+A Z
+C Y
+B Y
+A Z
+C Y
+A Z
+B Z
+B Z
+A Y
+B Y
+B Y
+B Z
+C Z
+B Y
+B X
+B Y
+C X
+B Z
+C Y
+B Z
+A Y
+B Z
+A Z
+A X
+A Z
+C X
+C X
+B Y
+C X
+C Y
+A Z
+B Z
+B Y
+A Z
+B Z
+B Z
+B Z
+C Y
+B Y
+A X
+C Y
+C Y
+C X
+A X
+C Y
+B Y
+C X
+B Z
+A Y
+B X
+B Y
+A Z
+B Y
+B Y
+B Y
+B Z
+C X
+B Z
+B Z
+C X
+B Y
+A Y
+B Y
+C Y
+A Z
+C Z
+B Y
+B Z
+B Z
+C Y
+A Z
+C Y
+C X
+C Y
+B Y
+A X
+A X
+B Z
+C Y
+B Z
+B Y
+A Y
+C X
+A Z
+B Z
+C Y
+C Z
+C X
+B Y
+C X
+A Y
+A Y
+B Z
+C X
+B X
+C X
+B Y
+B Z
+B Z
+B Y
+C Y
+B Y
+B Y
+A Z
+B Z
+B Y
+C X
+B Z
+B Y
+B Y
+C Y
+C Z
+C X
+B Y
+A X
+C Y
+C X
+B Z
+C Y
+A X
+B Y
+A Y
+B Y
+C X
+C Y
+C X
+A X
+B Z
+C X
+B Y
+A Z
+C X
+B Y
+A Z
+B Y
+B Y
+B Y
+A Z
+A X
+C X
+C Y
+C Y
+B Y
+B Y
+B Z
+A Y
+C X
+C X
+B Y
+B Y
+B Z
+A X
+C X
+C X
+B X
+A X
+B Z
+B Y
+C X
+A X
+B Y
+C Y
+A X
+B Y
+C X
+B Z
+C Z
+B X
+C Y
+B Y
+C Y
+A Z
+C Y
+B Z
+C X
+B Z
+C X
+C Y
+C X
+C Y
+C Z
+C X
+C X
+B Y
+C Y
+C X
+C X
+B Z
+B Z
+A X
+C Y
+C Z
+B Y
+C Z
+C Y
+C X
+C X
+B Y
+C Y
+A Y
+B Y
+A Y
+B Y
+B Y
+B Y
+C Y
+C Z
+B Y
+C X
+C X
+B Z
+B Y
+B Z
+C Y
+B Z
+C X
+B Z
+B Y
+B Y
+A Z
+A X
+B X
+A X
+C X
+C Y
+B Y
+A X
+B Z
+B Y
+B Y
+A X
+C X
+C X
+B Y
+B Y
+C Y
+C Y
+B Z
+B Y
+B Y
+B Y
+C Y
+A X
+B Y
+C Y
+B Z
+B Y
+B Y
+B Z
+B Y
+B Y
+B Z
+B Y
+B Y
+C Y
+A Z
+B Z
+A Y
+B Y
+C Y
+B Z
+B Y
+B Y
+C X
+A X
+C Z
+C X
+B Y
+B Z
+C Y
+C X
+B Z
+A Z
+A Z
+C Y
+A Z
+B Y
+B Y
+B Z
+B Y
+C Y
+B Z
+C Y
+B Z
+B Z
+B Y
+C X
+B Y
+B Z
+A X
+C X
+C X
+B Z
+B Z
+C X
+B Y
+A Z
+B Y
+B Z
+C Y
+B Y
+A Z
+B Z
+B Y
+B Y
+B Y
+C X
+C Y
+A Z
+B Y
+B Y
+A Z
+A Z
+A Z
+A X
+B X
+A Z
+C Y
+C X
+A X
+B Z
+A X
+C X
+B Z
+B Y
+B Y
+C X
+A Z
+C Y
+C X
+A Y
+C X
+A Z
+B Z
+B Z
+B Y
+C Y
+B Z
+A Z
+A Z
+C Y
+B Y
+B Z
+A Z
+A Z
+B Z
+B Y
+A Z
+C Y
+A Z
+A Z
+B Y
+B Z
+B Z
+A X
+A X
+B Y
+B Z
+B Z
+C X
+B Z
+C Z
+B Y
+B Y
+B Y
+B Z
+A X
+A Z
+B Y
+A X
+B Y
+B Y
+C X
+C X
+C Y
+C Y
+A Z
+A X
+B Y
+A Z
+B Z
+B Y
+C X
+B Y
+B X
+C X
+A X
+A Z
+C Y
+C X
+C Y
+B Y
+B Y
+A X
+A Y
+B Y
+A Y
+C Y
+C X
+B Y
+B Y
+B Z
+C X
+C X
+B Y
+C X
+B Z
+C Y
+A X
+A Z
+A Z
+B Y
+A Y
+C Y
+C X
+C Y
+C Y
+B Y
+B Y
+A Z
+C X
+A X
+B Y
+B Y
+B Y
+B Z
+A Z
+B Y
+B Y
+A Z
+B Y
+A Z
+C X
+B Z
+C Y
+B Y
+B Y
+A X
+B Y
+A X
+B Y
+B Z
+C X
+B Z
+B Y
+C X
+C Y
+C Y
+A X
+A X
+B Z
+B Z
+B Y
+C X
+A Z
+C Y
+C Y
+C Y
+B Z
+B Z
+B Y
+A Z
+C Y
+A X
+A Z
+C Y
+B Z
+B Y
+B Y
+A Z
+B Y
+A Z
+C X
+A X
+B Z
+B Y
+B Y
+B Z
+A Z
+C X
+B Y
+C X
+B Z
+C X
+A Z
+B Y
+A Z
+A Z
+B Y
+C Y
+C X
+C Y
+A X
+C Y
+B Y
+B Z
+C X
+C Y
+A X
+B Z
+B Y
+C Y
+A X
+B Z
+A Y
+B Z
+B Y
+B Z
+A X
+A Z
+A X
+B Z
+C Y
+B Y
+A Y
+B Z
+A Z
+C Y
+C X
+B Z
+B Y
+C Y
+B Z
+C X
+C Y
+A X
+B Z
+B Z
+B Z
+B Z
+B Y
+C X
+B Y
+C X
+A Z
+A Z
+C Y
+A Y
+B Y
+C X
+A Z
+B Z
+C X
+C X
+A X
+B Y
+C X
+A Z
+B Y
+B Y
+B Y
+B Y
+C X
+C Y
+C Y
+B Y
+A Z
+B Y
+B Z
+B Z
+B Y
+A X
+B Z
+B Z
+C X
+C X
+C Y
+B Y
+C Y
+B Y
+B Y
+B Z
+B X
+C X
+C Y
+A Z
+B Z
+B Y
+A X
+B Z
+A Z
+B Z
+B Y
+B Y
+A Z
+C Y
+B Y
+C Y
+B Z
+B Y
+C X
+B Z
+B Z
+C Y
+C Y
+B Y
+C Y
+C X
+B X
+B Y
+C Y
+B Y
+B X
+C X
+B Y
+A Y
+A Z
+A Y
+B Z
+A Z
+A Z
+A Z
+B Y
+A Z
+A Z
+C Y
+B Z
+A Z
+A X
+B Y
+C Y
+C X
+C X
+A Z
+B Z
+B X
+B Z
+C X
+B Z
+C Y
+C X
+C Z
+C X
+B Z
+B Z
+B Z
+B Z
+A Z
+A Z
+C Y
+C Z
+C Y
+A X
+B Y
+B Y
+B Y
+A Z
+A Z
+B Z
+C Y
+C X
+B Y
+C X
+B Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B X
+A Z
+A X
+A Y
+C X
+B Z
+B Y
+B Z
+C Y
+A Z
+B Z
+B Z
+C Y
+B Z
+B Z
+C X
+B Y
+C X
+B Z
+C X
+C Y
+C Y
+C X
+A Z
+A Z
+B Z
+B Y
+C X
+C X
+A Y
+A Z
+C X
+A X
+A X
+A Z
+C Y
+B Z
+B Y
+A Z
+B Y
+B Y
+B Z
+B Y
+C Y
+B Z
+A X
+B Y
+A X
+B Z
+A Z
+C X
+A X
+C Z
+A Z
+C Y
+A X
+B Y
+B Z
+B Z
+A X
+C Y
+A Z
+C X
+A Y
+C X
+B Y
+B Z
+A X
+B Y
+B Y
+A Y
+A X
+B Y
+C X
+A Y
+B Y
+B Y
+C Y
+A Z
+B Z
+A Z
+B Y
+A Z
+C Y
+C X
+B Z
+B Y
+B Z
+A X
+C Y
+C Z
+A X
+A X
+C Y
+C Y
+A Z
+C Y
+C X
+A Y
+C Y
+B Y
+B X
+B Y
+A Z
+C X
+C X
+B Y
+A Z
+A X
+B Z
+C X
+B Y
+B Y
+C Z
+A X
+A X
+B Z
+C X
+C Y
+B Z
+C Z
+B Y
+A Y
+A Z
+A Y
+C Y
+C Y
+C Y
+B Z
+B Z
+B Y
+B Y
+B Y
+B Z
+B Z
+C X
+A X
+C X
+B Y
+B Y
+B Y
+C Y
+B Y
+B Y
+C X
+A Y
+B Z
+C X
+B Z
+B Y
+A X
+C Y
+B Y
+C Y
+B Z
+B Y
+C Y
+C Z
+C Y
+A Y
+B Z
+A X
+B Z
+A Z
+A Z
+A Z
+B Y
+A X
+C Y
+B Y
+B Y
+B Y
+C X
+B Y
+A X
+C X
+B Y
+C X
+A Z
+B Z
+B Z
+B Y
+C Y
+B Y
+A Z
+B Y
+C Y
+B Z
+C X
+B Y
+B Y
+B Z
+C X
+C Y
+B Z
+B Z
+C Y
+C X
+C X
+B Y
+B Z
+A X
+C X
+A Z
+A Y
+B Z
+B Y
+B Y
+C Y
+C X
+B Y
+B Z
+C Y
+C Y
+C X
+C X
+B Z
+A Z
+B Z
+B Y
+C X
+A X
+C X
+A Z
+C X
+B Z
+C Z
+B Y
+C Y
+B Y
+C Z
+A Z
+B Y
+C Z
+A X
+B Z
+B X
+C Y
+C X
+B Z
+A Z
+B Y
+A X
+B X
+A Z
+C Y
+A Y
+A Z
+A X
+C X
+A Y
+C X
+B X
+B Y
+C Z
+A Z
+C X
+B Y
+C X
+C X
+B X
+B Y
+A Y
+B Y
+B Y
+A Z
+B Y
+C Y
+C X
+B Y
+B Y
+B Z
+C Y
+B Z
+A Z
+A Z
+A X
+B Y
+C Y
+B Y
+C Y
+C Y
+B Z
+A X
+C Y
+B Z
+C Y
+A Y
+B Y
+B Y
+B Y
+C Y
+A Z
+A Z
+B Z
+A Z
+C Y
+C Y
+B Y
+C X
+B Y
+A Z
+B Z
+A X
+B Z
+B Y
+B Z
+A X
+A X
+C Y
+A Z
+B Z
+C Y
+B Z
+C X
+B Z
+A X
+B Z
+B Z
+C Y
+B Y
+B Y
+C Y
+B Y
+A X
+B Y
+C Y
+A Z
+B Y
+C X
+A Z
+B Z
+A Z
+B Z
+C Y
+B Y
+B Y
+B Y
+C Y
+B Y
+B Y
+A Z
+B Y
+B Z
+C X
+B Z
+C X
+C X
+A X
+B Z
+C Z
+B Z
+A Y
+C X
+C X
+A Z
+A X
+A Y
+A X
+B Y
+B Y
+C X
+C Z
+A Y
+C Y
+B Y
+B Y
+C X
+C X
+B Z
+B Z
+B Y
+C Y
+A Z
+B Y
+C X
+C X
+A X
+A X
+A Y
+B Y
+C X
+A Z
+C Z
+C Y
+C Y
+C Y
+B Y
+C Y
+A Y
+A X
+B X
+B Y
+B Y
+B Y
+B Y
+A Z
+B Z
+B Y
+B Y
+C Y
+A X
+A Z
+A Z
+A Z
+B Y
+A X
+C Y
+C Y
+B Y
+B Y
+C Y
+A Z
+C Y
+A X
+C X
+B Z
+B Y
+C X
+B Y
+A X
+A Z
+C X
+C Y
+C Y
+C X
+C X
+B Z
+B Y
+A Z
+B Y
+B Z
+B Z
+B Y
+B Y
+A X
+C X
+C Y
+C X
+A Z
+B Z
+B Y
+B Y
+C Y
+A X
+A X
+C Y
+C X
+B Z
+A Y
+B Y
+B Z
+B Y
+A X
+C Y
+B Y
+A X
+C X
+B Y
+B Y
+A Z
+A Z
+A Z
+B Y
+B Y
+C X
+B Z
+A Z
+B Z
+A Z
+C X
+B Y
+C X
+B Y
+C X
+C X
+B Y
+B Y
+A Y
+C Y
+C Y
+B Z
+C X
+B Y
+B Y
+A X
+A Z
+B Y
+C Y
+B Y
+C Y
+A X
+C Y
+C Y
+B Z
+C Y
+A X
+C X
+A Z
+C Y
+A Z
+C X
+B Z
+B Y
+B Z
+C Y
+B X
+A Z
+C Y
+C X
+B Y
+C X
+B Z
+A X
+A Z
+C X
+B Z
+C X
+B Y
+A Z
+B Y
+C Y
+B Y
+C X
+C Y
+B X
+B X
+B Y
+B Y
+B Y
+B Z
+B Y
+C X
+A Z
+A Z
+C X
+B Y
+B Y
+B Y
+A Y
+C Y
+B Z
+C X
+C Y
+A X
+C Y
+B Z
+C Y
+B Y
+B Y
+B Z
+A Z
+A Z
+B Y
+A Y
+B Z
+A X
+C Y
+B Y
+A X
+C X
+B Y
+C Y
+B Z
+B Y
+C X
+A Z
+C Y
+A Z
+B Y
+C Y
+B Y
+C X
+A Z
+C Y
+C Y
+A Y
+B Z
+C X
+C X
+A Z
+C Z
+C X
+B Y
+C X
+A X
+C Y
+C X
+C X
+A X
+A Y
+A X
+C X
+A X
+A X
+B X
+B Y
+C Y
+A X
+B Z
+C X
+C Y
+B Y
+B Z
+C Y
+B Z
+B Y
+C X
+A X
+B Y
+B Z
+C Y
+A Z
+C X
+C Z
+A X
+A Z
+A Z
+B Z
+A Z
+B Y
+C Y
+C Y
+B Z
+C Y
+C Y
+C Y
+C X
+A X
+B Y
+A X
+C X
+C Z
+B Y
+A Z
+B Y
+C Y
+C Y
+B Z
+C Y
+C X
+B Z
+C Y
+B Y
+B Z
+A Z
+B Z
+B Z
+B Y
+A Z
+A Y
+C X
+B Y
+A Z
+C Y
+B Z
+A Z
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+C Y
+B X
+B Y
+A X
+A X
+B Z
+A X
+C Y
+A Z
+B Y
+B Y
+B Z
+A Z
+C Y
+C X
+B Y
+A Z
+A X
+B Y
+C X
+B Z
+A X
+C X
+B Z
+B Z
+B Z
+B X
+A X
+C Z
+C X
+C Z
+B X
+A Z
+C X
+B Y
+C X
+C Y
+C Y
+B Y
+B Z
+B Y
+C Y
+C X
+A Z
+C Y
+C Y
+C Y
+B Z
+A Z
+A Y
+C X
+C Y
+B Y
+C Y
+C Y
+B Z
+C Y
+B Y
+B Y
+C X
+B Z
+B Y
+A X
+B Y
+A Z
+B Y
+C X
+B Y
+C X
+B Y
+A Z
+C X
+B Y
+C X
+B Z
+C X
+B Y
+A X
+C X
+C X
+A X
+C Y
+A Z
+C Y
+B Z
+A Z
+A X
+C X
+A X
+C Y
+A X
+A X
+B Z
+C X
+C Y
+A Y
+B Z
+B Y
+C Y
+B Y
+A Y
+C Y
+C Y
+B Y
+B Y
+B Z
+B Z
+C X
+B Y
+C X
+A X
+A Z
+C Y
+B Z
+C Y
+B Y
+C X
+C X
+A Z
+B Z
+A Z
+C X
+B Y
+B Z
+C Y
+B Y
+A X
+A X
+B Y
+B Y
+B Y
+A X
+B Y
+B Z
+A Z
+A X
+A X
+B Z
+B Y
+A X
+B Z
+A Z
+B Y
+B Z
+B Z
+B Z
+C Y
+C Y
+A Z
+B Y
+C Y
+A Z
+C X
+B Z
+A X
+B X
+B Y
+B Y
+C Y
+C Y
+B Z
+B Y
+A Z
+B Y
+A X
+B Z
+B Y
+C Z
+B Y
+B Y
+C Y
+B Y
+B Y
+A Y
+C Y
+A Z
+A Y
+B Z
+C X
+B Z
+A X
+A Z
+A X
+C Y
+A Z
+B Y
+B Z
+B Z
+C Y
+C Y
+C Y
+B X
+B Y
+B Z
+A X
+B Y
+C Y
+A X
+A X
+B Y
+C Y
+A Y
+B Z
+B Z
+B Z
+A Z
+B Y
+C X
+A Z
+C Y
+C Y
+B Y
+C Y
+C Y
+C Y
+C Y
+B Y
+B Z
+A Z
+B X
+C Y
+C X
+C X
+C Y
+A Z
+C Y
+C X
+B Z
+B Y
+A Y
+C Z
+B Y
+B Y
+B Y
+B Y
+C Y
+B Y
+C Y
+A Z
+B Y
+C X
+C Y
+B Z
+A X
+C Y
+B Y
+B Y
+B Y
+A Z
+A X
+A X
+C X
+C Z
+B Z
+A X
+A Z
+A X
+A Y
+C Y
+C Y
+A Z
+C X
+C X
+B X
+B Y
+A X
+A Z
+A X
+C Y
+B X
+A X
+A X
+C X
+A Y
+B Z
+A Z
+B Y
+A X
+A Z
+B Y
+A Z
+C Y
+B Z
+A Z
+C Y
+C X
+B Z
+C Y
+B Y
+C X
+A Z
+B Z
+A X
+A X
+C Z
+A X
+C X
+B Y
+B Z
+A X
+A X
+C Y
+A Z
+C Y
+C X
+C Y
+B Z
+B Y
+C X
+C X
+B Z
+B Z
+C Y
+A X
+B X
+C X
+C Y
+A X
+A Z
+B Y
+C X
+A Y
+C X
+C Y
+A Z
+B Y
+B Z
+B Y
+C X
+C Y
+C X
+C X
+B Y
+C X
+C X
+B Y
+C Z
+C Y
+C Y
+B Z
+B Z
+B Y
+A X
+B Y
+A Z
+A Y
+B Y
+C Y
+B Z
+B Z
+A X
+B Y
+A X
+B Y
+A Z
+B Y
+C X
+A Z
+B Z
+C Y
+B Y
+A Y
+A X
+C X
+A X
+B Y
+B Z
+B Z
+C Y
+A X
+B Y
+B Z
+B Y
+B X
+C Z
+B Z
+C X
+C Y
+C X
+B Z
+C Y
+A X
+A X
+C X
+B Y
+B X
+B Y
+A X
+C Y
+A Z
+B Y
+B Y
+B Y
+B Z
+B Y
+C X
+A Z
+C Y
+A Z
+B Z
+C X
+C Y
+C X
+C Y
+A Y
+B Z
+B Y
+B Z
+C Y
+A X
+B Y
+A X
+C X
+B X
+C X
+A Z
+B Z
+B Z
+C Y
+B Z
diff --git a/day-2/main.zig b/day-2/main.zig
new file mode 100644
index 0000000..4053caa
--- /dev/null
+++ b/day-2/main.zig
@@ -0,0 +1,68 @@
+const std = @import("std");
+const slurp = @import("util/file.zig").slurp;
+
+var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+const allocator = gpa.allocator();
+
+const Hand = enum(u8) { Rock = 1, Paper = 2, Scissors = 3 };
+const Outcome = enum(u8) { Win = 6, Draw = 3, Lose = 0 };
+
+const KV = struct { @"0": []const u8, @"1": Hand };
+
+const Player_A_KV = std.ComptimeStringMap(Hand, [_]KV{
+ .{ .@"0" = "A", .@"1" = .Rock },
+ .{ .@"0" = "B", .@"1" = .Paper },
+ .{ .@"0" = "C", .@"1" = .Scissors },
+});
+
+const Player_B_KV = std.ComptimeStringMap(Hand, [_]KV{
+ .{ .@"0" = "X", .@"1" = .Rock },
+ .{ .@"0" = "Y", .@"1" = .Paper },
+ .{ .@"0" = "Z", .@"1" = .Scissors },
+});
+
+pub fn main() !void {
+ const file_buffer = try slurp(allocator, "./input");
+ defer allocator.free(file_buffer);
+
+ var iter = std.mem.split(u8, file_buffer, "\n");
+
+ var score: u16 = 0;
+
+ while (iter.next()) |line| {
+ if (line.len > 0) {
+ score += match(
+ Player_A_KV.get(&[_]u8{line[0]}).?,
+ Player_B_KV.get(&[_]u8{line[2]}).?,
+ );
+ }
+ }
+
+ std.debug.print("{d}\n", .{score});
+}
+
+fn match(a: Hand, b: Hand) u8 {
+ switch (b) {
+ .Rock => {
+ switch (a) {
+ .Rock => return @enumToInt(b) + @enumToInt(Outcome.Draw),
+ .Paper => return @enumToInt(b) + @enumToInt(Outcome.Lose),
+ .Scissors => return @enumToInt(b) + @enumToInt(Outcome.Win),
+ }
+ },
+ .Paper => {
+ switch (a) {
+ .Rock => return @enumToInt(b) + @enumToInt(Outcome.Win),
+ .Paper => return @enumToInt(b) + @enumToInt(Outcome.Draw),
+ .Scissors => return @enumToInt(b) + @enumToInt(Outcome.Lose),
+ }
+ },
+ .Scissors => {
+ switch (a) {
+ .Rock => return @enumToInt(b) + @enumToInt(Outcome.Lose),
+ .Paper => return @enumToInt(b) + @enumToInt(Outcome.Win),
+ .Scissors => return @enumToInt(b) + @enumToInt(Outcome.Draw),
+ }
+ },
+ }
+}
diff --git a/day-2/main_1.zig b/day-2/main_1.zig
new file mode 100644
index 0000000..51d6b65
--- /dev/null
+++ b/day-2/main_1.zig
@@ -0,0 +1,68 @@
+const std = @import("std");
+const slurp = @import("util/file.zig").slurp;
+
+var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+const allocator = gpa.allocator();
+
+const Hand = enum(u8) { Rock = 1, Paper = 2, Scissors = 3 };
+const Outcome = enum(u8) { Win = 6, Draw = 3, Lose = 0 };
+
+const KV_Hand = struct { @"0": []const u8, @"1": Hand };
+const KV_Outcome = struct { @"0": []const u8, @"1": Outcome };
+
+const Player_A_KV = std.ComptimeStringMap(Hand, [_]KV_Hand{
+ .{ .@"0" = "A", .@"1" = .Rock },
+ .{ .@"0" = "B", .@"1" = .Paper },
+ .{ .@"0" = "C", .@"1" = .Scissors },
+});
+
+const Outcome_KV = std.ComptimeStringMap(Outcome, [_]KV_Outcome{
+ .{ .@"0" = "X", .@"1" = .Lose },
+ .{ .@"0" = "Y", .@"1" = .Draw },
+ .{ .@"0" = "Z", .@"1" = .Win },
+});
+
+pub fn main() !void {
+ const file_buffer = try slurp(allocator, "./input");
+ defer allocator.free(file_buffer);
+
+ var iter = std.mem.split(u8, file_buffer, "\n");
+
+ var score: u16 = 0;
+
+ while (iter.next()) |line| {
+ if (line.len > 0)
+ score += match(
+ Player_A_KV.get(&[_]u8{line[0]}).?,
+ Outcome_KV.get(&[_]u8{line[2]}).?,
+ );
+ }
+
+ std.debug.print("{d}\n", .{score});
+}
+
+fn match(a: Hand, b: Outcome) u8 {
+ switch (a) {
+ .Rock => {
+ switch (b) {
+ .Win => return @enumToInt(b) + @enumToInt(Hand.Paper),
+ .Lose => return @enumToInt(b) + @enumToInt(Hand.Scissors),
+ .Draw => return @enumToInt(b) + @enumToInt(Hand.Rock),
+ }
+ },
+ .Paper => {
+ switch (b) {
+ .Win => return @enumToInt(b) + @enumToInt(Hand.Scissors),
+ .Lose => return @enumToInt(b) + @enumToInt(Hand.Rock),
+ .Draw => return @enumToInt(b) + @enumToInt(Hand.Paper),
+ }
+ },
+ .Scissors => {
+ switch (b) {
+ .Win => return @enumToInt(b) + @enumToInt(Hand.Rock),
+ .Lose => return @enumToInt(b) + @enumToInt(Hand.Paper),
+ .Draw => return @enumToInt(b) + @enumToInt(Hand.Scissors),
+ }
+ },
+ }
+}
diff --git a/day-2/util/file.zig b/day-2/util/file.zig
new file mode 100644
index 0000000..90849e9
--- /dev/null
+++ b/day-2/util/file.zig
@@ -0,0 +1,15 @@
+const std = @import("std");
+
+/// Reads an entire file into memory, caller owns the returned slice.
+pub fn slurp(allocator: std.mem.Allocator, file_path: []const u8) ![]u8 {
+ var path_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined;
+ const path = try std.fs.realpath(file_path, &path_buffer);
+
+ const file = try std.fs.openFileAbsolute(path, .{});
+ defer file.close();
+
+ return try file.readToEndAlloc(
+ allocator,
+ (try file.stat()).size,
+ );
+}
diff --git a/day-2/util/mem.zig b/day-2/util/mem.zig
new file mode 100644
index 0000000..89ba67b
--- /dev/null
+++ b/day-2/util/mem.zig
@@ -0,0 +1,17 @@
+const std = @import("std");
+const math = std.math;
+
+/// Returns the position of the smallest number in a slice.
+pub fn min_idx(comptime T: type, slice: []const T) usize {
+ var best = slice[0];
+ var idx: usize = 0;
+
+ for (slice[1..]) |item, i| {
+ const possible_best = math.min(best, item);
+ if (best > possible_best) {
+ best = possible_best;
+ idx = i + 1;
+ }
+ }
+ return idx;
+}