summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Wernick <justin@worthe-it.co.za>2022-12-09 08:03:56 +0200
committerJustin Wernick <justin@worthe-it.co.za>2022-12-09 08:03:56 +0200
commit66ddb140f254513b4e38d9b4c9c80db77364f51b (patch)
treea8bf49fe24449058c6a3b5f8a463b84555f7e5a3
parent06945fcd337116a3cea5e3d003f830d20f826790 (diff)
Day 9
-rw-r--r--2022/inputs/day_9.txt2000
-rw-r--r--2022/src/bin/day_9.rs134
2 files changed, 2134 insertions, 0 deletions
diff --git a/2022/inputs/day_9.txt b/2022/inputs/day_9.txt
new file mode 100644
index 0000000..b249a09
--- /dev/null
+++ b/2022/inputs/day_9.txt
@@ -0,0 +1,2000 @@
+D 1
+U 2
+R 2
+U 1
+R 1
+U 2
+L 2
+D 1
+L 2
+R 1
+L 1
+R 1
+U 2
+D 2
+L 2
+R 2
+L 2
+R 1
+L 1
+D 1
+U 1
+R 1
+U 2
+D 1
+U 1
+D 1
+R 2
+D 1
+U 1
+R 1
+L 2
+R 2
+U 2
+R 2
+L 2
+R 2
+U 2
+D 2
+R 1
+U 2
+D 2
+U 2
+D 1
+L 1
+D 1
+L 1
+R 2
+D 2
+R 2
+D 1
+R 2
+L 1
+R 1
+L 2
+D 2
+U 1
+D 1
+R 2
+L 2
+D 2
+L 2
+D 2
+L 1
+R 2
+L 1
+D 1
+L 2
+D 1
+U 1
+R 1
+U 1
+R 2
+D 2
+R 1
+U 2
+D 1
+L 2
+D 2
+L 1
+D 1
+L 1
+D 1
+R 1
+L 1
+U 1
+D 2
+U 1
+D 2
+R 1
+D 2
+L 2
+U 1
+L 1
+R 1
+D 1
+U 1
+D 1
+R 1
+U 2
+L 1
+D 1
+U 2
+R 2
+D 2
+R 1
+D 1
+R 1
+L 1
+R 2
+U 1
+D 1
+L 1
+U 3
+L 2
+U 2
+L 2
+D 2
+L 1
+R 3
+D 1
+U 1
+L 3
+D 3
+U 1
+L 2
+U 1
+R 2
+U 3
+D 2
+L 3
+U 2
+R 2
+D 2
+U 1
+R 1
+L 3
+D 2
+L 3
+D 1
+U 3
+R 3
+U 3
+D 3
+U 3
+L 3
+U 1
+D 1
+U 1
+D 3
+R 3
+D 3
+U 3
+R 3
+L 3
+R 2
+U 3
+D 3
+L 1
+R 2
+D 2
+U 1
+R 1
+L 2
+D 3
+R 3
+D 1
+U 1
+D 1
+U 2
+D 1
+R 1
+D 2
+R 2
+L 1
+D 2
+L 1
+R 2
+L 3
+R 3
+L 1
+U 3
+R 3
+U 3
+D 1
+L 3
+R 1
+L 1
+R 2
+L 1
+U 2
+R 1
+D 2
+R 3
+L 3
+R 2
+U 3
+R 3
+L 1
+R 1
+L 1
+U 1
+L 2
+R 2
+L 3
+D 2
+L 2
+R 3
+D 3
+U 1
+L 2
+D 3
+U 3
+D 3
+R 1
+U 1
+L 2
+U 1
+L 1
+R 1
+U 3
+L 2
+R 1
+D 4
+R 3
+D 3
+L 3
+D 4
+R 4
+L 3
+R 2
+D 2
+R 4
+U 2
+D 3
+L 1
+R 2
+U 4
+R 3
+D 2
+U 1
+D 4
+R 1
+D 3
+U 3
+L 2
+R 2
+L 3
+R 3
+L 4
+D 3
+L 2
+U 3
+L 1
+R 2
+D 4
+R 3
+U 3
+L 2
+U 3
+D 2
+L 4
+D 4
+L 4
+U 4
+R 1
+D 1
+R 3
+U 3
+R 3
+D 3
+L 1
+U 1
+R 3
+L 2
+R 2
+D 2
+R 4
+U 4
+L 4
+D 3
+L 2
+R 4
+L 2
+D 1
+L 2
+R 4
+U 2
+L 2
+U 3
+L 4
+R 2
+L 4
+D 2
+L 1
+D 4
+L 3
+U 2
+D 1
+R 4
+U 2
+D 1
+R 4
+D 4
+U 3
+R 3
+U 4
+L 1
+D 3
+U 1
+D 3
+R 2
+U 1
+R 3
+L 4
+R 1
+L 4
+D 3
+R 4
+U 2
+L 1
+D 4
+L 2
+R 4
+L 2
+R 3
+L 3
+U 2
+R 3
+L 2
+R 1
+D 4
+L 3
+D 3
+L 5
+D 1
+R 3
+D 4
+L 4
+R 2
+D 5
+R 2
+L 2
+D 5
+U 2
+D 1
+U 2
+D 3
+L 2
+D 1
+L 3
+U 1
+D 3
+R 2
+U 4
+R 5
+D 5
+U 3
+R 1
+D 5
+U 1
+D 4
+R 1
+U 4
+D 4
+R 4
+U 5
+D 4
+R 1
+L 1
+D 5
+L 1
+D 4
+U 1
+D 2
+U 1
+D 1
+R 1
+D 2
+R 2
+D 1
+L 5
+R 3
+L 4
+D 3
+R 5
+D 4
+U 2
+R 2
+U 2
+D 2
+U 5
+L 4
+D 5
+L 5
+R 3
+D 2
+U 4
+D 2
+L 3
+R 2
+L 1
+U 2
+R 4
+L 5
+R 4
+D 1
+U 5
+D 4
+L 5
+R 2
+U 4
+D 3
+L 3
+D 3
+L 1
+U 5
+L 4
+R 1
+U 5
+D 4
+R 2
+L 1
+D 2
+R 3
+L 2
+R 5
+D 5
+R 2
+L 1
+U 3
+D 2
+L 1
+U 1
+R 4
+U 1
+D 1
+U 1
+R 2
+U 3
+R 4
+L 4
+R 1
+U 3
+R 3
+D 1
+L 3
+R 4
+L 1
+U 5
+D 6
+U 2
+L 4
+D 2
+U 1
+D 4
+R 5
+L 2
+R 6
+L 6
+U 1
+D 4
+L 3
+D 5
+U 4
+L 4
+R 2
+D 2
+L 3
+D 1
+U 6
+L 6
+R 2
+D 2
+U 3
+L 6
+R 1
+U 5
+R 5
+U 5
+D 1
+L 2
+U 1
+R 1
+D 5
+L 6
+R 1
+D 4
+R 3
+L 3
+D 2
+U 5
+D 6
+U 3
+D 6
+U 4
+L 2
+R 1
+U 5
+D 2
+L 1
+D 4
+U 1
+R 2
+L 2
+R 4
+D 1
+L 6
+D 5
+L 6
+R 6
+L 3
+U 5
+R 4
+D 4
+L 3
+D 2
+L 1
+R 4
+U 3
+R 2
+U 2
+R 5
+D 1
+U 5
+D 4
+R 4
+L 5
+D 5
+U 3
+R 1
+U 4
+L 5
+U 1
+D 2
+U 4
+D 4
+L 1
+U 2
+L 3
+U 5
+R 1
+L 5
+U 1
+R 4
+D 2
+L 6
+U 6
+R 6
+U 5
+R 6
+U 6
+L 5
+U 1
+L 5
+D 3
+R 1
+D 4
+L 3
+D 7
+U 1
+D 4
+R 2
+U 4
+D 4
+U 7
+D 3
+L 3
+D 3
+R 4
+D 7
+R 4
+D 5
+U 3
+L 5
+R 5
+D 5
+L 2
+R 3
+L 2
+R 4
+U 2
+L 4
+U 7
+L 2
+U 6
+D 3
+U 6
+R 2
+D 2
+U 6
+L 2
+R 4
+U 5
+D 2
+R 4
+L 2
+D 2
+R 1
+D 3
+R 1
+D 3
+U 4
+D 2
+L 4
+D 1
+L 5
+U 1
+R 2
+D 3
+U 4
+D 4
+L 5
+R 2
+D 2
+U 1
+D 7
+L 7
+R 2
+L 6
+D 4
+R 7
+L 3
+U 2
+D 2
+U 4
+L 5
+D 4
+U 4
+R 5
+L 5
+D 2
+R 5
+L 7
+U 1
+D 7
+L 3
+R 4
+L 5
+D 5
+L 2
+R 5
+L 3
+R 2
+L 4
+R 1
+D 3
+L 5
+R 2
+D 4
+U 3
+R 3
+L 5
+D 3
+R 1
+D 5
+R 5
+L 1
+D 6
+R 5
+D 4
+U 2
+L 4
+U 1
+D 3
+L 2
+D 7
+R 4
+L 1
+U 6
+R 8
+L 2
+U 2
+R 1
+U 7
+D 6
+L 7
+R 3
+U 5
+R 4
+L 8
+D 2
+R 4
+U 8
+L 6
+R 1
+L 7
+D 5
+L 3
+R 6
+U 1
+D 7
+L 2
+U 7
+R 1
+U 6
+L 3
+R 8
+D 5
+L 4
+R 4
+L 6
+D 6
+R 3
+L 2
+U 5
+R 3
+D 1
+R 7
+L 1
+U 8
+D 2
+U 3
+D 1
+L 2
+U 6
+L 1
+U 4
+R 6
+U 7
+R 1
+D 1
+U 8
+R 1
+D 7
+L 1
+U 4
+D 1
+U 2
+R 8
+U 1
+D 6
+R 1
+U 1
+R 5
+L 7
+R 3
+D 3
+U 8
+L 6
+D 7
+U 8
+L 4
+R 1
+L 7
+U 4
+D 3
+L 3
+R 6
+D 3
+U 8
+L 5
+D 8
+L 1
+U 7
+R 6
+L 5
+U 8
+R 2
+L 8
+R 7
+L 8
+U 7
+D 7
+U 3
+D 4
+U 8
+D 5
+U 3
+L 4
+D 4
+U 8
+R 7
+U 7
+L 7
+R 4
+L 1
+D 8
+R 9
+D 4
+R 8
+L 5
+R 9
+U 5
+D 1
+L 5
+D 7
+U 3
+R 5
+U 1
+R 3
+U 2
+D 9
+U 5
+R 3
+U 4
+R 3
+D 4
+U 7
+D 9
+L 7
+D 3
+U 1
+R 3
+U 4
+L 3
+R 8
+L 3
+U 8
+R 6
+L 6
+D 7
+L 7
+D 4
+L 3
+U 5
+L 2
+R 5
+D 3
+U 6
+L 9
+R 9
+D 9
+U 9
+R 4
+D 8
+R 8
+D 5
+L 7
+U 2
+R 4
+L 8
+R 4
+L 2
+R 3
+L 7
+R 1
+U 1
+L 5
+D 5
+R 9
+D 8
+U 7
+L 3
+R 5
+D 1
+U 1
+R 5
+D 6
+U 9
+D 8
+R 4
+D 7
+L 1
+U 5
+D 8
+L 4
+D 4
+L 7
+D 8
+R 5
+U 9
+D 2
+L 1
+R 2
+U 8
+D 4
+L 6
+D 1
+L 5
+D 6
+R 9
+U 1
+L 9
+U 4
+D 6
+R 8
+L 5
+R 1
+L 2
+R 7
+D 8
+L 4
+R 3
+U 2
+L 7
+U 2
+D 1
+R 8
+U 8
+L 1
+R 1
+D 2
+U 3
+L 5
+D 6
+L 3
+U 6
+R 2
+L 5
+U 6
+L 5
+D 3
+L 6
+D 2
+L 4
+U 10
+R 4
+D 7
+U 4
+D 4
+L 5
+U 3
+L 9
+R 7
+D 1
+L 4
+U 4
+D 5
+R 5
+D 4
+U 1
+D 3
+R 1
+L 6
+U 1
+D 1
+L 4
+U 5
+D 10
+R 4
+U 5
+R 1
+U 2
+R 4
+D 6
+L 7
+U 1
+R 2
+D 1
+L 7
+D 4
+U 9
+L 6
+D 8
+R 3
+U 7
+R 8
+U 2
+D 5
+R 3
+U 10
+D 3
+R 3
+U 1
+R 8
+D 10
+R 3
+D 1
+U 10
+L 5
+U 8
+D 6
+L 9
+D 5
+U 1
+R 9
+U 3
+D 3
+R 8
+L 9
+D 8
+U 3
+R 2
+D 3
+L 7
+D 3
+R 10
+L 9
+U 2
+R 8
+U 8
+R 5
+U 3
+L 9
+U 1
+D 7
+L 7
+R 5
+L 8
+U 8
+L 9
+R 10
+U 1
+R 5
+L 5
+D 7
+L 8
+D 5
+U 4
+L 4
+U 6
+D 4
+L 8
+U 8
+L 10
+D 1
+L 2
+D 3
+U 8
+L 7
+R 7
+U 6
+D 4
+U 8
+L 2
+R 6
+L 7
+D 11
+R 4
+D 9
+L 10
+U 3
+L 9
+U 10
+L 11
+U 11
+D 2
+U 4
+D 5
+L 11
+D 4
+L 6
+U 2
+D 8
+R 4
+U 4
+D 5
+U 8
+L 3
+U 2
+R 7
+U 10
+R 5
+L 3
+R 11
+U 2
+D 8
+U 3
+R 10
+U 10
+L 3
+R 7
+L 8
+D 5
+U 9
+D 9
+R 3
+U 4
+L 6
+D 9
+R 10
+L 2
+R 8
+U 11
+L 2
+R 1
+U 11
+R 2
+D 3
+U 9
+R 3
+L 2
+R 1
+L 6
+R 10
+L 2
+U 6
+R 4
+L 9
+U 11
+L 1
+R 11
+U 8
+L 4
+R 11
+L 6
+D 5
+L 11
+U 3
+D 5
+R 5
+U 2
+L 3
+R 4
+L 9
+R 7
+U 11
+R 7
+U 7
+D 10
+R 11
+D 10
+L 3
+D 5
+U 2
+L 1
+U 2
+R 2
+U 8
+R 1
+L 10
+R 10
+U 5
+D 4
+U 4
+R 4
+L 8
+R 6
+U 9
+R 5
+L 3
+U 9
+L 3
+D 4
+R 10
+D 11
+L 12
+R 1
+U 11
+L 10
+R 11
+D 10
+R 10
+L 4
+U 11
+D 2
+R 8
+L 6
+U 7
+D 7
+L 12
+U 1
+L 3
+D 8
+R 6
+L 7
+R 11
+L 2
+R 6
+U 2
+R 2
+L 2
+U 5
+R 12
+U 12
+D 12
+U 1
+D 6
+L 5
+U 3
+D 3
+L 4
+R 10
+L 5
+U 2
+D 8
+R 4
+D 5
+L 7
+U 2
+R 10
+D 12
+R 9
+U 11
+D 10
+R 4
+U 2
+D 1
+U 10
+D 8
+R 2
+L 9
+D 12
+U 12
+D 2
+U 8
+R 5
+L 8
+D 5
+U 9
+D 8
+U 7
+R 3
+L 10
+U 11
+L 5
+U 12
+L 2
+U 9
+D 7
+R 12
+U 9
+R 2
+L 3
+U 10
+D 9
+L 7
+U 5
+R 3
+D 3
+L 11
+D 1
+R 5
+L 1
+U 5
+L 6
+D 8
+L 2
+D 5
+U 8
+D 9
+R 8
+L 7
+D 6
+L 6
+D 1
+U 5
+L 4
+R 6
+U 9
+L 3
+U 3
+D 7
+L 1
+D 4
+L 9
+R 9
+U 6
+D 8
+U 12
+L 5
+D 4
+R 7
+L 2
+D 4
+U 7
+R 7
+U 2
+R 13
+D 5
+L 1
+R 5
+D 6
+U 2
+L 1
+U 5
+D 2
+R 9
+L 8
+U 9
+D 9
+U 12
+R 10
+U 9
+L 13
+R 5
+D 10
+L 9
+U 4
+D 12
+U 12
+R 13
+D 12
+U 7
+R 12
+D 8
+L 8
+U 2
+D 10
+L 2
+D 5
+U 3
+R 11
+D 4
+R 4
+L 1
+R 1
+D 9
+U 6
+R 10
+U 12
+L 10
+R 13
+D 7
+R 12
+L 5
+R 10
+D 4
+R 11
+L 7
+R 7
+U 7
+D 7
+U 11
+L 3
+R 9
+L 12
+D 11
+R 5
+D 5
+R 7
+D 7
+U 3
+L 11
+D 11
+L 10
+U 7
+L 13
+R 6
+L 10
+U 10
+D 10
+L 4
+R 5
+U 5
+D 2
+L 6
+D 8
+U 1
+R 12
+D 11
+U 3
+L 9
+R 10
+U 8
+R 10
+D 2
+R 3
+U 9
+D 7
+L 6
+R 9
+D 2
+U 11
+R 3
+D 1
+R 4
+L 11
+U 13
+R 12
+U 12
+R 8
+L 13
+U 7
+D 10
+R 11
+L 2
+U 9
+L 3
+R 5
+L 4
+R 11
+D 5
+R 1
+L 11
+U 10
+R 4
+L 1
+U 2
+D 8
+L 7
+U 1
+L 4
+D 1
+R 1
+L 11
+U 8
+R 11
+U 4
+R 10
+L 6
+D 7
+U 9
+L 14
+U 1
+R 10
+U 12
+R 1
+L 6
+D 9
+U 10
+L 10
+D 5
+R 14
+U 3
+R 13
+U 3
+L 13
+U 8
+L 10
+U 7
+R 12
+U 11
+R 6
+U 6
+D 6
+R 2
+L 7
+R 8
+U 8
+D 3
+R 8
+L 12
+U 11
+D 9
+U 6
+R 8
+D 8
+U 9
+R 12
+L 11
+U 10
+L 14
+R 9
+D 8
+U 14
+L 9
+D 11
+U 2
+R 2
+U 4
+R 7
+U 11
+L 8
+D 12
+L 11
+U 13
+L 1
+D 8
+U 8
+L 10
+U 12
+R 11
+U 3
+D 12
+L 1
+D 8
+L 4
+D 3
+L 2
+U 8
+D 9
+L 1
+U 9
+D 15
+U 5
+L 9
+D 2
+U 4
+L 2
+U 15
+L 8
+R 2
+U 1
+L 3
+D 10
+L 15
+U 2
+R 14
+D 1
+U 13
+D 4
+R 8
+D 6
+R 5
+D 13
+L 5
+R 6
+U 14
+L 15
+D 15
+U 12
+L 1
+D 3
+L 6
+D 2
+R 4
+D 10
+U 12
+R 13
+L 3
+R 15
+D 13
+U 15
+D 14
+U 8
+D 10
+U 5
+D 11
+R 15
+D 7
+R 1
+D 2
+L 5
+U 11
+L 14
+U 9
+D 13
+R 12
+U 10
+R 11
+D 9
+R 6
+D 7
+L 7
+U 14
+D 12
+L 6
+D 15
+U 11
+R 1
+U 3
+L 11
+R 3
+L 9
+R 9
+L 11
+R 12
+U 6
+R 13
+D 13
+L 9
+U 3
+D 6
+L 4
+D 3
+U 15
+D 13
+U 9
+D 1
+U 13
+D 12
+L 4
+U 6
+R 11
+D 2
+R 7
+U 9
+R 11
+U 3
+L 7
+U 4
+R 2
+D 14
+U 3
+D 14
+R 13
+L 4
+R 1
+U 12
+D 10
+L 8
+D 2
+L 15
+U 1
+D 4
+U 16
+R 15
+D 1
+R 8
+U 14
+L 12
+U 2
+R 1
+D 16
+L 10
+R 11
+D 10
+L 15
+R 7
+U 10
+L 3
+U 11
+D 1
+L 5
+D 3
+U 8
+R 3
+U 5
+R 2
+D 11
+L 2
+D 7
+L 2
+U 3
+L 12
+D 13
+L 12
+U 7
+R 11
+L 4
+R 11
+L 8
+U 16
+L 1
+R 11
+L 4
+U 15
+L 16
+R 15
+U 6
+R 4
+U 3
+D 16
+R 9
+U 8
+R 5
+U 6
+L 2
+R 2
+D 10
+R 7
+D 13
+U 13
+R 14
+D 3
+L 15
+R 3
+D 11
+L 4
+U 12
+D 1
+U 8
+R 8
+L 4
+D 6
+L 15
+U 7
+D 15
+L 11
+U 14
+D 8
+U 15
+L 12
+R 6
+U 13
+R 5
+U 2
+L 1
+R 13
+D 10
+R 7
+L 9
+U 14
+R 1
+D 13
+L 11
+U 9
+L 13
+R 5
+D 14
+R 16
+U 5
+D 9
+R 2
+D 5
+R 8
+L 8
+U 16
+D 12
+R 3
+U 3
+D 5
+U 12
+D 14
+L 9
+U 12
+R 6
+L 9
+U 3
+D 16
+U 15
+R 6
+D 11
+R 10
+D 3
+U 16
+L 11
+R 2
+L 2
+R 9
+D 12
+L 8
+D 8
+R 13
+L 5
+D 17
+L 7
+D 10
+U 13
+L 11
+U 17
+L 13
+R 2
+D 6
+R 14
+D 14
+L 15
+R 8
+D 4
+U 7
+L 6
+R 6
+U 7
+D 12
+R 9
+L 8
+D 15
+L 14
+R 1
+U 8
+L 13
+D 16
+R 2
+U 2
+L 2
+D 13
+U 8
+D 6
+U 10
+L 9
+R 2
+L 7
+U 5
+R 6
+U 12
+D 3
+R 1
+U 4
+R 17
+U 11
+L 3
+U 13
+L 12
+U 6
+R 5
+D 12
+R 4
+U 4
+R 3
+D 11
+U 7
+L 10
+D 12
+U 12
+D 9
+R 4
+L 2
+R 9
+L 13
+D 16
+L 14
+D 5
+L 8
+D 6
+L 13
+U 1
+R 7
+U 5
+R 2
+U 11
+L 10
+D 14
+R 11
+L 5
+D 16
+U 9
+D 3
+U 11
+D 1
+U 5
+D 3
+U 8
+L 1
+D 1
+U 5
+L 17
+D 9
+L 14
+R 8
+D 15
+R 10
+U 4
+R 1
+U 3
+R 5
+L 13
+D 6
+L 15
+U 10
+L 5
+R 14
+L 1
+R 6
+D 10
+L 13
+D 3
+L 1
+U 10
+D 6
+R 16
+D 6
+R 4
+D 9
+U 9
+D 4
+R 1
+D 10
+R 7
+D 14
+R 10
+D 14
+U 14
+D 15
+R 11
+L 16
+D 18
+R 6
+U 8
+D 18
+R 18
+D 14
+U 9
+R 18
+U 14
+L 18
+U 1
+R 14
+D 1
+U 6
+R 3
+L 13
+D 4
+L 9
+D 2
+U 5
+D 6
+U 9
+L 13
+U 12
+R 11
+D 17
+U 17
+L 8
+U 15
+R 16
+L 9
+D 2
+R 16
+D 2
+L 9
+D 9
+R 15
+D 10
+L 12
+R 14
+L 4
+R 17
+D 15
+U 16
+R 7
+D 4
+U 4
+L 7
+D 16
+R 11
+D 2
+U 2
+L 7
+U 15
+L 5
+U 14
+L 7
+U 15
+D 9
+L 14
+D 13
+U 11
+R 10
+U 15
+L 5
+U 16
+D 13
+U 15
+L 18
+R 1
+D 17
+U 18
+R 19
+L 4
+R 15
+U 12
+D 19
+R 5
+D 18
+L 14
+U 5
+L 4
+R 6
+U 15
+L 7
+R 11
+L 15
+U 12
+D 3
+R 14
+U 1
+L 4
+R 3
+U 15
+L 15
+R 6
+L 3
+U 2
+D 6
+L 6
+D 16
+L 19
+U 9
+L 2
+R 13
+U 8
+R 17
+D 17
+L 4
+R 2
+L 7
+R 11
+D 5
+L 14
+D 7
+R 13
+D 2
+L 18
+U 11
+R 2
+D 18
+U 2
+D 6
+L 4
+U 2
+L 15
+R 4
+D 8
+R 1
+U 16
+L 4
+R 5
+U 16
+D 14
+U 2
+D 19
+L 6
+D 14
+U 17
+L 3
+R 11
+L 2
+R 11
+U 11
+D 4
+U 13
+L 6
+U 14
+D 17
+U 15
+D 7
+R 8
+U 3
+R 15
+D 17
+U 16
+R 3
+D 17
+L 9
+U 15
+R 15
+L 11
+R 18
+D 16
+R 17
+D 3
+L 17
+D 4
+L 10
+U 2
+R 2
+D 9
+L 17
+R 19
diff --git a/2022/src/bin/day_9.rs b/2022/src/bin/day_9.rs
new file mode 100644
index 0000000..ccbb66a
--- /dev/null
+++ b/2022/src/bin/day_9.rs
@@ -0,0 +1,134 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{i32, line_ending},
+ combinator::{map, value},
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{collections::BTreeSet, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_9.txt")?;
+ let movements = Movements::parser(&input).unwrap().1;
+
+ let mut game_board_part_1 = GameBoard::new(2);
+ for instruction in &movements.0 {
+ game_board_part_1.step(instruction);
+ }
+ dbg!(game_board_part_1.tail_visited.len());
+
+ let mut game_board_part_2 = GameBoard::new(10);
+ for instruction in &movements.0 {
+ game_board_part_2.step(instruction);
+ }
+ dbg!(game_board_part_2.tail_visited.len());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct Movements(Vec<Instruction>);
+
+#[derive(Debug)]
+struct Instruction {
+ direction: Direction,
+ distance: i32,
+}
+
+#[derive(Debug, Clone, Copy)]
+enum Direction {
+ Down,
+ Up,
+ Left,
+ Right,
+}
+
+impl Movements {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, Instruction::parser), Movements)(input)
+ }
+}
+
+impl Instruction {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((Direction::parser, tag(" "), i32)),
+ |(direction, _, distance)| Instruction {
+ direction,
+ distance,
+ },
+ )(input)
+ }
+}
+
+impl Direction {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(Direction::Down, tag("D")),
+ value(Direction::Up, tag("U")),
+ value(Direction::Left, tag("L")),
+ value(Direction::Right, tag("R")),
+ ))(input)
+ }
+}
+
+#[derive(Debug)]
+struct GameBoard {
+ rope: Vec<Position>,
+ tail_visited: BTreeSet<Position>,
+}
+
+#[derive(Default, Debug, PartialEq, Eq, PartialOrd, Ord, Clone)]
+struct Position {
+ x: i32,
+ y: i32,
+}
+
+impl GameBoard {
+ fn new(length: usize) -> GameBoard {
+ let mut tail_visited = BTreeSet::new();
+ tail_visited.insert(Position::default());
+ GameBoard {
+ rope: vec![Position::default(); length],
+ tail_visited,
+ }
+ }
+
+ fn step(&mut self, instruction: &Instruction) {
+ for _ in 0..instruction.distance {
+ match instruction.direction {
+ Direction::Down => self.rope[0].y -= 1,
+ Direction::Up => self.rope[0].y += 1,
+ Direction::Left => self.rope[0].x -= 1,
+ Direction::Right => self.rope[0].x += 1,
+ };
+
+ for tail_i in 1..self.rope.len() {
+ let head_i = tail_i - 1;
+ let head = self.rope[head_i].clone();
+ let tail = &mut self.rope[tail_i];
+
+ let tail_must_move = (head.x - tail.x).abs() > 1 || (head.y - tail.y).abs() > 1;
+
+ if tail_must_move {
+ if head.x > tail.x {
+ tail.x += 1;
+ } else if head.x < tail.x {
+ tail.x -= 1;
+ }
+
+ if head.y > tail.y {
+ tail.y += 1;
+ } else if head.y < tail.y {
+ tail.y -= 1;
+ }
+ }
+ }
+
+ self.tail_visited
+ .insert(self.rope[self.rope.len() - 1].clone());
+ }
+ }
+}