advent-of-code

Perserverance, or the lack thereof

git clone git://git.shimmy1996.com/advent-of-code.git
commit f1e0d8a4c29d7a2ddc2420947e2cdf1a29ea105b
parent 256912bd55a13d6b5b9496cf160ae8dd06eddef3
Author: Shimmy Xu <shimmy.xu@shimmy1996.com>
Date:   Fri,  9 Dec 2022 19:42:33 -0500

Add 2022 day 09

Diffstat:
A2022/day09/Cargo.toml | 8++++++++
A2022/day09/input.txt | 2000+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A2022/day09/src/main.rs | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 2096 insertions(+), 0 deletions(-)
diff --git a/2022/day09/Cargo.toml b/2022/day09/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "day09"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2022/day09/input.txt b/2022/day09/input.txt
@@ -0,0 +1,2000 @@
+U 1
+R 2
+D 1
+L 1
+U 2
+D 1
+U 2
+L 1
+D 1
+U 2
+R 1
+U 1
+D 1
+R 1
+L 2
+D 1
+U 1
+D 1
+U 2
+D 2
+R 2
+D 1
+R 2
+D 2
+R 1
+L 2
+U 2
+D 2
+R 2
+D 1
+R 1
+L 1
+D 2
+U 2
+L 2
+U 2
+R 1
+L 1
+D 1
+R 1
+D 2
+U 1
+L 2
+R 1
+U 1
+D 1
+U 1
+D 2
+R 1
+L 1
+U 1
+L 1
+R 2
+U 1
+R 2
+L 2
+U 1
+R 1
+L 2
+R 2
+L 2
+U 1
+D 1
+U 2
+R 1
+D 1
+L 2
+D 1
+L 1
+U 1
+R 2
+U 1
+D 1
+L 2
+R 2
+D 2
+R 2
+D 1
+L 2
+D 1
+R 2
+L 1
+D 2
+R 2
+D 1
+U 1
+L 1
+R 2
+L 2
+D 1
+R 1
+L 1
+U 1
+L 1
+R 1
+U 2
+R 1
+D 2
+R 1
+L 2
+R 1
+L 1
+D 2
+R 2
+L 1
+U 1
+D 1
+L 2
+D 1
+L 1
+R 1
+U 1
+R 3
+U 2
+L 2
+R 1
+L 1
+D 1
+R 1
+U 2
+D 3
+L 1
+R 1
+U 2
+R 1
+U 1
+R 3
+L 3
+U 2
+D 1
+L 1
+R 1
+U 3
+D 1
+L 3
+D 2
+U 3
+R 3
+D 1
+L 3
+D 1
+U 1
+R 3
+L 2
+U 1
+R 3
+U 3
+L 3
+D 1
+R 2
+U 3
+R 2
+L 1
+U 3
+L 3
+R 3
+D 2
+U 1
+L 1
+D 1
+U 3
+D 1
+U 2
+R 1
+L 2
+R 2
+L 2
+D 3
+R 2
+D 2
+U 1
+L 2
+R 2
+L 1
+U 3
+D 3
+R 1
+L 1
+D 3
+L 2
+U 2
+R 3
+L 1
+D 2
+L 1
+R 2
+L 2
+U 2
+D 3
+R 2
+U 3
+D 1
+L 2
+D 3
+U 1
+R 3
+U 1
+R 2
+U 2
+D 1
+L 1
+D 3
+L 2
+U 1
+R 1
+L 1
+U 2
+D 3
+U 3
+R 3
+U 1
+R 1
+D 2
+R 1
+L 2
+D 2
+U 1
+R 3
+D 2
+U 2
+L 2
+R 3
+D 2
+U 1
+R 1
+L 3
+R 1
+U 1
+R 4
+L 2
+R 3
+D 3
+L 3
+D 3
+R 3
+L 2
+R 4
+D 1
+R 2
+U 3
+D 4
+U 2
+R 4
+U 2
+R 3
+L 2
+D 1
+U 3
+D 1
+L 4
+U 4
+D 4
+R 2
+U 1
+L 2
+R 2
+L 4
+R 3
+U 4
+D 3
+R 2
+L 2
+R 2
+D 2
+U 1
+R 2
+U 3
+R 4
+D 1
+L 4
+U 2
+R 3
+U 3
+R 4
+L 1
+D 3
+R 3
+D 4
+R 2
+L 3
+R 1
+D 4
+R 2
+L 2
+U 3
+R 3
+U 2
+R 3
+U 4
+R 1
+L 1
+D 4
+U 4
+D 3
+L 1
+D 3
+L 2
+U 2
+R 2
+D 3
+R 2
+U 1
+R 4
+D 3
+L 2
+D 1
+L 4
+D 1
+R 4
+D 4
+R 1
+U 3
+L 2
+U 1
+R 3
+U 2
+L 3
+D 1
+U 4
+L 2
+D 1
+L 2
+R 3
+U 4
+R 1
+U 1
+L 3
+U 4
+D 3
+L 2
+D 1
+L 3
+R 2
+D 4
+L 1
+D 5
+U 4
+D 2
+R 1
+D 3
+L 3
+R 1
+D 5
+U 3
+D 5
+L 2
+D 1
+L 3
+R 5
+U 4
+L 3
+D 4
+U 5
+D 5
+L 2
+U 5
+L 2
+R 3
+L 1
+U 2
+D 4
+R 3
+D 4
+U 5
+D 3
+U 4
+L 4
+R 1
+L 5
+U 5
+R 2
+U 4
+R 3
+D 1
+U 1
+R 2
+U 4
+R 2
+D 2
+U 1
+R 1
+L 2
+D 1
+U 5
+L 4
+R 2
+D 1
+U 1
+D 2
+U 2
+D 5
+L 2
+R 5
+U 5
+L 5
+D 2
+L 1
+U 3
+D 1
+R 3
+D 2
+L 3
+R 3
+D 3
+R 2
+L 1
+D 1
+U 2
+R 2
+L 2
+R 5
+U 4
+D 3
+L 4
+U 4
+D 1
+U 4
+D 2
+U 5
+L 4
+R 5
+D 4
+R 2
+D 2
+R 5
+D 4
+U 1
+D 3
+U 5
+R 3
+D 2
+R 5
+L 1
+U 5
+R 5
+U 1
+R 3
+U 3
+R 4
+U 1
+L 4
+R 1
+U 3
+L 2
+U 6
+D 4
+U 3
+D 1
+R 2
+L 6
+U 3
+D 4
+U 1
+L 6
+U 1
+R 1
+U 6
+D 5
+U 5
+R 4
+U 1
+L 4
+D 1
+U 5
+R 3
+L 2
+U 3
+L 6
+R 5
+U 4
+R 5
+D 1
+L 6
+U 3
+L 5
+U 2
+L 5
+R 2
+U 6
+R 6
+D 1
+R 1
+U 3
+R 6
+U 5
+L 4
+U 2
+R 5
+L 2
+U 1
+D 1
+U 5
+R 2
+U 2
+L 4
+R 2
+D 1
+L 4
+U 1
+L 6
+R 6
+U 2
+D 5
+U 5
+D 4
+L 1
+R 3
+L 5
+U 6
+R 4
+D 1
+U 2
+R 1
+D 3
+R 1
+L 5
+D 3
+R 3
+U 5
+L 6
+R 3
+U 5
+L 2
+U 3
+R 3
+D 3
+U 1
+L 2
+U 2
+L 3
+D 6
+L 3
+D 4
+R 4
+D 4
+U 6
+L 6
+D 2
+R 1
+U 3
+L 6
+R 4
+D 1
+L 2
+U 4
+L 6
+U 1
+L 4
+D 1
+L 3
+R 2
+L 1
+R 2
+L 3
+R 1
+U 7
+D 7
+L 7
+U 1
+R 2
+U 6
+R 4
+L 6
+U 3
+R 4
+U 7
+D 5
+R 6
+U 6
+L 6
+R 4
+D 1
+U 3
+R 5
+L 2
+D 2
+U 5
+L 1
+D 3
+R 5
+L 2
+U 4
+D 1
+R 5
+U 2
+R 4
+L 3
+R 4
+L 2
+D 2
+L 4
+D 1
+U 4
+D 4
+R 4
+L 5
+R 2
+D 2
+L 2
+D 1
+L 2
+D 1
+L 4
+D 5
+R 7
+U 7
+L 2
+D 3
+L 4
+R 7
+D 7
+U 2
+D 7
+L 6
+D 3
+U 5
+R 5
+D 3
+U 7
+D 3
+L 5
+D 3
+R 4
+D 4
+L 7
+D 6
+U 2
+L 3
+R 6
+U 5
+R 7
+U 3
+L 1
+R 7
+U 2
+R 4
+L 7
+U 2
+D 4
+U 5
+D 6
+U 4
+D 6
+U 7
+R 1
+L 4
+R 3
+L 6
+U 4
+R 7
+L 6
+U 7
+D 1
+U 7
+D 4
+L 1
+D 3
+R 6
+U 3
+R 5
+L 4
+R 4
+L 4
+U 7
+R 3
+L 4
+D 7
+R 6
+U 2
+L 3
+U 8
+D 3
+U 4
+D 1
+R 4
+U 5
+R 2
+U 4
+D 8
+L 2
+D 8
+R 4
+L 1
+R 7
+L 6
+U 4
+L 4
+D 7
+L 3
+D 2
+U 8
+R 8
+U 6
+R 7
+D 3
+U 7
+R 1
+L 8
+D 2
+L 3
+R 5
+D 3
+U 3
+R 8
+L 1
+R 6
+L 8
+U 2
+D 4
+R 6
+L 6
+D 5
+U 4
+L 6
+U 1
+L 6
+U 3
+D 5
+U 5
+L 6
+D 8
+R 5
+D 4
+R 6
+U 7
+L 1
+D 2
+R 2
+L 7
+R 4
+D 7
+L 3
+U 6
+R 7
+D 3
+L 3
+D 2
+U 1
+R 3
+L 8
+U 8
+D 5
+L 6
+R 3
+L 6
+D 3
+R 4
+U 3
+L 8
+D 7
+L 6
+R 5
+D 6
+R 6
+D 3
+L 4
+R 1
+D 6
+U 3
+R 1
+D 5
+U 4
+L 1
+R 2
+U 6
+D 6
+R 7
+L 1
+R 6
+U 7
+D 8
+R 2
+U 3
+L 6
+U 2
+D 6
+U 8
+L 3
+U 4
+D 6
+R 6
+L 5
+U 9
+R 8
+L 2
+D 6
+R 3
+L 4
+D 2
+L 7
+D 5
+L 7
+U 8
+D 6
+L 9
+D 3
+L 5
+U 3
+L 8
+D 7
+R 8
+U 2
+L 9
+U 7
+D 7
+U 6
+D 5
+R 2
+D 8
+R 9
+U 4
+R 1
+L 3
+D 7
+R 2
+L 6
+U 1
+L 7
+D 8
+U 9
+R 9
+D 1
+U 9
+D 1
+R 1
+D 6
+R 7
+D 1
+L 1
+R 6
+U 3
+R 7
+U 2
+R 5
+U 6
+R 2
+L 7
+R 8
+D 9
+U 5
+L 9
+R 9
+U 2
+L 7
+R 4
+U 3
+R 6
+L 6
+D 7
+L 4
+R 7
+D 5
+L 5
+D 7
+U 8
+R 8
+L 8
+R 5
+D 5
+U 2
+R 1
+U 5
+R 6
+L 8
+U 9
+R 4
+D 9
+R 4
+D 3
+U 8
+R 8
+U 9
+L 6
+D 9
+R 6
+U 5
+R 1
+U 1
+L 9
+U 8
+L 1
+U 5
+L 1
+D 7
+R 6
+U 1
+D 3
+R 2
+D 3
+R 8
+D 2
+U 4
+R 8
+L 9
+D 2
+U 2
+R 4
+D 10
+L 4
+U 3
+D 6
+R 4
+U 8
+L 8
+U 3
+L 10
+D 7
+U 2
+L 6
+R 2
+U 8
+L 10
+U 7
+D 8
+L 7
+U 10
+R 4
+U 1
+L 1
+D 4
+U 10
+D 9
+U 4
+L 10
+R 4
+D 5
+U 8
+D 1
+R 5
+D 10
+L 8
+D 1
+U 2
+L 7
+U 1
+L 6
+D 2
+R 3
+L 3
+U 5
+R 9
+U 10
+D 5
+U 7
+L 3
+R 5
+U 7
+L 4
+U 1
+D 2
+U 8
+L 8
+U 7
+R 9
+L 1
+D 10
+R 8
+L 4
+U 4
+L 10
+R 2
+L 3
+D 7
+L 10
+R 6
+U 5
+D 4
+U 6
+R 10
+D 8
+U 3
+L 1
+R 1
+D 2
+R 1
+U 1
+R 5
+U 9
+R 6
+U 10
+L 2
+U 5
+L 7
+R 8
+U 10
+D 6
+L 3
+U 2
+L 4
+R 6
+L 5
+D 9
+U 3
+D 3
+R 10
+L 10
+D 4
+R 7
+D 7
+U 3
+L 5
+R 5
+L 9
+R 2
+U 8
+R 10
+U 10
+L 4
+U 1
+D 2
+U 5
+L 11
+R 3
+L 10
+U 7
+D 6
+U 11
+D 11
+U 2
+L 7
+D 11
+U 8
+L 5
+U 7
+L 10
+D 7
+L 2
+U 5
+D 4
+R 9
+L 10
+D 1
+U 6
+R 2
+L 7
+U 1
+R 4
+D 11
+U 2
+R 9
+U 11
+R 6
+U 9
+L 9
+D 3
+R 6
+L 4
+R 1
+L 5
+R 2
+U 3
+R 1
+U 7
+D 1
+R 11
+L 2
+D 7
+L 10
+U 1
+R 8
+L 6
+U 7
+D 11
+R 1
+U 11
+L 8
+D 6
+R 6
+D 10
+U 2
+D 1
+L 6
+R 9
+L 8
+U 10
+R 4
+U 4
+R 9
+D 3
+R 8
+D 11
+L 4
+U 8
+D 6
+R 1
+U 5
+L 8
+U 6
+R 9
+U 1
+R 8
+D 6
+R 4
+D 7
+R 7
+L 1
+D 6
+L 3
+D 9
+L 10
+D 5
+U 10
+L 11
+D 5
+U 9
+R 10
+L 11
+R 1
+U 6
+L 4
+U 7
+R 9
+L 10
+D 9
+R 5
+L 2
+D 1
+U 12
+L 7
+D 9
+U 8
+R 12
+L 11
+D 12
+L 4
+D 10
+U 7
+L 5
+U 6
+L 5
+R 3
+L 9
+U 7
+L 8
+U 10
+L 8
+R 1
+U 3
+D 6
+L 12
+U 6
+D 7
+L 7
+U 2
+D 8
+U 10
+L 12
+R 5
+L 7
+R 11
+D 5
+L 2
+R 10
+L 7
+U 9
+D 6
+R 3
+U 9
+L 1
+U 2
+D 9
+U 1
+D 2
+L 11
+R 4
+D 4
+L 6
+R 10
+L 6
+U 10
+L 2
+D 3
+R 12
+L 5
+R 5
+L 9
+D 6
+R 12
+U 6
+R 6
+D 6
+R 3
+L 12
+D 12
+L 10
+R 7
+U 7
+L 8
+R 6
+L 5
+D 3
+L 5
+U 12
+L 6
+U 10
+D 11
+U 11
+D 1
+U 9
+R 8
+L 8
+U 5
+R 3
+L 4
+R 6
+U 10
+L 1
+D 1
+R 7
+D 8
+L 1
+D 6
+R 3
+U 2
+D 4
+L 10
+D 9
+L 12
+U 6
+D 9
+U 8
+D 8
+L 8
+U 1
+D 6
+U 6
+D 4
+R 9
+L 5
+U 6
+R 7
+U 6
+D 3
+U 6
+D 10
+U 1
+L 13
+D 4
+U 6
+L 10
+R 6
+D 7
+U 9
+R 2
+L 5
+D 4
+U 10
+D 7
+L 12
+D 2
+R 1
+D 4
+R 1
+U 6
+L 9
+D 12
+U 8
+L 6
+U 4
+R 2
+L 1
+D 12
+U 12
+L 1
+D 7
+L 3
+R 10
+L 10
+U 2
+D 8
+R 5
+U 2
+L 5
+R 8
+L 5
+D 9
+L 11
+U 1
+D 6
+R 11
+D 11
+L 6
+R 13
+L 8
+U 7
+R 11
+L 9
+D 5
+L 2
+U 1
+D 13
+R 3
+D 2
+R 9
+U 3
+R 8
+D 10
+U 5
+D 3
+L 2
+D 9
+R 10
+D 4
+U 13
+D 10
+U 2
+R 8
+D 9
+R 13
+U 4
+D 3
+L 6
+U 8
+L 3
+R 3
+D 4
+U 6
+L 7
+R 3
+L 1
+D 1
+R 5
+U 8
+D 8
+U 11
+R 5
+U 2
+R 10
+L 3
+D 4
+U 1
+R 9
+L 7
+R 6
+L 13
+U 8
+L 8
+D 5
+R 10
+L 9
+U 7
+L 9
+U 9
+L 7
+R 5
+L 5
+U 7
+D 12
+U 7
+D 6
+R 14
+D 5
+L 11
+R 6
+L 4
+U 8
+R 9
+U 7
+R 12
+L 10
+U 10
+L 11
+R 7
+D 11
+R 7
+L 4
+D 9
+L 13
+R 6
+L 13
+D 2
+R 13
+D 12
+R 4
+U 11
+R 4
+D 3
+R 3
+L 12
+R 3
+D 11
+R 7
+D 7
+R 3
+U 4
+R 12
+D 14
+R 3
+L 10
+U 9
+L 2
+U 14
+L 2
+D 7
+U 10
+D 4
+U 6
+L 1
+D 11
+R 10
+D 1
+L 2
+U 9
+L 6
+R 12
+D 11
+R 8
+U 7
+D 2
+U 4
+D 12
+L 1
+U 8
+D 14
+R 2
+D 13
+R 10
+D 10
+R 14
+L 4
+D 14
+L 6
+R 13
+L 12
+U 4
+R 13
+L 12
+D 14
+L 1
+U 1
+L 4
+D 14
+R 12
+D 6
+U 11
+L 12
+U 2
+R 8
+D 14
+U 13
+D 6
+L 7
+D 4
+U 3
+L 8
+U 2
+D 12
+L 13
+U 8
+R 4
+D 10
+L 10
+U 5
+D 3
+L 10
+D 13
+R 15
+U 9
+L 10
+D 1
+U 11
+D 7
+U 3
+R 6
+L 11
+D 4
+R 8
+D 3
+U 7
+D 6
+L 11
+D 14
+R 15
+L 14
+D 2
+L 11
+R 13
+U 4
+D 13
+L 6
+D 4
+L 15
+D 5
+L 6
+U 8
+R 13
+L 5
+U 4
+R 9
+L 13
+D 3
+U 11
+R 6
+L 14
+R 9
+U 5
+D 5
+U 9
+D 12
+R 11
+U 8
+D 1
+R 2
+U 6
+R 11
+L 4
+R 7
+D 6
+U 6
+D 1
+L 4
+R 14
+D 11
+R 3
+U 9
+D 15
+L 14
+D 9
+R 4
+U 14
+R 3
+L 14
+D 15
+L 12
+R 5
+D 6
+U 15
+D 13
+U 10
+R 4
+D 3
+R 11
+U 11
+R 4
+L 1
+D 11
+U 14
+D 1
+U 14
+R 1
+L 14
+D 4
+U 12
+D 9
+L 13
+U 10
+D 14
+L 4
+U 15
+L 12
+U 3
+D 6
+U 1
+D 2
+R 13
+L 12
+U 2
+L 12
+D 7
+L 3
+U 15
+L 5
+R 9
+L 12
+U 1
+L 16
+D 4
+L 5
+U 16
+R 6
+D 4
+U 6
+R 3
+L 1
+D 7
+L 4
+D 1
+U 5
+D 1
+L 6
+R 2
+L 8
+R 3
+L 12
+D 15
+R 9
+L 5
+U 12
+L 5
+U 9
+R 14
+D 16
+R 13
+L 12
+U 3
+L 16
+D 3
+R 6
+U 2
+R 4
+D 2
+L 6
+D 15
+L 11
+D 6
+U 9
+D 13
+U 7
+L 10
+D 12
+L 4
+R 9
+U 5
+R 9
+U 16
+R 15
+D 10
+R 14
+L 8
+U 8
+D 8
+R 13
+U 6
+R 5
+D 9
+L 11
+R 1
+D 4
+L 3
+D 1
+U 11
+R 2
+L 7
+R 14
+D 5
+R 16
+U 11
+L 2
+D 1
+U 4
+R 15
+L 13
+R 3
+U 1
+R 1
+U 3
+R 16
+D 1
+L 4
+R 9
+L 3
+D 14
+R 15
+D 13
+U 13
+D 5
+U 8
+L 3
+U 6
+D 10
+U 6
+D 2
+U 13
+R 5
+L 16
+R 16
+U 12
+R 10
+D 13
+L 1
+D 13
+R 15
+D 7
+R 7
+U 16
+R 10
+U 7
+L 14
+D 4
+L 6
+U 9
+L 15
+R 6
+L 14
+D 5
+R 6
+D 5
+L 6
+R 1
+U 13
+L 15
+R 14
+L 12
+D 2
+L 1
+U 1
+R 13
+L 11
+R 15
+D 17
+L 13
+R 8
+D 14
+R 2
+D 1
+R 3
+U 8
+R 8
+L 14
+D 6
+U 3
+D 9
+R 12
+L 13
+U 2
+D 8
+U 15
+D 16
+L 5
+D 7
+U 15
+R 7
+L 5
+R 13
+D 4
+L 7
+R 1
+D 7
+L 11
+R 2
+U 17
+L 6
+U 15
+D 5
+R 17
+D 12
+U 17
+L 3
+R 15
+U 7
+L 2
+R 5
+D 17
+L 12
+U 10
+D 5
+L 16
+R 17
+D 2
+R 15
+D 4
+U 1
+D 5
+U 10
+L 8
+U 16
+D 2
+L 11
+R 7
+U 15
+L 15
+D 2
+L 8
+R 3
+U 8
+R 7
+U 6
+L 17
+U 8
+R 6
+L 13
+R 6
+D 13
+L 9
+U 2
+R 7
+D 14
+L 10
+U 8
+D 10
+U 4
+R 3
+L 1
+D 5
+U 18
+L 1
+U 9
+D 4
+R 3
+D 11
+R 9
+U 18
+D 12
+R 13
+L 8
+D 6
+U 13
+R 6
+U 15
+R 14
+U 11
+R 11
+D 15
+L 7
+R 11
+D 16
+U 14
+R 15
+D 16
+R 3
+D 10
+R 6
+U 17
+L 9
+R 1
+D 12
+R 18
+U 11
+L 2
+R 5
+L 10
+U 13
+L 3
+D 15
+U 14
+D 13
+R 5
+U 15
+L 9
+U 6
+D 16
+L 1
+U 1
+D 12
+R 18
+L 13
+R 10
+U 14
+L 13
+U 3
+L 2
+R 11
+U 18
+D 14
+R 4
+L 6
+R 10
+U 18
+L 18
+R 9
+L 11
+U 4
+D 5
+L 15
+R 13
+L 18
+U 16
+L 1
+R 12
+U 17
+D 11
+U 1
+L 13
+U 7
+D 3
+U 5
+R 8
+D 4
+L 7
+D 17
+U 9
+R 1
+L 18
+U 13
+L 7
+U 12
+D 2
+R 18
+D 12
+U 11
+R 13
+U 12
+L 13
+R 7
+U 6
+D 5
+L 13
+D 15
+R 12
+D 8
+L 19
+U 10
+L 4
+D 18
+U 9
+D 5
+U 2
+L 1
+D 2
+R 8
+U 9
+R 1
+D 11
+U 18
+R 11
+D 19
+U 6
+D 14
+U 6
+D 4
+U 2
+L 12
+D 15
+L 10
+R 5
+U 16
+L 3
+D 8
+L 10
+D 7
+R 16
+D 8
+R 6
+L 16
+R 6
+D 8
+U 15
+D 1
+L 14
+U 14
+R 16
+L 14
+D 2
+R 6
+D 5
+R 14
+L 15
+D 2
+R 15
+L 4
+U 18
+R 8
+D 6
+R 7
+L 2
+U 5
+L 19
+R 17
+L 19
+R 13
+L 2
+U 7
+D 19
+R 9
+L 8
+D 18
+U 2
+R 3
+U 7
+D 9
+R 12
+U 13
+L 15
+U 2
+D 6
+R 18
+D 7
+L 10
+R 4
+L 12
+D 6
+L 4
+D 10
+L 7
+U 12
+L 9
+R 12
+L 13
+R 13
+L 18
+R 18
+U 7
+D 5
+R 8
+D 18
+L 11
+D 5
+L 1
+U 6
+R 19
+U 17
+R 16
+L 8
+R 11
+U 17
+D 1
+R 11
+L 12
+D 4
+U 13
diff --git a/2022/day09/src/main.rs b/2022/day09/src/main.rs
@@ -0,0 +1,88 @@
+use std::cmp::Ordering;
+use std::collections::HashSet;
+
+#[derive(Debug)]
+enum Dir {
+    Left,
+    Right,
+    Up,
+    Down,
+}
+
+impl Dir {
+    fn from_str(s: &str) -> Self {
+        match s {
+            "L" => Self::Left,
+            "R" => Self::Right,
+            "U" => Self::Up,
+            "D" => Self::Down,
+            _ => unreachable!(),
+        }
+    }
+}
+
+fn sign(x: i32) -> i32 {
+    match x.cmp(&0) {
+        Ordering::Greater => 1,
+        Ordering::Equal => 0,
+        Ordering::Less => -1,
+    }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+struct Coord(i32, i32);
+
+impl Coord {
+    fn move_in(&mut self, dir: &Dir) {
+        match dir {
+            Dir::Left => self.0 = self.0 - 1,
+            Dir::Right => self.0 = self.0 + 1,
+            Dir::Up => self.1 = self.1 + 1,
+            Dir::Down => self.1 = self.1 - 1,
+        }
+    }
+
+    fn is_touching(&self, other: &Coord) -> bool {
+        return (other.0 - self.0).abs() <= 1 && (other.1 - self.1).abs() <= 1;
+    }
+
+    fn follow(&mut self, other: &Coord) {
+        self.0 = self.0 + sign(other.0 - self.0);
+        self.1 = self.1 + sign(other.1 - self.1);
+    }
+}
+
+fn main() {
+    let input = std::fs::read_to_string("input.txt")
+        .unwrap()
+        .trim()
+        .split("\n")
+        .map(|x| {
+            let tmp = x.split(' ').collect::<Vec<_>>();
+            (Dir::from_str(tmp[0]), tmp[1].parse::<i32>().unwrap())
+        })
+        .collect::<Vec<(Dir, i32)>>();
+    // 6087
+    println!("Part 1: {}", part_1(&input, 2));
+    // 2493
+    println!("Part 2: {}", part_1(&input, 10));
+}
+
+fn part_1(input: &Vec<(Dir, i32)>, rope_length: usize) -> usize {
+    let mut rope = vec![Coord(0, 0); rope_length];
+    let mut visited = HashSet::new();
+    visited.insert(rope.last().unwrap().clone());
+    for (dir, step) in input {
+        for _ in 0..*step {
+            rope[0].move_in(dir);
+            for i in 1..rope_length {
+                if !rope[i].is_touching(&rope[i - 1]) {
+                    let tmp = rope[i - 1].clone();
+                    rope[i].follow(&tmp);
+                }
+            }
+            visited.insert(rope.last().unwrap().clone());
+        }
+    }
+    visited.len()
+}