aboutsummaryrefslogtreecommitdiff
path: root/day09
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2022-12-09 12:04:12 +0000
committerNat Lasseter <user@4574.co.uk>2022-12-09 12:04:12 +0000
commitb32c6103cbef9f1c581ebfe521e21fe86bbf7978 (patch)
tree190abc2bd9eb0ea4eb8c7b0556ab9f45a6f47c18 /day09
parentf45b1f2267caeea14613adf79b3d91859a00b3ce (diff)
Day 09
Diffstat (limited to 'day09')
-rw-r--r--day09/input2000
-rw-r--r--day09/part1.rb80
-rw-r--r--day09/part2.rb93
-rw-r--r--day09/test8
-rw-r--r--day09/test28
5 files changed, 2189 insertions, 0 deletions
diff --git a/day09/input b/day09/input
new file mode 100644
index 0000000..376a293
--- /dev/null
+++ b/day09/input
@@ -0,0 +1,2000 @@
+L 2
+D 2
+U 1
+R 1
+U 2
+D 1
+L 1
+D 1
+R 2
+D 2
+U 1
+R 2
+U 2
+R 2
+U 2
+L 2
+U 2
+L 2
+U 1
+D 1
+L 1
+R 1
+U 2
+R 2
+D 1
+U 2
+L 1
+U 2
+L 2
+D 2
+R 1
+U 2
+R 2
+U 1
+D 1
+L 1
+U 2
+L 2
+D 1
+U 1
+R 2
+D 2
+R 1
+D 1
+L 1
+R 2
+U 1
+L 1
+D 2
+U 2
+D 1
+L 1
+R 1
+U 1
+D 1
+R 2
+D 2
+R 1
+D 2
+L 1
+D 2
+L 1
+U 2
+R 1
+L 1
+U 2
+L 2
+D 2
+R 2
+L 1
+U 2
+R 1
+U 2
+R 2
+L 2
+D 2
+R 1
+L 1
+D 1
+L 1
+U 2
+L 2
+D 2
+L 2
+U 1
+R 2
+U 1
+R 2
+D 2
+U 1
+R 1
+U 2
+R 2
+L 1
+U 2
+L 1
+U 2
+L 1
+U 1
+R 2
+U 2
+L 1
+D 2
+U 1
+L 2
+U 2
+D 2
+U 1
+D 1
+R 1
+D 2
+U 2
+R 2
+L 2
+R 2
+U 1
+L 2
+R 3
+D 2
+L 1
+R 1
+D 3
+U 3
+R 2
+L 3
+U 1
+L 3
+U 2
+L 2
+U 3
+D 2
+R 1
+U 1
+R 3
+U 2
+D 2
+U 3
+D 3
+L 2
+U 2
+L 3
+U 1
+R 1
+D 3
+L 1
+R 2
+U 1
+L 2
+D 1
+U 2
+L 2
+U 1
+D 1
+U 1
+R 3
+U 3
+R 2
+U 1
+D 1
+U 2
+D 1
+R 1
+U 3
+R 1
+U 3
+R 1
+U 2
+D 1
+L 1
+D 1
+L 1
+D 1
+U 1
+L 2
+R 2
+U 2
+L 3
+U 1
+D 1
+R 3
+U 1
+L 2
+R 1
+D 1
+R 3
+D 2
+U 2
+D 1
+R 1
+U 1
+D 1
+U 1
+D 3
+U 1
+L 3
+D 1
+R 2
+U 2
+R 2
+U 1
+R 2
+D 2
+L 3
+U 1
+D 1
+L 3
+U 3
+R 1
+U 3
+D 3
+L 3
+D 3
+L 2
+R 2
+U 2
+R 1
+U 2
+D 2
+U 2
+L 2
+R 1
+U 3
+R 4
+L 2
+R 4
+D 2
+R 2
+L 2
+R 2
+D 1
+U 2
+D 3
+R 1
+U 1
+D 4
+R 4
+L 1
+U 1
+D 2
+L 2
+R 3
+U 2
+L 3
+R 4
+U 3
+L 3
+D 4
+R 3
+L 2
+U 3
+D 1
+L 2
+U 3
+L 1
+D 2
+R 1
+D 4
+L 2
+R 4
+U 4
+L 2
+R 2
+D 4
+L 3
+U 3
+L 2
+U 2
+L 4
+D 2
+R 4
+D 1
+L 4
+U 4
+R 1
+U 4
+D 2
+R 2
+U 3
+L 1
+R 4
+U 3
+R 3
+U 4
+L 2
+D 3
+L 4
+R 2
+L 4
+D 4
+U 1
+L 2
+D 4
+R 1
+U 3
+R 1
+U 4
+L 1
+D 4
+U 2
+L 4
+U 1
+R 2
+U 4
+L 2
+D 3
+L 2
+U 4
+D 2
+L 3
+D 1
+U 4
+D 1
+L 4
+U 3
+R 3
+L 2
+R 2
+U 2
+D 2
+L 1
+U 4
+R 2
+L 3
+R 1
+U 4
+L 2
+U 4
+L 2
+U 3
+L 2
+R 3
+U 3
+L 2
+D 4
+R 3
+U 2
+L 3
+D 3
+R 4
+U 1
+R 3
+D 5
+U 1
+L 1
+R 5
+D 2
+L 3
+U 5
+D 3
+L 3
+D 1
+U 3
+R 2
+U 5
+L 2
+D 2
+L 5
+U 2
+D 5
+R 1
+U 1
+R 5
+L 4
+D 4
+R 2
+U 5
+D 5
+L 1
+R 2
+U 4
+L 2
+D 1
+L 5
+D 1
+R 3
+L 2
+R 4
+D 1
+R 4
+U 4
+L 1
+U 2
+D 5
+U 4
+L 3
+D 3
+R 3
+D 5
+L 2
+U 5
+R 3
+L 5
+R 4
+U 4
+R 3
+L 2
+D 4
+L 2
+U 1
+R 3
+L 2
+R 3
+L 5
+U 1
+L 2
+R 1
+D 3
+R 4
+L 2
+D 2
+R 4
+D 3
+L 5
+D 2
+L 4
+R 3
+L 3
+D 2
+R 5
+U 4
+R 4
+U 3
+L 4
+U 1
+R 4
+D 4
+U 1
+L 3
+U 1
+L 1
+R 4
+D 1
+U 3
+D 2
+R 3
+L 3
+U 2
+R 4
+D 4
+L 1
+R 5
+U 1
+L 2
+U 2
+R 4
+U 4
+R 2
+D 2
+U 3
+L 5
+D 4
+L 5
+D 1
+L 2
+D 4
+R 6
+L 3
+D 5
+R 3
+L 5
+R 5
+D 1
+R 3
+L 5
+R 5
+L 6
+R 4
+L 2
+R 5
+D 3
+U 1
+R 4
+D 2
+R 2
+L 6
+U 2
+R 5
+U 5
+L 3
+R 6
+L 6
+D 3
+L 1
+R 1
+L 1
+D 5
+L 4
+U 3
+D 5
+L 1
+U 6
+R 5
+D 6
+U 1
+D 5
+L 3
+D 5
+R 6
+U 2
+D 1
+L 4
+D 5
+R 2
+U 5
+R 4
+L 1
+R 2
+L 1
+R 2
+L 6
+U 2
+D 3
+R 5
+D 3
+L 4
+R 4
+D 1
+R 6
+D 1
+R 4
+L 3
+D 6
+L 5
+D 2
+R 1
+L 3
+R 2
+L 6
+D 4
+U 5
+R 6
+U 3
+D 2
+R 4
+L 6
+U 4
+L 2
+U 2
+L 1
+U 5
+D 1
+L 2
+U 1
+D 2
+L 1
+R 4
+U 4
+L 4
+D 4
+R 3
+D 6
+L 2
+U 4
+R 1
+L 2
+U 3
+L 6
+U 6
+R 3
+D 7
+U 4
+R 6
+L 6
+D 7
+L 5
+U 1
+R 2
+U 7
+D 5
+L 7
+R 2
+U 3
+R 7
+D 5
+L 2
+U 2
+R 3
+U 5
+R 3
+D 4
+R 4
+U 3
+L 6
+R 2
+D 7
+U 6
+D 1
+U 3
+R 3
+D 4
+R 6
+U 4
+L 3
+D 3
+R 4
+L 2
+D 1
+R 3
+U 6
+R 5
+U 3
+L 5
+R 5
+D 4
+U 3
+L 7
+U 7
+D 3
+U 1
+D 1
+U 1
+D 3
+L 5
+R 4
+U 6
+R 7
+D 2
+L 3
+R 2
+U 3
+D 2
+L 5
+D 7
+R 6
+D 1
+U 5
+D 7
+U 6
+D 4
+L 6
+D 4
+L 2
+D 7
+R 6
+L 3
+D 2
+L 3
+D 2
+U 6
+L 1
+R 2
+U 5
+L 5
+R 2
+U 6
+R 3
+L 7
+R 4
+D 7
+L 7
+D 6
+L 4
+D 2
+R 6
+L 1
+D 3
+U 6
+D 7
+U 1
+L 5
+D 7
+U 3
+R 3
+L 7
+D 2
+L 7
+U 5
+D 4
+R 3
+D 8
+R 7
+U 1
+R 8
+U 4
+D 5
+R 6
+L 5
+D 5
+L 7
+R 7
+U 4
+D 2
+L 7
+U 8
+D 6
+L 5
+D 2
+L 6
+U 6
+R 5
+U 5
+L 6
+U 5
+L 3
+U 4
+D 7
+R 3
+L 4
+R 7
+D 1
+R 5
+D 2
+R 8
+L 8
+U 8
+L 6
+U 5
+L 1
+U 6
+R 2
+U 4
+L 5
+R 2
+D 8
+L 1
+U 4
+R 6
+U 1
+L 4
+R 7
+L 8
+R 5
+U 5
+R 3
+L 3
+U 2
+D 8
+L 8
+R 4
+U 3
+D 3
+L 1
+R 8
+U 3
+L 8
+D 8
+U 7
+D 8
+L 3
+U 5
+D 7
+L 7
+U 5
+L 3
+R 6
+D 7
+R 1
+D 7
+L 5
+U 3
+D 5
+U 1
+L 2
+D 4
+U 5
+R 1
+L 6
+U 3
+L 1
+D 6
+R 1
+L 1
+R 3
+L 4
+U 6
+R 3
+U 8
+L 2
+U 3
+R 1
+D 5
+R 2
+U 2
+D 8
+L 3
+D 2
+R 8
+D 1
+L 3
+U 1
+D 8
+U 1
+L 2
+D 4
+R 3
+L 4
+D 3
+L 2
+D 4
+L 6
+U 6
+D 9
+U 5
+R 9
+D 1
+R 8
+L 9
+R 7
+D 5
+U 1
+L 1
+R 8
+U 3
+R 4
+L 2
+R 1
+D 6
+U 5
+D 6
+L 9
+R 2
+D 2
+R 8
+D 2
+R 3
+U 1
+L 1
+U 1
+L 1
+U 3
+D 9
+R 2
+U 1
+D 1
+R 6
+D 7
+L 9
+U 4
+L 7
+U 8
+D 8
+L 3
+D 9
+L 4
+D 8
+U 9
+L 9
+D 7
+U 7
+D 2
+L 4
+D 5
+L 5
+U 6
+D 8
+L 5
+U 9
+L 4
+U 3
+D 4
+R 9
+U 4
+D 7
+L 6
+R 7
+L 5
+U 5
+L 8
+D 3
+L 5
+U 7
+D 6
+U 3
+R 1
+D 8
+U 3
+L 8
+U 9
+R 1
+U 1
+L 3
+R 6
+U 5
+R 7
+U 4
+R 4
+L 8
+U 4
+L 9
+R 7
+D 6
+R 8
+U 9
+D 8
+L 3
+R 7
+U 1
+L 9
+R 2
+L 3
+D 6
+R 9
+D 1
+L 3
+D 4
+U 2
+D 9
+R 9
+U 3
+R 2
+D 3
+U 7
+L 4
+D 6
+R 3
+D 8
+U 4
+R 8
+U 6
+R 5
+L 5
+U 2
+D 1
+R 5
+U 9
+D 3
+L 5
+R 8
+U 2
+D 9
+R 5
+U 4
+L 7
+U 4
+D 6
+U 7
+D 1
+L 6
+U 7
+D 6
+L 3
+D 8
+U 1
+L 1
+U 9
+L 2
+U 4
+D 2
+R 8
+U 3
+R 8
+L 4
+U 3
+L 7
+U 7
+D 7
+R 7
+L 2
+U 6
+R 1
+U 7
+D 6
+L 1
+R 5
+L 7
+R 1
+D 7
+U 9
+D 9
+L 1
+D 10
+U 10
+L 2
+R 9
+L 1
+R 3
+U 8
+L 1
+R 2
+L 2
+U 2
+D 1
+U 5
+R 5
+D 7
+L 6
+D 2
+L 10
+U 10
+D 4
+L 10
+R 10
+U 5
+L 7
+R 10
+D 1
+L 8
+D 3
+U 7
+R 2
+D 7
+U 4
+L 3
+R 4
+L 10
+U 3
+L 5
+R 4
+D 3
+R 9
+L 9
+R 6
+U 5
+L 5
+R 11
+U 6
+L 11
+R 9
+D 5
+U 7
+L 8
+R 5
+U 11
+D 6
+L 9
+D 5
+L 2
+D 2
+R 4
+L 1
+D 10
+L 9
+R 6
+D 2
+L 11
+D 4
+R 5
+D 2
+R 8
+D 3
+L 1
+R 11
+D 1
+L 11
+D 7
+L 5
+U 7
+D 4
+L 7
+U 11
+L 3
+U 7
+L 2
+D 6
+R 1
+D 3
+R 1
+L 1
+D 11
+L 6
+U 1
+R 9
+U 8
+D 8
+L 2
+R 6
+U 10
+R 7
+L 5
+U 1
+R 4
+L 2
+D 11
+L 10
+U 7
+L 10
+D 1
+R 6
+U 2
+D 7
+R 7
+D 2
+R 10
+U 8
+D 5
+U 2
+L 11
+R 9
+D 7
+U 3
+R 6
+U 6
+D 7
+U 6
+L 2
+R 11
+L 10
+D 7
+U 10
+D 3
+R 10
+L 4
+D 8
+R 5
+L 5
+D 9
+U 8
+R 3
+D 10
+R 11
+U 5
+D 11
+L 2
+D 8
+L 7
+U 4
+D 5
+U 9
+D 3
+U 11
+D 4
+L 1
+U 4
+L 3
+R 7
+L 12
+D 10
+U 8
+L 6
+D 11
+U 5
+L 2
+D 6
+L 5
+U 8
+L 4
+U 6
+R 9
+D 2
+L 6
+U 12
+R 2
+L 10
+R 7
+U 7
+L 5
+R 6
+U 5
+R 7
+D 6
+R 4
+U 6
+L 4
+U 4
+L 4
+U 3
+D 3
+L 9
+D 12
+R 10
+U 3
+L 1
+U 4
+L 8
+R 4
+D 6
+L 2
+D 7
+L 9
+U 3
+L 11
+R 9
+D 8
+L 1
+D 11
+R 8
+L 6
+U 7
+R 5
+U 3
+D 4
+R 4
+U 5
+L 6
+U 10
+D 2
+R 8
+U 7
+D 4
+L 11
+R 9
+U 9
+D 12
+U 8
+R 4
+U 5
+D 11
+L 5
+R 5
+D 2
+L 12
+U 4
+L 1
+R 9
+L 5
+D 1
+R 2
+L 2
+D 7
+L 12
+D 2
+R 7
+U 10
+L 1
+U 2
+L 8
+D 5
+L 7
+U 8
+L 8
+U 10
+D 7
+R 8
+D 7
+R 9
+L 7
+D 1
+R 3
+D 4
+R 11
+D 3
+L 5
+D 7
+U 8
+L 2
+D 10
+L 12
+R 7
+U 13
+R 4
+U 10
+L 10
+D 6
+U 7
+D 12
+U 2
+D 8
+L 1
+R 5
+D 9
+L 1
+R 11
+L 2
+D 7
+L 13
+U 1
+L 8
+D 2
+U 12
+L 6
+R 10
+L 10
+R 9
+U 3
+R 1
+L 10
+D 2
+L 4
+D 8
+U 7
+L 11
+D 8
+U 1
+D 1
+L 2
+D 2
+L 5
+U 6
+D 1
+U 6
+R 2
+L 2
+D 5
+U 2
+R 10
+L 4
+D 3
+L 11
+D 11
+U 4
+D 4
+R 12
+D 11
+U 2
+R 11
+U 3
+R 8
+U 8
+L 5
+R 12
+U 1
+L 10
+R 11
+L 3
+U 6
+D 2
+R 7
+D 13
+L 11
+R 8
+L 8
+R 1
+L 5
+D 13
+R 8
+L 12
+D 13
+R 10
+U 5
+D 13
+U 6
+L 2
+D 2
+U 7
+D 4
+L 4
+R 5
+L 12
+U 6
+D 8
+U 7
+D 12
+R 11
+L 11
+D 9
+R 4
+D 3
+L 5
+R 6
+D 9
+R 3
+U 10
+R 10
+U 3
+D 11
+L 3
+D 5
+R 14
+U 7
+R 3
+D 1
+L 4
+U 6
+D 6
+R 10
+L 12
+R 10
+L 4
+U 10
+R 8
+D 14
+L 6
+U 7
+D 4
+L 9
+R 10
+D 10
+L 4
+R 6
+U 8
+D 10
+L 12
+U 11
+L 7
+R 1
+U 1
+R 12
+U 7
+D 3
+U 4
+R 3
+D 6
+U 2
+R 2
+U 14
+D 10
+R 5
+L 12
+U 5
+D 6
+R 7
+L 13
+D 11
+R 6
+D 11
+R 6
+D 6
+U 10
+L 14
+D 4
+R 14
+D 7
+U 12
+L 3
+U 2
+D 3
+R 1
+D 3
+U 2
+D 13
+L 14
+R 13
+U 3
+D 12
+L 14
+U 12
+D 6
+R 2
+U 6
+L 11
+D 3
+L 7
+D 7
+R 11
+D 11
+R 10
+L 2
+U 12
+L 14
+U 11
+R 12
+L 4
+D 2
+R 13
+L 1
+U 7
+L 2
+D 7
+L 14
+R 11
+U 1
+L 7
+U 11
+L 6
+U 1
+D 11
+L 14
+R 4
+L 1
+D 14
+U 7
+L 6
+R 3
+L 2
+U 10
+D 3
+R 4
+U 7
+R 11
+U 7
+R 13
+U 2
+L 12
+R 9
+L 15
+R 4
+U 5
+D 7
+L 10
+R 9
+D 5
+L 14
+U 9
+R 3
+L 15
+R 5
+L 10
+D 5
+U 3
+D 9
+U 13
+D 15
+R 10
+L 9
+R 9
+U 4
+D 2
+L 3
+R 5
+L 11
+R 7
+L 15
+D 12
+L 13
+D 4
+R 2
+U 14
+D 9
+L 1
+D 1
+L 6
+U 9
+D 14
+U 2
+L 1
+R 10
+U 14
+R 4
+D 11
+R 6
+D 11
+U 9
+R 2
+L 6
+R 10
+L 4
+D 7
+R 11
+U 5
+L 2
+D 5
+U 6
+R 8
+U 4
+R 9
+D 15
+R 8
+L 10
+U 5
+L 4
+U 7
+L 3
+U 5
+R 2
+U 13
+L 9
+U 4
+D 13
+R 1
+D 15
+U 4
+L 7
+D 12
+L 8
+U 6
+L 10
+U 13
+R 12
+D 13
+U 6
+D 13
+U 2
+L 13
+U 7
+L 8
+U 6
+D 2
+U 13
+L 2
+D 13
+R 3
+D 2
+L 11
+D 13
+U 1
+D 12
+L 9
+U 2
+R 9
+U 16
+D 6
+L 16
+D 15
+R 7
+U 3
+D 11
+L 8
+U 3
+L 15
+R 7
+D 14
+L 8
+R 7
+U 12
+R 11
+U 2
+R 13
+D 9
+L 4
+U 14
+L 6
+D 7
+L 10
+U 14
+D 8
+L 6
+D 3
+L 6
+D 12
+U 13
+R 9
+L 6
+U 9
+R 9
+D 13
+R 13
+U 13
+L 4
+D 1
+R 8
+L 1
+R 15
+U 15
+R 14
+D 9
+L 5
+D 2
+L 14
+U 14
+L 15
+R 10
+U 11
+L 7
+R 12
+U 7
+L 7
+D 9
+U 1
+L 11
+R 11
+D 13
+U 7
+R 7
+U 7
+R 8
+D 12
+U 11
+D 14
+U 16
+L 5
+R 8
+D 2
+L 10
+D 14
+R 16
+D 13
+U 14
+L 6
+R 11
+D 4
+R 15
+D 2
+R 3
+L 2
+U 8
+L 4
+D 5
+U 3
+L 11
+U 7
+R 14
+U 4
+L 5
+D 10
+U 16
+L 1
+U 5
+R 11
+D 16
+U 5
+D 11
+R 5
+D 9
+R 3
+U 13
+D 6
+L 10
+D 2
+U 4
+D 7
+U 1
+R 10
+D 6
+U 12
+L 2
+D 8
+U 5
+L 5
+U 7
+L 3
+U 16
+D 12
+L 12
+R 16
+L 5
+R 17
+L 7
+U 17
+D 15
+R 14
+L 7
+U 16
+R 7
+D 7
+R 14
+D 6
+L 7
+U 6
+R 5
+D 14
+L 8
+R 3
+L 1
+U 12
+L 8
+D 11
+R 3
+D 11
+L 16
+R 4
+U 2
+R 17
+U 10
+R 3
+U 13
+R 6
+D 16
+U 15
+R 3
+U 7
+D 6
+U 2
+L 12
+D 11
+L 6
+D 9
+R 7
+U 10
+R 14
+D 10
+R 10
+D 17
+R 9
+L 11
+R 7
+D 14
+L 10
+U 17
+R 5
+D 12
+U 11
+D 11
+R 7
+D 12
+U 10
+D 10
+U 8
+D 11
+R 8
+U 9
+L 17
+D 15
+R 2
+D 14
+L 10
+U 2
+L 9
+R 15
+L 8
+D 9
+L 7
+R 10
+D 6
+L 15
+U 1
+L 11
+R 14
+L 7
+R 17
+U 17
+L 8
+U 16
+D 4
+R 9
+L 13
+R 5
+L 1
+D 14
+U 7
+L 8
+R 10
+U 10
+D 16
+U 6
+R 13
+D 12
+U 10
+L 3
+U 2
+R 7
+D 12
+R 16
+D 1
+L 14
+R 9
+D 18
+R 1
+L 17
+R 9
+U 16
+L 5
+U 12
+R 7
+D 6
+L 17
+U 3
+R 5
+U 13
+D 9
+U 12
+L 13
+D 5
+R 1
+U 7
+L 4
+R 13
+D 1
+L 15
+U 11
+L 5
+D 2
+R 12
+D 12
+U 5
+L 1
+R 5
+U 3
+R 5
+L 9
+R 15
+U 3
+D 18
+L 10
+R 2
+D 7
+R 13
+L 8
+R 5
+L 2
+R 15
+D 12
+L 14
+U 15
+L 8
+U 13
+R 13
+L 15
+R 16
+D 10
+L 15
+U 1
+R 1
+D 3
+U 17
+D 2
+L 5
+R 17
+U 6
+R 10
+L 3
+D 11
+R 13
+D 5
+U 3
+D 9
+U 10
+R 12
+D 10
+R 15
+U 11
+L 6
+R 3
+U 4
+D 7
+R 12
+L 5
+R 7
+D 17
+L 14
+U 9
+D 7
+U 2
+R 1
+D 13
+R 3
+D 12
+L 3
+U 17
+D 1
+U 6
+L 8
+U 17
+D 1
+R 6
+L 8
+R 8
+U 5
+L 12
+D 8
+R 5
+L 11
+U 17
+L 3
+U 11
+L 1
+R 15
+D 15
+L 10
+D 10
+L 19
+R 11
+L 4
+D 11
+L 13
+U 4
+D 6
+L 3
+U 11
+R 3
+L 9
+D 4
+U 10
+L 14
+D 10
+R 11
+L 1
+R 1
+D 8
+R 19
+D 6
+L 16
+D 1
+U 13
+R 19
+U 19
+D 3
+R 8
+D 16
+R 2
+D 2
+L 19
+D 7
+R 2
+U 4
+L 5
+R 2
+U 9
+L 5
+D 13
+L 5
+R 14
+L 13
+D 5
+U 10
+R 12
+L 11
+D 18
+U 7
+L 12
+R 11
+D 16
+U 15
+L 12
+R 12
+D 1
+R 2
+D 6
+L 15
+D 8
+R 19
+U 9
+R 12
+L 10
+R 3
+D 19
+R 15
+U 12
+R 6
+L 3
+D 17
+R 2
+U 11
+D 12
+L 15
+D 16
+R 18
+D 16
+U 12
+R 16
+U 17
+R 15
+L 10
+R 4
+D 12
+L 5
+R 11
+L 1
+U 11
+R 3
+D 5
diff --git a/day09/part1.rb b/day09/part1.rb
new file mode 100644
index 0000000..58debcd
--- /dev/null
+++ b/day09/part1.rb
@@ -0,0 +1,80 @@
+class Pos
+ def initialize(x = 0, y = 0)
+ @x = x
+ @y = y
+ end
+
+ attr_reader :x, :y
+
+ def move(dir)
+ case dir
+ when "U"
+ @y += 1
+ when "D"
+ @y -= 1
+ when "R"
+ @x += 1
+ when "L"
+ @x -= 1
+ end
+ end
+
+ def follow(head)
+ if head.x == @x - 1 && head.y == @y + 2
+ @x -= 1
+ @y += 1
+ elsif head.x == @x && head.y == @y + 2
+ @y += 1
+ elsif head.x == @x + 1 && head.y == @y + 2
+ @x += 1
+ @y += 1
+
+ elsif head.x == @x + 2 && head.y == @y + 1
+ @x += 1
+ @y += 1
+ elsif head.x == @x + 2 && head.y == @y
+ @x += 1
+ elsif head.x == @x + 2 && head.y == @y - 1
+ @x += 1
+ @y -= 1
+
+ elsif head.x == @x + 1 && head.y == @y - 2
+ @x += 1
+ @y -= 1
+ elsif head.x == @x && head.y == @y - 2
+ @y -= 1
+ elsif head.x == @x - 1 && head.y == @y - 2
+ @x -= 1
+ @y -= 1
+
+ elsif head.x == @x - 2 && head.y == @y - 1
+ @x -= 1
+ @y -= 1
+ elsif head.x == @x - 2 && head.y == @y
+ @x -= 1
+ elsif head.x == @x - 2 && head.y == @y + 1
+ @x -= 1
+ @y += 1
+ end
+ end
+
+ def coord
+ [@x, @y]
+ end
+end
+
+moves = $stdin.readlines.map(&:strip).map(&:split)
+
+head = Pos.new
+tail = Pos.new
+visited = [tail.coord]
+
+moves.each do |dir, dist|
+ dist.to_i.times do
+ head.move(dir)
+ tail.follow(head)
+ visited << tail.coord
+ end
+end
+
+puts visited.uniq.count
diff --git a/day09/part2.rb b/day09/part2.rb
new file mode 100644
index 0000000..30fe1db
--- /dev/null
+++ b/day09/part2.rb
@@ -0,0 +1,93 @@
+class Pos
+ def initialize(x = 0, y = 0)
+ @x = x
+ @y = y
+ end
+
+ attr_reader :x, :y
+
+ def move(dir)
+ case dir
+ when "U"
+ @y += 1
+ when "D"
+ @y -= 1
+ when "R"
+ @x += 1
+ when "L"
+ @x -= 1
+ end
+ end
+
+ def follow(head)
+ if head.x == @x - 2 && head.y == @y + 2
+ @x -= 1
+ @y += 1
+ elsif head.x == @x - 1 && head.y == @y + 2
+ @x -= 1
+ @y += 1
+ elsif head.x == @x && head.y == @y + 2
+ @y += 1
+ elsif head.x == @x + 1 && head.y == @y + 2
+ @x += 1
+ @y += 1
+
+ elsif head.x == @x + 2 && head.y == @y + 2
+ @x += 1
+ @y += 1
+ elsif head.x == @x + 2 && head.y == @y + 1
+ @x += 1
+ @y += 1
+ elsif head.x == @x + 2 && head.y == @y
+ @x += 1
+ elsif head.x == @x + 2 && head.y == @y - 1
+ @x += 1
+ @y -= 1
+
+ elsif head.x == @x + 2 && head.y == @y - 2
+ @x += 1
+ @y -= 1
+ elsif head.x == @x + 1 && head.y == @y - 2
+ @x += 1
+ @y -= 1
+ elsif head.x == @x && head.y == @y - 2
+ @y -= 1
+ elsif head.x == @x - 1 && head.y == @y - 2
+ @x -= 1
+ @y -= 1
+
+ elsif head.x == @x - 2 && head.y == @y - 2
+ @x -= 1
+ @y -= 1
+ elsif head.x == @x - 2 && head.y == @y - 1
+ @x -= 1
+ @y -= 1
+ elsif head.x == @x - 2 && head.y == @y
+ @x -= 1
+ elsif head.x == @x - 2 && head.y == @y + 1
+ @x -= 1
+ @y += 1
+ end
+ end
+
+ def coord
+ [@x, @y]
+ end
+end
+
+moves = $stdin.readlines.map(&:strip).map(&:split)
+
+rope = Array.new(10) { Pos.new }
+visited = [rope[-1].coord]
+
+moves.each do |dir, dist|
+ dist.to_i.times do
+ rope[0].move(dir)
+ (rope.length - 1).times do |i|
+ rope[i+1].follow(rope[i])
+ end
+ visited << rope[-1].coord
+ end
+end
+
+puts visited.uniq.count
diff --git a/day09/test b/day09/test
new file mode 100644
index 0000000..9874df2
--- /dev/null
+++ b/day09/test
@@ -0,0 +1,8 @@
+R 4
+U 4
+L 3
+D 1
+R 4
+D 1
+L 5
+R 2
diff --git a/day09/test2 b/day09/test2
new file mode 100644
index 0000000..60bd43b
--- /dev/null
+++ b/day09/test2
@@ -0,0 +1,8 @@
+R 5
+U 8
+L 8
+D 3
+R 17
+D 10
+L 25
+U 20