about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2022-12-10 17:33:38 +0100
committerLeah Neukirchen <leah@vuxu.org>2022-12-10 17:33:38 +0100
commit83626650335a6dd0d0db52dabf404df03dea7d9f (patch)
treef1d9faf7a774b8d573166aff9acb818be5db2a59
parent885fad8aa91cd7db112d49aefc6d50621c32716f (diff)
downloadadventofcode2022-83626650335a6dd0d0db52dabf404df03dea7d9f.tar.gz
adventofcode2022-83626650335a6dd0d0db52dabf404df03dea7d9f.tar.xz
adventofcode2022-83626650335a6dd0d0db52dabf404df03dea7d9f.zip
day09
-rw-r--r--day092000
-rw-r--r--day09.rkt38
-rw-r--r--day09.zig68
3 files changed, 2106 insertions, 0 deletions
diff --git a/day09 b/day09
new file mode 100644
index 0000000..5081a08
--- /dev/null
+++ b/day09
@@ -0,0 +1,2000 @@
+R 1
+U 2
+L 1
+R 2
+L 1
+U 2
+R 2
+L 2
+R 2
+U 2
+L 2
+R 2
+L 1
+D 2
+R 2
+L 1
+R 1
+L 2
+U 2
+L 1
+R 1
+U 2
+D 2
+U 1
+L 2
+R 1
+D 2
+L 1
+D 2
+U 1
+R 2
+L 1
+R 1
+L 1
+U 2
+R 2
+L 2
+R 1
+D 1
+U 1
+R 2
+D 2
+U 1
+D 2
+U 2
+R 2
+U 1
+D 1
+L 1
+D 1
+L 1
+U 1
+R 1
+L 2
+R 1
+D 2
+U 1
+L 2
+U 2
+D 2
+L 2
+R 2
+L 1
+U 2
+D 1
+R 1
+U 2
+L 1
+D 1
+U 1
+L 1
+U 1
+D 1
+U 2
+R 1
+D 2
+L 1
+U 2
+R 1
+D 2
+R 1
+D 1
+L 1
+R 1
+L 2
+D 1
+U 1
+L 2
+D 2
+L 1
+D 2
+L 1
+U 2
+D 1
+R 2
+L 1
+U 1
+D 2
+L 1
+U 2
+L 2
+R 2
+L 1
+R 2
+L 2
+R 2
+D 1
+U 1
+R 2
+U 2
+D 2
+R 2
+L 1
+R 1
+U 3
+L 3
+U 2
+L 1
+D 2
+U 3
+L 1
+R 1
+D 2
+L 1
+D 3
+L 3
+U 2
+L 1
+D 3
+R 1
+D 2
+U 1
+R 1
+U 2
+R 1
+L 3
+U 3
+D 1
+L 3
+D 1
+U 1
+D 3
+L 3
+U 2
+D 3
+R 3
+D 1
+R 3
+D 3
+R 1
+U 1
+D 2
+R 3
+L 1
+U 2
+L 1
+U 3
+R 2
+L 1
+D 2
+U 3
+D 2
+R 3
+L 1
+R 3
+L 1
+R 1
+D 2
+U 2
+D 3
+U 3
+L 1
+R 3
+D 1
+R 1
+D 3
+L 1
+U 3
+R 2
+D 3
+R 3
+D 2
+L 1
+U 2
+D 3
+R 3
+D 1
+L 3
+U 3
+L 2
+R 1
+L 2
+D 1
+L 3
+R 2
+U 1
+R 3
+D 1
+L 1
+R 2
+D 3
+U 1
+R 2
+L 1
+D 2
+R 2
+U 2
+L 2
+R 2
+D 3
+R 1
+U 1
+R 2
+U 1
+D 2
+L 1
+R 3
+D 3
+L 2
+D 1
+R 3
+D 2
+U 4
+R 3
+D 3
+U 3
+R 3
+U 2
+R 2
+U 4
+R 3
+D 1
+L 1
+U 3
+D 2
+L 4
+D 2
+R 2
+L 2
+D 2
+U 1
+R 2
+D 3
+U 3
+R 1
+U 4
+D 1
+L 2
+R 1
+U 2
+L 4
+D 4
+R 3
+U 1
+D 3
+R 2
+L 2
+U 2
+D 1
+R 1
+U 1
+D 2
+L 2
+U 2
+R 4
+U 2
+D 4
+U 2
+D 2
+U 3
+L 2
+D 1
+L 1
+D 4
+L 3
+D 2
+R 4
+U 1
+D 4
+U 3
+R 3
+L 1
+D 1
+L 4
+R 4
+U 1
+D 4
+L 1
+R 3
+L 1
+R 4
+L 4
+D 2
+U 3
+D 3
+L 4
+D 2
+R 4
+D 3
+L 2
+R 4
+D 2
+L 2
+R 2
+D 4
+R 1
+D 3
+L 2
+U 1
+D 1
+R 3
+D 3
+R 3
+D 3
+L 4
+R 3
+D 3
+U 3
+R 1
+L 4
+R 3
+L 2
+D 3
+L 4
+R 1
+D 4
+L 3
+U 4
+L 4
+D 1
+R 3
+D 4
+R 3
+L 3
+U 1
+L 1
+U 2
+R 3
+U 2
+R 5
+D 1
+U 3
+L 2
+U 1
+R 5
+L 2
+R 4
+U 4
+R 1
+D 3
+L 4
+D 5
+L 4
+U 1
+R 1
+U 2
+L 5
+U 4
+R 3
+D 2
+U 5
+D 1
+R 2
+D 3
+U 3
+L 1
+R 4
+L 5
+U 1
+L 3
+D 5
+L 1
+U 1
+D 3
+U 4
+D 2
+U 1
+D 1
+R 4
+U 2
+D 4
+U 4
+D 3
+U 3
+D 3
+U 4
+R 5
+L 4
+U 2
+R 2
+U 1
+L 5
+U 5
+D 5
+R 5
+D 2
+R 3
+D 1
+R 3
+D 2
+R 3
+L 4
+U 3
+D 4
+U 1
+L 2
+U 5
+D 3
+U 5
+L 4
+D 2
+L 2
+U 3
+L 2
+D 5
+L 3
+R 1
+U 1
+D 4
+L 4
+U 4
+L 5
+U 1
+D 1
+R 1
+U 5
+D 2
+R 4
+D 5
+L 3
+D 5
+L 4
+U 3
+L 2
+U 1
+L 2
+U 4
+L 4
+R 2
+L 4
+R 1
+U 4
+D 3
+U 1
+L 6
+U 5
+L 4
+D 6
+L 4
+U 5
+R 3
+U 6
+L 5
+U 5
+D 1
+R 2
+U 6
+R 6
+L 3
+R 5
+U 1
+R 6
+D 6
+R 6
+U 2
+L 1
+D 6
+L 5
+R 6
+D 4
+U 2
+L 1
+U 6
+L 1
+U 4
+D 5
+L 6
+R 1
+L 5
+U 2
+L 1
+U 3
+R 6
+L 2
+D 3
+L 1
+R 1
+U 2
+L 4
+D 2
+U 6
+L 5
+R 5
+D 3
+U 1
+R 5
+L 4
+R 5
+U 6
+D 4
+R 4
+D 4
+U 5
+D 5
+L 2
+U 5
+D 3
+U 5
+D 4
+U 5
+R 6
+U 2
+L 6
+U 5
+R 5
+D 6
+U 1
+L 6
+R 6
+U 6
+L 4
+D 5
+R 2
+L 1
+R 3
+L 6
+R 3
+D 5
+R 6
+D 2
+L 4
+D 5
+R 1
+L 3
+R 2
+L 5
+R 6
+L 3
+R 4
+L 6
+U 3
+L 5
+R 2
+L 4
+U 2
+D 4
+R 1
+L 4
+U 2
+D 4
+R 5
+L 5
+U 4
+D 5
+L 6
+R 4
+D 4
+U 4
+R 3
+D 7
+L 2
+D 5
+L 4
+D 1
+L 1
+R 5
+U 4
+D 1
+L 2
+D 2
+L 3
+D 2
+R 7
+U 1
+D 5
+R 6
+L 3
+U 3
+L 6
+D 5
+U 1
+L 7
+D 5
+R 6
+L 6
+U 1
+R 6
+U 6
+R 4
+U 7
+D 2
+U 6
+D 4
+L 5
+D 5
+L 5
+R 3
+D 4
+U 2
+L 3
+R 1
+U 7
+R 4
+L 5
+R 1
+U 4
+D 1
+U 5
+D 7
+U 4
+D 6
+L 2
+R 6
+L 2
+U 5
+D 7
+L 3
+D 6
+U 4
+L 2
+R 6
+D 1
+R 3
+U 3
+L 5
+R 2
+U 5
+D 4
+R 6
+D 3
+R 5
+U 3
+D 5
+R 3
+U 6
+D 7
+R 5
+D 5
+L 1
+D 5
+R 1
+D 6
+R 2
+D 3
+R 1
+D 3
+U 6
+L 1
+R 5
+D 2
+L 7
+U 3
+R 7
+L 2
+U 1
+D 2
+L 4
+R 4
+L 2
+D 3
+R 1
+U 1
+L 1
+R 3
+U 7
+R 4
+U 1
+R 2
+L 1
+R 5
+L 1
+R 1
+U 1
+R 6
+L 1
+R 7
+L 3
+D 4
+L 7
+R 6
+D 7
+R 3
+U 5
+R 8
+D 4
+L 5
+D 4
+U 4
+L 4
+R 5
+L 3
+R 2
+L 5
+R 7
+L 7
+R 7
+D 1
+L 2
+D 5
+L 8
+R 8
+L 7
+D 4
+R 7
+L 1
+D 8
+R 6
+D 4
+R 3
+D 7
+R 4
+U 3
+L 1
+U 2
+L 6
+D 8
+R 3
+U 2
+R 7
+D 2
+L 6
+R 3
+U 2
+R 6
+U 5
+D 7
+L 7
+R 8
+D 8
+R 7
+D 8
+R 2
+D 6
+R 3
+U 6
+D 7
+U 3
+D 3
+R 6
+U 5
+L 7
+D 5
+L 8
+R 6
+L 1
+U 7
+R 3
+D 4
+U 5
+D 3
+L 1
+U 7
+R 6
+L 2
+D 2
+R 6
+L 1
+U 7
+D 2
+U 6
+R 4
+D 7
+U 6
+R 5
+L 1
+D 6
+L 5
+U 6
+R 6
+L 8
+U 5
+R 1
+L 2
+U 1
+R 7
+L 5
+U 3
+D 4
+R 7
+U 9
+D 4
+L 8
+R 5
+L 7
+R 1
+U 7
+D 8
+R 2
+U 1
+L 3
+R 3
+D 8
+U 5
+R 8
+L 6
+R 7
+D 5
+U 6
+D 4
+L 3
+D 9
+R 1
+L 3
+D 8
+U 5
+L 4
+U 1
+R 7
+L 4
+R 3
+L 4
+R 9
+L 4
+U 7
+R 4
+D 3
+R 7
+D 1
+L 7
+R 5
+L 1
+U 4
+D 8
+U 4
+L 2
+D 1
+U 8
+R 9
+D 2
+R 1
+D 4
+U 4
+R 1
+L 1
+U 4
+L 3
+D 9
+L 7
+D 7
+U 3
+D 9
+L 7
+U 1
+L 3
+R 2
+D 9
+U 1
+D 7
+R 3
+U 6
+D 9
+U 2
+L 3
+U 3
+R 1
+U 5
+D 2
+L 7
+U 8
+L 5
+U 7
+R 8
+D 6
+R 8
+U 2
+R 1
+U 8
+R 1
+L 1
+D 9
+L 2
+U 4
+L 4
+D 6
+L 1
+U 6
+R 8
+U 7
+D 4
+L 2
+D 6
+R 7
+L 9
+R 8
+U 2
+D 4
+R 7
+D 3
+U 1
+R 7
+D 2
+R 9
+D 4
+U 10
+R 9
+L 9
+D 4
+L 7
+U 1
+D 10
+L 10
+R 9
+D 1
+U 9
+L 4
+R 4
+U 2
+R 9
+U 4
+L 10
+D 7
+L 7
+U 9
+R 9
+D 3
+U 2
+R 10
+L 1
+U 3
+L 4
+D 10
+L 7
+D 6
+R 2
+D 7
+L 3
+U 1
+R 1
+D 3
+U 10
+R 2
+L 3
+U 4
+R 6
+U 1
+R 10
+L 4
+D 3
+U 9
+R 8
+L 7
+U 7
+D 5
+U 5
+D 5
+L 1
+U 9
+R 10
+L 9
+D 1
+L 1
+R 4
+L 6
+R 9
+U 4
+D 8
+U 9
+R 9
+U 7
+R 8
+U 1
+L 9
+D 3
+L 1
+U 3
+D 10
+U 8
+D 5
+L 3
+R 4
+D 4
+R 1
+D 1
+R 3
+L 6
+R 7
+D 7
+R 8
+L 4
+D 4
+U 1
+D 9
+R 2
+L 10
+R 8
+L 9
+D 6
+R 1
+D 2
+L 7
+D 6
+U 9
+D 9
+R 2
+D 5
+L 4
+U 3
+L 1
+R 4
+L 8
+D 4
+L 2
+D 2
+R 11
+D 3
+R 2
+U 8
+L 8
+D 8
+R 7
+U 1
+D 4
+L 4
+U 2
+R 6
+D 5
+R 4
+L 2
+U 6
+D 7
+R 8
+L 3
+R 10
+U 9
+L 6
+U 4
+L 3
+U 3
+L 1
+U 2
+R 11
+D 5
+R 10
+U 9
+D 11
+L 3
+U 5
+D 9
+U 7
+D 9
+L 6
+R 6
+D 4
+L 9
+D 3
+U 7
+D 6
+R 7
+U 6
+L 2
+U 1
+R 7
+U 10
+L 9
+U 3
+R 3
+U 6
+L 8
+R 10
+L 3
+R 2
+D 4
+L 8
+U 11
+D 1
+R 11
+U 4
+R 10
+L 8
+U 8
+L 9
+R 3
+D 4
+U 2
+R 1
+D 8
+L 7
+R 8
+U 2
+R 1
+D 1
+U 5
+R 2
+D 7
+R 8
+D 6
+L 5
+U 10
+R 5
+D 2
+L 7
+R 5
+U 2
+L 6
+R 10
+L 4
+R 7
+L 8
+R 1
+D 3
+U 9
+D 6
+U 7
+R 5
+D 4
+L 8
+D 5
+U 6
+L 1
+U 4
+R 6
+D 1
+U 2
+D 3
+L 3
+U 4
+L 4
+U 10
+L 3
+U 11
+R 12
+U 3
+R 4
+L 10
+U 10
+R 12
+L 6
+R 1
+U 3
+R 1
+L 12
+D 11
+L 4
+R 11
+L 3
+D 9
+U 8
+D 4
+R 9
+D 6
+L 1
+R 7
+L 8
+R 11
+D 7
+U 3
+L 7
+R 3
+U 10
+D 12
+L 3
+U 3
+R 8
+D 5
+L 6
+D 1
+L 1
+D 9
+R 10
+U 1
+D 1
+L 1
+R 5
+U 1
+L 2
+D 10
+L 3
+U 8
+L 10
+R 3
+D 9
+U 10
+D 5
+U 9
+D 7
+U 4
+R 10
+D 2
+L 4
+D 10
+L 1
+U 10
+L 12
+D 3
+L 11
+U 10
+L 7
+U 3
+D 6
+U 12
+R 9
+U 11
+D 12
+U 5
+R 2
+L 6
+U 10
+R 3
+D 12
+R 10
+U 12
+R 12
+L 6
+R 9
+L 1
+R 6
+U 6
+D 11
+R 10
+D 4
+L 3
+U 3
+L 12
+R 10
+L 12
+U 7
+R 3
+L 1
+D 6
+U 11
+L 8
+D 8
+R 13
+D 6
+R 4
+D 5
+U 10
+R 13
+D 11
+U 13
+L 11
+R 4
+D 13
+U 12
+R 3
+L 9
+D 2
+U 8
+D 5
+L 10
+U 13
+L 4
+D 13
+R 8
+L 11
+R 12
+L 11
+U 6
+L 12
+R 7
+U 5
+D 11
+R 13
+U 6
+R 10
+U 11
+R 1
+U 7
+D 13
+R 4
+U 3
+D 4
+R 3
+D 3
+U 13
+D 4
+R 2
+L 2
+U 1
+D 9
+L 6
+D 13
+U 12
+L 13
+U 5
+D 11
+R 4
+D 9
+R 9
+L 5
+U 3
+R 3
+U 11
+R 6
+D 9
+U 3
+D 13
+L 3
+U 8
+D 5
+L 3
+U 1
+R 9
+L 5
+R 10
+D 5
+R 7
+D 9
+R 5
+U 13
+L 9
+R 3
+U 5
+D 7
+R 2
+D 2
+U 6
+R 4
+D 2
+R 5
+D 9
+U 12
+R 2
+U 8
+D 8
+R 1
+D 10
+L 6
+D 5
+U 9
+L 8
+R 13
+U 3
+R 8
+U 2
+L 11
+R 9
+U 8
+L 11
+D 10
+U 5
+L 10
+D 8
+R 1
+U 12
+D 4
+R 7
+L 11
+U 7
+R 12
+L 14
+U 3
+R 5
+U 4
+R 2
+L 14
+D 11
+L 1
+R 14
+L 14
+U 11
+D 5
+U 11
+D 4
+U 1
+R 13
+U 9
+R 14
+D 12
+R 6
+L 1
+R 9
+U 9
+R 5
+U 12
+D 3
+L 13
+D 2
+L 12
+U 10
+L 2
+U 7
+R 10
+U 7
+D 3
+U 7
+L 5
+U 10
+D 11
+L 12
+D 13
+L 9
+R 9
+U 8
+D 8
+R 13
+U 1
+R 6
+L 13
+U 13
+L 14
+U 6
+R 2
+U 10
+D 8
+L 1
+D 13
+U 2
+L 3
+U 13
+L 12
+R 3
+L 13
+D 5
+R 7
+U 7
+R 5
+U 14
+D 12
+U 3
+D 5
+U 12
+R 11
+L 5
+R 10
+L 1
+U 14
+D 13
+L 2
+R 2
+U 5
+R 10
+U 14
+D 9
+L 13
+R 3
+D 5
+L 6
+D 6
+R 9
+D 3
+R 8
+D 14
+L 12
+D 2
+L 5
+R 2
+D 3
+R 3
+U 13
+R 6
+U 12
+L 7
+U 8
+D 1
+R 11
+U 11
+R 4
+U 15
+R 9
+U 10
+R 2
+L 13
+D 8
+R 5
+U 9
+D 8
+L 13
+U 3
+D 4
+L 10
+R 7
+D 15
+R 14
+U 6
+L 13
+U 4
+R 13
+L 8
+D 4
+R 1
+D 14
+R 6
+U 4
+R 3
+L 6
+R 2
+D 12
+L 13
+U 6
+R 11
+L 8
+D 2
+R 15
+U 5
+R 15
+U 2
+D 2
+R 4
+D 2
+R 15
+U 12
+L 1
+R 7
+U 13
+D 11
+U 10
+D 11
+R 5
+L 5
+D 9
+U 5
+R 6
+U 1
+L 12
+R 4
+U 7
+L 3
+D 9
+U 1
+R 1
+L 4
+U 6
+L 4
+R 8
+L 8
+U 10
+D 3
+L 4
+D 11
+L 8
+U 6
+R 2
+D 4
+U 11
+R 6
+D 9
+U 12
+R 1
+U 9
+L 2
+D 14
+R 1
+L 8
+U 3
+R 12
+D 11
+L 10
+R 12
+L 9
+U 11
+R 11
+U 15
+R 1
+L 6
+U 7
+R 1
+D 3
+U 12
+D 2
+R 6
+U 11
+L 11
+D 8
+R 15
+U 12
+L 8
+R 9
+D 9
+U 1
+D 2
+U 15
+D 5
+L 13
+D 2
+L 10
+R 8
+D 16
+U 3
+L 15
+U 8
+D 7
+R 10
+D 11
+U 15
+R 4
+L 9
+D 16
+R 13
+U 16
+D 16
+L 1
+R 1
+L 6
+U 12
+D 9
+L 3
+U 10
+R 15
+L 4
+R 5
+D 3
+R 8
+L 7
+D 16
+L 10
+R 8
+U 7
+L 2
+U 13
+L 4
+U 9
+D 5
+U 14
+D 12
+U 16
+L 13
+R 11
+L 6
+R 10
+U 5
+D 8
+R 11
+L 4
+U 1
+R 15
+L 10
+R 6
+D 9
+L 12
+R 10
+D 16
+U 8
+D 16
+R 1
+L 3
+R 10
+L 9
+U 6
+R 8
+L 16
+R 9
+L 5
+U 16
+L 4
+R 10
+U 9
+L 6
+D 1
+U 13
+R 5
+L 2
+U 16
+R 6
+U 12
+L 3
+R 7
+D 1
+L 4
+R 13
+D 5
+L 16
+R 4
+U 3
+L 12
+U 2
+L 15
+D 9
+R 10
+L 5
+U 6
+L 7
+D 12
+L 9
+D 4
+U 4
+D 3
+U 15
+D 2
+L 4
+U 4
+D 15
+L 11
+D 8
+L 12
+U 2
+L 11
+R 6
+U 15
+D 14
+L 8
+D 11
+L 16
+R 16
+L 14
+U 2
+L 10
+R 14
+L 12
+D 10
+R 6
+U 11
+D 12
+L 7
+U 16
+R 6
+L 16
+U 2
+L 14
+R 6
+L 8
+U 13
+D 5
+L 3
+R 3
+D 11
+U 11
+L 12
+R 6
+D 3
+R 13
+D 9
+R 3
+L 15
+R 17
+U 17
+L 12
+R 17
+L 7
+R 11
+U 17
+L 4
+U 7
+L 9
+R 10
+D 9
+L 1
+R 3
+L 3
+R 16
+U 5
+D 5
+L 9
+U 2
+R 14
+U 14
+L 6
+R 6
+U 13
+R 10
+D 8
+R 14
+U 2
+L 4
+U 7
+R 17
+U 9
+D 3
+L 13
+R 14
+D 2
+R 3
+L 9
+D 2
+R 3
+D 12
+R 16
+D 17
+L 13
+D 8
+R 7
+U 4
+R 6
+D 5
+L 17
+U 13
+R 1
+U 6
+R 5
+U 10
+D 6
+L 2
+D 11
+U 12
+R 12
+L 5
+D 16
+U 12
+D 9
+L 7
+D 12
+U 5
+R 8
+L 4
+D 5
+R 3
+U 17
+R 5
+D 4
+R 13
+D 7
+R 17
+U 15
+D 10
+U 15
+L 9
+D 17
+R 1
+L 9
+D 18
+L 11
+R 18
+L 14
+R 5
+D 15
+R 13
+U 2
+L 10
+D 15
+R 7
+U 13
+D 6
+U 13
+R 5
+U 12
+L 6
+R 16
+D 16
+U 10
+L 18
+U 3
+R 6
+L 6
+U 15
+L 7
+D 4
+U 18
+R 2
+U 18
+L 2
+U 11
+L 11
+D 13
+L 13
+D 15
+U 8
+D 1
+U 8
+L 4
+U 4
+D 10
+R 4
+D 13
+L 18
+U 5
+L 15
+U 3
+D 12
+L 2
+R 13
+D 6
+L 12
+R 7
+U 1
+D 16
+R 18
+D 5
+U 15
+D 14
+U 2
+L 5
+R 16
+D 1
+U 16
+D 11
+R 11
+L 4
+R 10
+D 18
+U 13
+R 18
+L 15
+R 5
+U 13
+D 15
+L 13
+D 9
+R 8
+D 5
+U 8
+R 13
+D 16
+L 9
+U 16
+L 12
+U 17
+R 16
+D 16
+R 9
+U 7
+R 11
+L 15
+D 4
+U 16
+R 2
+U 16
+R 13
+U 1
+R 1
+L 4
+U 19
+L 12
+D 1
+L 12
+R 15
+U 6
+R 16
+U 2
+D 8
+R 8
+U 13
+L 4
+R 11
+L 11
+U 8
+L 1
+R 12
+L 8
+R 8
+D 13
+U 1
+L 13
+R 17
+U 17
+L 13
+R 5
+D 15
+R 11
+D 9
+L 15
+U 9
+L 9
+R 5
+L 12
+R 16
+D 4
+L 4
+D 1
+R 12
+D 15
+R 7
+U 8
+L 18
+R 16
+D 7
+U 13
+L 11
+U 17
+R 14
+L 13
+D 7
+R 7
+L 17
+U 3
+L 12
+R 15
+L 17
+D 11
+U 2
+D 1
+R 13
+U 14
+R 12
+L 18
+D 2
+R 1
+L 15
+D 16
+R 5
+L 11
+D 7
+U 19
+R 11
+U 8
+R 1
+U 12
+R 7
+U 9
+D 19
+R 15
+U 18
+R 19
+D 19
+L 17
+U 11
+L 16
+U 11
+D 5
+R 13
+U 1
+L 7
+D 2
+L 2
+U 5
+L 5
+R 6
+U 4
+D 1
+L 17
+D 13
diff --git a/day09.rkt b/day09.rkt
new file mode 100644
index 0000000..1f3ca37
--- /dev/null
+++ b/day09.rkt
@@ -0,0 +1,38 @@
+#lang racket
+(require racket/set)
+
+(define (scan f i l)
+  (if (null? l)
+    l
+    (let ((v (f i (car l))))
+      (cons v (scan f v (cdr l))))))
+
+(define/match (move-after head tail)
+  [((list hx hy) (list tx ty))
+   (if (and (<= (abs (- hx tx)) 1)
+            (<= (abs (- hy ty)) 1))
+     tail
+     (list (+ tx (sgn (- hx tx)))
+           (+ ty (sgn (- hy ty)))))])
+
+(for/list ([rope-length '(1 9)])
+  (let ([visited (mutable-set)]
+        [head '(0 0)]
+        [tail (make-list rope-length '(0 0))])
+
+    (set-add! visited (last tail))
+    (for ([line (file->lines "day09")])
+      (let* ([parts (string-split line " ")]
+             [dir (string->symbol (first parts))]
+             [n (string->number (second parts))])
+        (for ([_ (in-range n)])
+          (set! head (map + head (case dir
+                                   [(L) '(-1 0)]
+                                   [(R) '(1 0)]
+                                   [(U) '(0 1)]
+                                   [(D) '(0 -1)])))
+          (set! tail (scan move-after head tail))
+          (set-add! visited (last tail)))))
+    (set-count visited)))
+; 6494
+; 2691
diff --git a/day09.zig b/day09.zig
new file mode 100644
index 0000000..6f44ab0
--- /dev/null
+++ b/day09.zig
@@ -0,0 +1,68 @@
+const std = @import("std");
+const data = @embedFile("day09");
+
+var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){};
+const gpa = general_purpose_allocator.allocator();
+
+const Pair = struct { x: i32, y: i32 };
+
+fn signum(n: i32) i32 {
+    if (n > 0) return 1;
+    if (n < 0) return -1;
+    return 0;
+}
+
+fn move_after(head: Pair, tail: Pair) Pair {
+    if (std.math.absInt(head.x - tail.x) catch unreachable <= 1 and
+        std.math.absInt(head.y - tail.y) catch unreachable <= 1)
+        return tail;
+    return .{ .x = tail.x + signum(head.x - tail.x),
+              .y = tail.y + signum(head.y - tail.y) };
+}
+
+fn solve(comptime ropelen: usize) !usize {
+    var lines = std.mem.tokenize(u8, data, "\n");
+
+    var visited = std.AutoHashMap(Pair, void).init(gpa);
+    defer visited.deinit();
+
+    var rope = [_]Pair{.{.x = 0, .y = 0}} ** ropelen;
+
+    try visited.put(rope[ropelen-1], {});
+
+    while (lines.next()) |line| {
+        if (line.len == 0)
+            break;
+
+        var parts = std.mem.tokenize(u8, line, " ");
+        var dir = parts.next().?[0];
+        var amt = try std.fmt.parseInt(usize, parts.next().?, 10);
+
+        var n: usize = 0;
+        while (n < amt) : (n += 1) {
+            switch (dir) {
+                'L' => rope[0].x -= 1,
+                'R' => rope[0].x += 1,
+                'U' => rope[0].y -= 1,
+                'D' => rope[0].y += 1,
+                else => unreachable,
+            }
+
+            var i: usize = 1;
+            while (i < ropelen) : (i += 1) {
+                rope[i] = move_after(rope[i-1], rope[i]);
+            }
+
+            try visited.put(rope[ropelen-1], {});
+        }
+    }
+
+    return visited.count();
+}
+
+pub fn main() !void {
+    defer std.debug.assert(!general_purpose_allocator.deinit());
+
+    std.debug.print("{}\n", .{try solve(2)});
+    std.debug.print("{}\n", .{try solve(10)});
+}