summaryrefslogtreecommitdiff
path: root/09
diff options
context:
space:
mode:
Diffstat (limited to '09')
-rw-r--r--09/Cargo.toml15
-rw-r--r--09/input.txt2000
-rw-r--r--09/src/part-1.rs59
-rw-r--r--09/src/part-2.rs65
-rw-r--r--09/test-1.txt8
-rw-r--r--09/test-2.txt8
6 files changed, 2155 insertions, 0 deletions
diff --git a/09/Cargo.toml b/09/Cargo.toml
new file mode 100644
index 0000000..100567b
--- /dev/null
+++ b/09/Cargo.toml
@@ -0,0 +1,15 @@
+[package]
+name = "day-09"
+version = "0.1.0"
+authors = ["Gard Spreemann <gspr@nonempty.org>"]
+edition = "2021"
+
+[[bin]]
+name = "part-1"
+path = "src/part-1.rs"
+
+[[bin]]
+name = "part-2"
+path = "src/part-2.rs"
+
+[dependencies]
diff --git a/09/input.txt b/09/input.txt
new file mode 100644
index 0000000..68e6657
--- /dev/null
+++ b/09/input.txt
@@ -0,0 +1,2000 @@
+D 1
+L 2
+D 2
+L 1
+R 1
+D 1
+R 2
+U 1
+R 1
+D 2
+R 1
+L 2
+U 1
+D 2
+R 1
+L 2
+R 1
+U 2
+D 2
+L 1
+U 2
+R 2
+D 1
+R 2
+D 1
+U 2
+D 2
+L 1
+U 1
+R 1
+D 1
+U 1
+D 1
+U 2
+L 2
+R 1
+U 1
+R 2
+L 2
+U 2
+R 1
+L 1
+U 1
+L 2
+R 1
+D 1
+L 1
+D 2
+U 1
+D 1
+R 1
+L 2
+D 1
+R 2
+L 2
+U 1
+D 2
+R 2
+D 1
+U 1
+R 2
+D 1
+L 1
+U 2
+R 2
+D 1
+U 2
+R 1
+D 2
+R 1
+D 1
+U 2
+R 2
+U 1
+R 1
+U 1
+L 1
+U 2
+D 1
+R 2
+D 2
+R 2
+D 1
+L 2
+D 2
+L 1
+R 1
+U 1
+D 2
+L 2
+D 2
+L 1
+D 2
+R 1
+D 1
+R 2
+L 2
+R 2
+D 2
+R 1
+D 2
+R 2
+U 2
+L 2
+R 1
+U 1
+R 1
+U 1
+D 1
+U 1
+R 2
+L 1
+R 1
+D 2
+U 3
+R 1
+L 2
+D 1
+R 3
+U 1
+D 2
+R 1
+D 1
+R 2
+L 1
+R 2
+L 2
+D 3
+R 3
+D 1
+U 2
+D 2
+R 1
+D 2
+R 1
+L 3
+D 1
+L 1
+R 2
+D 3
+R 2
+D 3
+R 3
+L 2
+U 3
+D 3
+L 2
+R 3
+L 1
+U 1
+L 2
+D 2
+U 1
+D 2
+U 1
+D 2
+R 1
+U 1
+D 2
+U 1
+L 1
+R 2
+L 2
+D 3
+U 2
+L 3
+D 2
+U 1
+D 3
+L 1
+U 1
+D 2
+R 2
+U 1
+L 2
+D 3
+L 3
+D 3
+U 1
+R 1
+U 2
+D 1
+R 3
+L 1
+D 1
+U 3
+D 1
+L 2
+U 1
+L 3
+D 2
+L 2
+R 1
+L 3
+U 3
+R 3
+U 1
+R 2
+D 1
+L 3
+U 3
+D 3
+L 2
+D 1
+U 2
+D 2
+U 2
+R 3
+U 2
+L 1
+U 1
+R 2
+L 3
+D 3
+U 3
+R 1
+L 1
+U 1
+D 1
+U 2
+R 1
+D 3
+L 1
+R 3
+L 4
+D 3
+R 2
+U 3
+R 1
+L 4
+R 1
+L 3
+R 3
+U 2
+D 1
+L 3
+D 4
+U 4
+L 3
+U 4
+R 4
+L 1
+R 4
+D 1
+R 1
+L 3
+R 3
+L 1
+R 4
+D 2
+L 3
+D 2
+U 1
+R 3
+D 2
+L 3
+R 4
+L 3
+U 3
+D 3
+R 1
+D 2
+U 4
+L 1
+R 1
+L 4
+R 3
+U 1
+L 4
+R 1
+U 3
+R 1
+L 1
+U 3
+R 3
+U 2
+R 2
+L 4
+U 1
+R 1
+D 3
+L 2
+D 1
+L 3
+R 3
+D 3
+L 4
+U 2
+L 3
+U 4
+L 2
+U 2
+D 4
+L 3
+D 1
+U 2
+L 3
+R 4
+U 1
+L 4
+R 4
+L 3
+U 2
+D 4
+L 1
+R 3
+D 2
+L 3
+U 1
+L 3
+U 4
+R 2
+U 2
+R 1
+D 2
+L 4
+R 3
+D 2
+L 3
+U 3
+D 3
+L 1
+D 4
+R 3
+U 1
+R 3
+L 1
+U 3
+R 2
+D 3
+L 3
+U 3
+L 3
+D 5
+U 4
+L 5
+D 2
+R 1
+D 2
+U 5
+R 1
+U 2
+D 2
+R 4
+U 2
+L 3
+U 2
+R 5
+D 4
+L 3
+U 3
+D 1
+R 2
+L 3
+U 1
+R 5
+D 1
+U 2
+R 1
+U 3
+L 2
+U 5
+R 4
+D 5
+L 4
+D 4
+L 2
+U 4
+R 5
+L 1
+D 1
+R 2
+U 2
+D 5
+R 2
+U 4
+L 3
+D 2
+R 4
+L 1
+R 1
+L 2
+U 4
+D 4
+R 5
+D 3
+R 1
+D 4
+L 4
+U 5
+L 2
+U 2
+L 3
+R 4
+U 5
+L 4
+U 2
+D 1
+R 2
+U 4
+L 1
+U 3
+R 1
+U 5
+D 5
+U 4
+D 3
+L 3
+U 3
+D 2
+U 4
+R 3
+D 1
+U 5
+D 3
+R 1
+U 2
+R 1
+D 4
+R 4
+L 4
+U 1
+L 5
+R 3
+D 2
+U 2
+L 5
+R 1
+L 1
+U 3
+D 4
+R 5
+L 4
+D 5
+L 2
+U 1
+D 1
+U 3
+R 4
+D 4
+L 4
+U 3
+L 2
+D 2
+L 5
+U 1
+R 6
+U 4
+R 3
+D 2
+R 6
+D 2
+R 6
+L 3
+R 4
+L 3
+D 5
+U 2
+R 5
+L 5
+R 4
+U 6
+R 6
+D 1
+U 4
+D 4
+L 3
+D 2
+U 5
+R 2
+U 5
+D 2
+U 3
+R 2
+D 5
+R 2
+D 6
+R 1
+U 5
+D 2
+L 6
+U 2
+L 4
+R 6
+L 6
+D 6
+L 3
+D 5
+L 1
+R 5
+D 4
+L 4
+U 1
+R 3
+D 6
+R 6
+U 2
+R 4
+D 1
+R 4
+U 4
+L 6
+U 6
+D 6
+R 2
+D 2
+L 4
+R 6
+L 1
+U 5
+D 4
+U 4
+R 3
+U 1
+D 3
+R 6
+D 4
+U 5
+R 3
+D 5
+R 5
+D 4
+U 4
+D 3
+U 6
+L 1
+D 4
+U 6
+L 3
+R 3
+D 6
+U 4
+R 3
+L 3
+R 1
+D 6
+R 4
+U 2
+R 6
+L 3
+D 3
+L 4
+R 3
+L 4
+R 3
+U 4
+R 3
+D 4
+R 6
+D 2
+U 1
+D 2
+L 3
+D 4
+L 1
+D 5
+L 6
+U 4
+L 7
+R 6
+U 7
+R 7
+L 5
+D 1
+U 3
+R 6
+U 6
+R 2
+U 5
+R 4
+U 7
+R 1
+L 3
+D 7
+L 4
+D 6
+U 1
+L 1
+R 3
+D 2
+L 5
+R 1
+U 1
+L 1
+R 6
+L 6
+D 2
+U 3
+L 6
+R 6
+L 3
+D 3
+R 2
+L 1
+U 5
+R 6
+D 2
+L 5
+U 1
+D 4
+R 3
+L 6
+R 2
+L 4
+D 4
+R 5
+D 3
+R 2
+L 5
+U 7
+D 5
+L 3
+R 2
+D 5
+U 5
+D 2
+U 2
+L 2
+R 5
+L 2
+D 5
+R 3
+U 4
+R 4
+D 1
+L 6
+U 2
+R 7
+L 3
+U 4
+D 2
+R 5
+L 6
+R 7
+L 1
+U 5
+L 3
+U 7
+D 6
+R 3
+D 3
+U 7
+L 4
+R 2
+U 1
+L 1
+R 6
+D 5
+R 7
+U 4
+D 2
+R 2
+D 4
+L 1
+U 4
+D 2
+R 2
+D 5
+U 7
+D 1
+U 7
+R 3
+U 5
+L 1
+R 7
+L 2
+R 5
+U 5
+R 5
+D 4
+U 5
+L 7
+D 3
+R 5
+L 3
+R 1
+U 8
+L 4
+U 3
+D 4
+U 1
+L 2
+D 5
+L 5
+D 4
+U 3
+L 2
+R 3
+D 6
+L 4
+U 3
+R 1
+U 1
+D 3
+R 5
+D 4
+L 7
+U 7
+R 7
+L 6
+D 7
+U 5
+L 2
+U 4
+R 8
+L 4
+U 4
+R 5
+U 1
+R 1
+D 7
+R 6
+L 8
+R 1
+D 4
+U 5
+R 6
+L 3
+R 7
+L 4
+D 7
+U 8
+R 5
+D 5
+U 4
+L 3
+D 4
+U 1
+L 8
+R 8
+U 2
+L 5
+R 7
+D 5
+L 5
+D 3
+L 5
+U 4
+D 1
+U 6
+R 7
+D 5
+R 4
+D 6
+U 4
+L 5
+D 8
+U 5
+L 7
+D 1
+U 8
+R 3
+U 4
+R 5
+U 7
+R 6
+L 3
+U 4
+L 7
+R 5
+U 6
+L 2
+R 2
+U 7
+R 4
+D 2
+L 2
+D 6
+L 5
+D 5
+L 1
+R 5
+D 1
+U 5
+L 8
+R 3
+D 4
+R 2
+U 2
+L 5
+D 4
+U 7
+D 9
+R 9
+U 9
+R 3
+L 2
+D 8
+U 6
+L 1
+R 1
+D 4
+L 9
+R 9
+L 3
+U 4
+D 7
+U 9
+D 5
+R 8
+D 6
+R 9
+U 2
+R 2
+U 8
+R 5
+U 6
+L 8
+D 7
+L 2
+U 3
+R 3
+U 6
+L 5
+R 4
+D 6
+U 6
+R 6
+D 5
+U 5
+D 6
+L 4
+D 2
+U 6
+L 8
+U 3
+D 6
+U 1
+L 7
+D 6
+R 3
+D 7
+U 6
+D 4
+U 5
+R 3
+D 7
+L 5
+U 6
+L 6
+R 2
+D 7
+L 7
+U 5
+D 9
+R 6
+L 9
+R 1
+L 6
+U 5
+R 4
+U 7
+L 2
+U 5
+L 9
+U 3
+R 2
+L 5
+R 2
+U 6
+L 3
+D 7
+R 9
+D 3
+L 4
+R 2
+D 8
+L 6
+D 9
+L 5
+D 1
+R 8
+D 4
+U 5
+L 7
+D 2
+R 2
+L 7
+D 6
+L 7
+R 1
+D 4
+U 3
+D 3
+U 8
+R 8
+L 3
+D 8
+U 7
+R 4
+D 9
+L 3
+U 10
+L 4
+D 4
+R 7
+U 1
+L 10
+U 10
+R 9
+U 3
+L 3
+R 1
+D 10
+L 4
+U 9
+L 4
+U 7
+L 8
+R 7
+D 1
+U 3
+L 3
+U 2
+R 4
+U 5
+D 9
+L 5
+U 10
+L 2
+U 1
+L 7
+D 9
+L 8
+R 10
+D 7
+U 9
+L 4
+U 10
+L 3
+U 1
+D 1
+L 1
+D 6
+U 8
+R 8
+L 6
+U 9
+L 3
+U 6
+R 6
+U 3
+R 7
+U 2
+D 4
+L 4
+R 8
+D 3
+R 8
+U 2
+R 3
+D 6
+U 4
+R 9
+L 4
+D 4
+L 6
+R 2
+D 10
+L 7
+R 9
+L 7
+D 8
+R 2
+D 2
+U 9
+R 2
+U 1
+R 10
+U 1
+D 2
+U 10
+D 10
+U 5
+R 3
+U 5
+R 10
+L 3
+R 5
+U 5
+L 4
+D 3
+L 7
+D 3
+U 10
+R 7
+L 3
+D 2
+L 1
+D 1
+L 7
+R 2
+L 10
+D 6
+R 4
+L 8
+R 9
+D 5
+L 2
+D 4
+R 1
+L 4
+R 8
+D 5
+R 10
+D 1
+L 10
+D 11
+L 10
+R 4
+L 3
+D 1
+U 4
+L 9
+D 6
+U 2
+R 4
+L 2
+U 5
+D 1
+R 6
+L 5
+U 7
+D 2
+R 5
+D 9
+R 11
+U 9
+D 9
+R 2
+L 9
+D 4
+U 7
+L 10
+D 7
+U 4
+D 1
+U 4
+D 10
+L 8
+D 3
+L 8
+D 8
+R 7
+D 10
+R 5
+U 1
+L 11
+D 2
+L 11
+U 4
+L 8
+D 10
+U 3
+D 11
+R 10
+L 1
+D 2
+U 11
+L 4
+U 2
+L 6
+D 7
+R 10
+L 2
+D 7
+R 9
+U 6
+D 5
+R 9
+U 1
+D 3
+R 8
+D 7
+L 3
+D 8
+U 4
+D 4
+R 8
+L 7
+R 1
+D 3
+U 7
+D 4
+L 10
+R 1
+D 6
+R 1
+L 5
+D 2
+L 9
+R 1
+U 5
+D 4
+U 11
+L 6
+R 11
+D 11
+R 6
+U 9
+R 1
+L 5
+U 3
+R 10
+L 8
+R 6
+L 2
+R 8
+D 11
+L 5
+R 3
+L 1
+R 3
+L 8
+R 10
+U 2
+R 2
+D 7
+L 9
+U 2
+L 8
+D 3
+U 1
+L 11
+D 1
+U 6
+L 2
+R 7
+D 5
+R 1
+D 11
+U 12
+D 10
+L 11
+U 3
+D 10
+L 6
+U 3
+D 12
+R 4
+D 9
+R 2
+U 12
+R 11
+L 2
+R 7
+L 11
+U 12
+R 12
+U 1
+R 2
+D 8
+R 10
+U 2
+D 8
+U 8
+D 5
+U 10
+R 4
+U 8
+D 4
+R 8
+D 8
+R 2
+U 4
+L 10
+D 2
+L 10
+R 2
+D 9
+U 6
+L 2
+D 10
+L 2
+D 11
+R 11
+U 2
+L 6
+D 3
+U 3
+R 4
+U 9
+L 9
+R 8
+D 5
+L 9
+U 8
+L 11
+D 8
+R 12
+U 1
+D 1
+U 7
+L 11
+U 2
+L 12
+R 11
+U 8
+R 12
+U 11
+L 7
+U 5
+L 4
+R 4
+D 1
+U 6
+D 7
+U 5
+R 5
+U 10
+D 2
+R 9
+L 12
+D 9
+U 6
+L 11
+D 7
+L 6
+D 10
+L 9
+D 11
+R 7
+D 10
+L 1
+R 9
+D 10
+L 1
+U 1
+L 13
+R 10
+D 9
+L 9
+U 7
+L 10
+R 1
+U 12
+R 13
+U 8
+L 9
+U 5
+L 11
+D 11
+U 8
+R 2
+D 2
+R 7
+D 3
+L 3
+R 2
+L 6
+U 11
+L 6
+U 8
+L 11
+U 12
+L 13
+D 4
+L 8
+U 11
+D 9
+U 11
+D 10
+U 4
+D 9
+L 12
+D 6
+L 11
+U 11
+L 1
+D 6
+R 12
+U 9
+D 1
+L 4
+R 9
+L 13
+R 10
+D 9
+L 2
+R 3
+D 10
+L 13
+R 3
+L 8
+R 8
+L 1
+R 5
+L 12
+D 10
+R 6
+U 7
+R 11
+U 11
+R 10
+D 9
+R 12
+D 8
+U 6
+L 8
+D 6
+L 10
+R 2
+L 2
+D 12
+U 12
+R 11
+L 8
+U 2
+R 2
+L 11
+U 11
+L 7
+D 2
+U 2
+L 9
+D 4
+R 2
+U 7
+D 3
+R 1
+D 6
+U 13
+R 11
+D 1
+U 4
+R 9
+D 7
+L 12
+U 12
+L 10
+U 9
+L 1
+D 1
+U 6
+L 1
+D 13
+U 14
+L 2
+D 6
+U 8
+D 8
+L 9
+D 1
+R 11
+D 6
+L 8
+R 11
+U 4
+L 5
+R 5
+D 10
+U 10
+R 7
+D 7
+L 8
+U 9
+R 1
+L 5
+D 4
+L 13
+D 4
+R 14
+D 13
+R 9
+L 13
+R 7
+L 14
+R 12
+D 1
+U 8
+L 10
+U 7
+D 9
+U 7
+D 13
+L 1
+R 1
+D 14
+L 9
+U 5
+R 7
+U 2
+L 11
+D 5
+U 7
+D 1
+L 13
+U 14
+L 1
+D 3
+R 3
+D 1
+L 3
+U 4
+R 14
+U 11
+R 4
+L 13
+U 3
+R 8
+D 5
+U 8
+L 6
+R 14
+L 3
+D 2
+L 5
+U 11
+R 8
+L 11
+U 8
+D 11
+U 14
+R 14
+L 4
+D 10
+R 11
+U 1
+D 4
+U 11
+D 5
+L 5
+R 14
+U 12
+L 1
+D 4
+R 11
+L 5
+R 9
+U 9
+D 2
+U 12
+D 2
+R 8
+U 6
+L 11
+U 8
+L 6
+U 9
+L 5
+U 3
+D 10
+R 10
+D 6
+U 1
+R 13
+U 5
+R 8
+U 11
+L 11
+D 10
+R 11
+U 2
+D 3
+R 10
+D 2
+L 9
+R 7
+L 8
+U 1
+R 6
+L 3
+D 10
+U 14
+D 4
+U 7
+L 6
+R 8
+U 15
+D 14
+U 5
+D 15
+U 2
+D 4
+L 11
+U 8
+L 10
+U 15
+R 8
+U 14
+D 6
+R 9
+L 15
+R 9
+L 11
+R 3
+D 2
+U 10
+L 12
+D 2
+L 5
+D 1
+R 8
+U 7
+L 7
+D 7
+L 15
+D 11
+U 3
+L 4
+U 10
+L 14
+U 10
+D 10
+U 11
+D 1
+L 3
+R 11
+L 3
+U 10
+L 2
+D 8
+R 8
+L 12
+D 15
+U 10
+L 14
+R 4
+L 9
+R 11
+U 10
+R 7
+D 13
+U 11
+D 10
+R 3
+U 6
+R 9
+L 15
+R 11
+D 6
+R 14
+L 7
+D 7
+L 3
+D 13
+U 10
+R 14
+U 2
+D 4
+U 1
+R 1
+D 8
+R 12
+L 15
+R 4
+L 15
+U 13
+D 12
+L 8
+D 1
+R 3
+U 11
+R 3
+U 2
+R 4
+D 15
+U 4
+L 6
+D 6
+L 9
+D 2
+L 15
+R 5
+U 2
+R 7
+D 7
+U 15
+L 4
+D 7
+R 9
+D 11
+R 8
+L 4
+R 6
+L 11
+U 16
+L 10
+U 10
+L 11
+U 9
+R 8
+U 13
+R 13
+L 5
+R 8
+L 12
+U 11
+L 4
+D 10
+R 2
+U 13
+R 4
+L 15
+D 15
+L 15
+R 16
+L 7
+R 14
+D 5
+L 16
+U 6
+D 3
+L 13
+D 8
+L 11
+U 13
+L 9
+U 6
+L 4
+U 11
+R 1
+L 13
+R 11
+L 13
+R 13
+L 9
+D 15
+R 1
+L 15
+R 14
+L 14
+U 7
+L 1
+R 6
+D 16
+L 2
+R 12
+L 4
+D 12
+R 8
+U 9
+D 10
+R 1
+L 2
+D 5
+L 3
+R 15
+L 8
+D 1
+L 1
+D 8
+U 13
+R 1
+L 2
+D 1
+R 3
+L 6
+U 12
+L 4
+D 13
+U 2
+L 4
+D 10
+R 16
+D 1
+U 1
+L 11
+D 8
+L 12
+R 8
+L 5
+R 1
+D 12
+R 2
+D 7
+U 16
+D 11
+L 15
+R 4
+U 4
+D 4
+U 4
+L 17
+U 3
+D 8
+U 1
+L 1
+U 4
+L 7
+U 9
+L 13
+D 10
+L 2
+U 7
+L 13
+D 16
+U 6
+L 10
+D 16
+L 8
+U 10
+L 6
+U 16
+L 5
+U 4
+R 9
+D 12
+R 1
+U 14
+L 14
+R 16
+D 5
+L 16
+R 14
+U 10
+R 4
+U 9
+L 15
+D 4
+U 15
+L 11
+R 14
+L 10
+D 14
+L 10
+D 12
+R 2
+D 3
+R 1
+U 1
+L 17
+U 9
+D 13
+R 7
+D 7
+U 13
+D 1
+R 14
+U 10
+R 16
+L 17
+R 7
+D 17
+U 11
+L 2
+U 16
+L 8
+U 13
+R 17
+U 5
+L 7
+R 3
+D 17
+L 10
+U 9
+D 16
+R 3
+U 5
+L 15
+R 16
+D 11
+U 9
+L 3
+R 14
+D 4
+L 4
+U 12
+D 9
+U 10
+D 15
+L 12
+R 6
+D 4
+L 14
+D 5
+L 4
+U 7
+R 15
+D 6
+L 15
+U 14
+D 10
+L 3
+D 9
+L 15
+R 9
+U 1
+L 4
+D 15
+U 12
+D 9
+R 8
+D 14
+R 15
+D 7
+U 18
+L 5
+U 6
+L 6
+D 10
+L 18
+R 3
+L 11
+D 10
+L 13
+U 13
+L 13
+R 3
+L 1
+U 3
+D 7
+L 9
+R 6
+U 18
+R 18
+U 15
+R 9
+U 4
+R 12
+L 12
+D 6
+U 10
+D 13
+L 6
+R 13
+L 13
+D 12
+U 4
+D 15
+L 12
+D 10
+U 12
+R 8
+L 13
+D 11
+L 13
+U 12
+D 5
+U 12
+R 10
+L 9
+U 13
+R 7
+D 2
+L 6
+U 13
+D 15
+R 3
+U 4
+D 5
+L 2
+D 10
+U 7
+L 2
+D 5
+L 5
+D 11
+R 5
+U 18
+L 9
+D 8
+U 12
+R 3
+U 8
+R 14
+D 1
+R 4
+L 5
+D 10
+R 18
+D 2
+R 9
+L 14
+U 4
+R 15
+D 4
+R 2
+L 4
+U 13
+R 6
+U 18
+D 4
+U 7
+L 15
+D 1
+L 6
+D 3
+U 15
+L 17
+U 15
+R 14
+L 9
+U 5
+L 4
+U 13
+R 5
+D 17
+U 17
+L 15
+U 14
+R 5
+L 1
+R 9
+U 8
+R 15
+U 18
+L 12
+R 13
+D 15
+R 5
+L 11
+R 5
+U 12
+R 8
+L 6
+R 1
+L 10
+U 17
+L 16
+U 12
+L 14
+D 16
+U 13
+D 18
+L 5
+U 16
+L 11
+D 15
+U 2
+L 9
+D 5
+L 17
+D 17
+L 4
+D 4
+L 19
+R 6
+D 6
+U 18
+R 16
+U 12
+D 2
+L 4
+U 19
+R 6
+U 1
+D 15
+R 13
+U 18
+D 12
+L 9
+U 1
+R 13
+D 18
+L 4
+D 17
+L 9
+D 8
+U 3
+D 5
+R 7
+L 16
+U 3
+L 1
+D 13
+R 17
+D 8
+R 9
+U 17
+L 2
+U 17
+D 16
+L 8
+R 9
+D 7
+L 16
+R 10
+L 16
+D 10
+L 15
+U 17
+L 2
+U 10
+D 16
+R 1
+L 2
+D 4
+R 13
+L 12
+D 8
+U 10
+L 6
+D 14
+L 6
+D 11
+R 1
+D 10
+L 18
+D 12
+R 14
+L 3
+D 7
+L 12
+R 19
+U 5
+R 19
+D 3
+L 15
+U 13
diff --git a/09/src/part-1.rs b/09/src/part-1.rs
new file mode 100644
index 0000000..f61c09d
--- /dev/null
+++ b/09/src/part-1.rs
@@ -0,0 +1,59 @@
+use std::collections::{HashSet};
+use std::io::{BufRead};
+
+
+fn main() {
+ let stdin = std::io::stdin();
+ let mut handle = stdin.lock();
+
+ let mut buf: Vec<u8> = Vec::new();
+ let mut seen: HashSet<[isize; 2]> = HashSet::new();
+ let mut head_pos: [isize; 2] = [0; 2];
+ let mut tail_pos: [isize; 2] = head_pos.clone();
+ seen.insert(tail_pos.clone());
+
+ loop {
+ buf.clear();
+ let num_bytes = handle.read_until(b'\n', &mut buf).expect("IO error");
+ if num_bytes == 0 { break; }
+
+ if buf[buf.len() - 1] == b'\n' { buf.pop(); }
+
+ let direction = buf[0];
+ let num_steps: usize = std::str::from_utf8(& buf[2..]).expect("Malformed input")
+ .parse().expect("Malformed input");
+
+ for dir in std::iter::repeat(direction).take(num_steps) {
+ match dir {
+ b'L' => head_pos[0] -= 1,
+ b'R' => head_pos[0] += 1,
+ b'U' => head_pos[1] += 1,
+ b'D' => head_pos[1] -= 1,
+ _ => panic!("Malformed input")
+ };
+ let delta: [isize; 2] = {
+ let mut ret: [isize; 2] = [0; 2];
+ for i in 0..2 { ret[i] = head_pos[i] - tail_pos[i]; }
+ ret
+ };
+ if delta[0].abs() == 2 {
+ tail_pos[0] += delta[0].signum();
+ if delta[1].abs() == 1 {
+ tail_pos[1] += delta[1].signum();
+ }
+ seen.insert(tail_pos.clone());
+ }
+ else if delta[1].abs() == 2 {
+ tail_pos[1] += delta[1].signum();
+ if delta[0].abs() == 1 {
+ tail_pos[0] += delta[0].signum();
+ }
+ seen.insert(tail_pos.clone());
+ }
+ }
+ }
+
+ println!("{}", seen.len());
+
+
+}
diff --git a/09/src/part-2.rs b/09/src/part-2.rs
new file mode 100644
index 0000000..1773d2e
--- /dev/null
+++ b/09/src/part-2.rs
@@ -0,0 +1,65 @@
+// Ugh, weird motion in this grid world!
+
+use std::collections::{HashSet};
+use std::io::{BufRead};
+
+const NUM_SEGMENTS: usize = 10;
+
+type Pos = [isize; 2];
+
+fn main() {
+ let stdin = std::io::stdin();
+ let mut handle = stdin.lock();
+
+ let mut buf: Vec<u8> = Vec::new();
+ let mut seen: HashSet<[isize; 2]> = HashSet::new();
+ let mut positions: [Pos; NUM_SEGMENTS] = [[0; 2]; NUM_SEGMENTS];
+ seen.insert(positions[NUM_SEGMENTS-1].clone());
+
+ loop {
+ buf.clear();
+ let num_bytes = handle.read_until(b'\n', &mut buf).expect("IO error");
+ if num_bytes == 0 { break; }
+
+ if buf[buf.len() - 1] == b'\n' { buf.pop(); }
+
+ let direction = buf[0];
+ let num_steps: usize = std::str::from_utf8(& buf[2..]).expect("Malformed input")
+ .parse().expect("Malformed input");
+
+ for dir in std::iter::repeat(direction).take(num_steps) {
+ match dir {
+ b'L' => positions[0][0] -= 1,
+ b'R' => positions[0][0] += 1,
+ b'U' => positions[0][1] += 1,
+ b'D' => positions[0][1] -= 1,
+ _ => panic!("Malformed input")
+ };
+
+ for i in 1..NUM_SEGMENTS {
+ let delta: [isize; 2] = {
+ let mut ret: [isize; 2] = [0; 2];
+ for d in 0..2 { ret[d] = positions[i-1][d] - positions[i][d]; }
+ ret
+ };
+ if delta[0].abs() == 2 {
+ positions[i][0] += delta[0].signum();
+ if delta[1].abs() == 1 {
+ positions[i][1] += delta[1].signum();
+ }
+ }
+ if delta[1].abs() == 2 {
+ positions[i][1] += delta[1].signum();
+ if delta[0].abs() == 1 {
+ positions[i][0] += delta[0].signum();
+ }
+ }
+ }
+ seen.insert(positions[NUM_SEGMENTS-1].clone());
+ }
+ }
+
+ println!("{}", seen.len());
+
+
+}
diff --git a/09/test-1.txt b/09/test-1.txt
new file mode 100644
index 0000000..9874df2
--- /dev/null
+++ b/09/test-1.txt
@@ -0,0 +1,8 @@
+R 4
+U 4
+L 3
+D 1
+R 4
+D 1
+L 5
+R 2
diff --git a/09/test-2.txt b/09/test-2.txt
new file mode 100644
index 0000000..60bd43b
--- /dev/null
+++ b/09/test-2.txt
@@ -0,0 +1,8 @@
+R 5
+U 8
+L 8
+D 3
+R 17
+D 10
+L 25
+U 20