From 7fc1ca6ed41bd3a390e17ca265d79bbda85159cf Mon Sep 17 00:00:00 2001 From: Dustin Swan Date: Fri, 9 Dec 2022 13:16:33 -0800 Subject: [PATCH] Day 9. Pretty straight forward. The borrow checker must have felt bad for me and did not give me any problems today --- day9/Cargo.lock | 7 + day9/Cargo.toml | 8 + day9/data.txt | 2000 ++++++++++++++++++++++++++++++++++++++++++++++ day9/src/main.rs | 103 +++ day9/test.txt | 8 + day9/test2.txt | 8 + 6 files changed, 2134 insertions(+) create mode 100644 day9/Cargo.lock create mode 100644 day9/Cargo.toml create mode 100644 day9/data.txt create mode 100644 day9/src/main.rs create mode 100644 day9/test.txt create mode 100644 day9/test2.txt diff --git a/day9/Cargo.lock b/day9/Cargo.lock new file mode 100644 index 0000000..f5578cf --- /dev/null +++ b/day9/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day9" +version = "0.1.0" diff --git a/day9/Cargo.toml b/day9/Cargo.toml new file mode 100644 index 0000000..b5e5273 --- /dev/null +++ b/day9/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day9" +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/day9/data.txt b/day9/data.txt new file mode 100644 index 0000000..67c0d6c --- /dev/null +++ b/day9/data.txt @@ -0,0 +1,2000 @@ +L 1 +D 2 +U 1 +L 1 +R 2 +L 2 +U 1 +D 2 +R 2 +L 2 +U 1 +D 2 +R 1 +D 2 +L 2 +D 1 +L 2 +R 1 +U 2 +R 2 +U 2 +L 2 +U 1 +L 2 +R 1 +D 1 +R 1 +L 1 +R 1 +L 1 +R 1 +U 1 +R 1 +L 1 +D 2 +L 2 +D 2 +L 1 +R 1 +D 1 +R 1 +D 2 +L 1 +D 2 +L 1 +R 2 +D 2 +R 2 +U 1 +R 1 +U 2 +R 1 +U 2 +R 1 +D 2 +L 1 +D 2 +U 1 +R 2 +D 2 +L 1 +U 2 +R 2 +L 2 +D 2 +L 2 +D 2 +R 1 +U 2 +L 2 +U 1 +R 1 +D 1 +L 1 +D 1 +U 1 +D 2 +L 1 +R 1 +D 1 +R 1 +L 2 +R 1 +L 1 +U 2 +D 2 +U 1 +L 1 +U 2 +R 1 +D 2 +U 1 +D 1 +L 1 +D 2 +U 2 +D 1 +U 2 +R 2 +L 2 +D 1 +R 2 +D 1 +L 2 +D 2 +L 2 +R 1 +L 1 +R 2 +L 2 +R 2 +U 1 +R 1 +U 3 +D 2 +U 3 +L 1 +R 1 +U 3 +D 1 +L 1 +R 3 +D 2 +L 3 +R 3 +D 2 +R 2 +U 3 +R 3 +U 3 +R 2 +U 3 +D 2 +L 3 +U 3 +R 1 +U 1 +R 3 +U 2 +L 1 +R 1 +U 1 +L 3 +R 3 +U 3 +D 2 +U 1 +L 1 +D 3 +R 3 +U 2 +L 1 +R 3 +L 3 +D 3 +U 3 +R 2 +L 1 +U 1 +L 3 +R 3 +U 1 +R 3 +L 2 +R 2 +D 3 +U 1 +D 3 +U 3 +R 3 +D 2 +L 2 +U 2 +D 3 +L 3 +U 3 +R 3 +D 2 +R 3 +U 1 +D 1 +U 2 +R 1 +D 3 +R 1 +L 2 +U 3 +D 1 +L 1 +D 3 +U 2 +L 3 +R 3 +L 1 +D 2 +L 3 +U 3 +L 1 +D 2 +L 1 +D 1 +L 2 +U 2 +D 2 +U 2 +L 2 +D 3 +L 3 +D 3 +R 3 +U 1 +R 3 +U 1 +R 3 +D 3 +U 2 +D 1 +R 2 +L 2 +R 2 +D 2 +R 2 +D 1 +R 3 +D 1 +U 2 +L 4 +D 1 +L 2 +R 1 +U 1 +D 3 +U 4 +D 2 +L 3 +R 2 +D 3 +R 4 +U 1 +D 1 +U 1 +L 3 +U 1 +D 3 +R 3 +D 3 +R 1 +U 4 +R 1 +U 1 +R 2 +L 4 +U 3 +D 2 +R 2 +D 1 +U 2 +L 3 +D 4 +U 4 +D 4 +U 4 +L 3 +U 3 +D 3 +R 3 +L 4 +R 3 +D 2 +L 2 +R 1 +D 1 +L 4 +R 3 +D 2 +U 1 +L 2 +R 1 +U 2 +L 4 +R 4 +L 3 +U 4 +D 2 +U 4 +D 4 +L 1 +U 4 +L 3 +U 2 +D 2 +R 2 +D 3 +R 4 +D 1 +U 4 +D 1 +U 1 +D 3 +L 3 +D 2 +R 4 +D 4 +L 2 +U 2 +L 3 +R 4 +L 2 +R 2 +D 3 +L 2 +D 4 +U 3 +D 4 +L 3 +R 2 +U 3 +D 4 +R 2 +U 3 +R 1 +D 1 +R 1 +D 2 +R 3 +D 4 +L 1 +U 3 +L 3 +U 4 +R 1 +U 3 +L 4 +D 5 +R 2 +D 2 +U 2 +D 1 +R 4 +D 1 +L 4 +D 4 +L 1 +R 1 +D 4 +U 4 +L 1 +D 4 +L 4 +U 5 +R 4 +D 4 +R 5 +U 3 +L 5 +U 1 +R 4 +L 1 +R 3 +L 2 +D 5 +R 1 +D 4 +R 2 +U 5 +L 3 +R 5 +U 4 +R 1 +D 4 +U 3 +R 3 +L 3 +R 3 +L 3 +U 2 +D 4 +U 2 +L 3 +D 2 +R 3 +U 3 +D 2 +U 1 +R 5 +L 4 +R 4 +L 4 +D 3 +R 3 +U 2 +R 1 +D 3 +U 3 +D 2 +L 1 +D 2 +U 1 +L 3 +U 5 +L 1 +D 1 +U 5 +D 3 +U 4 +D 4 +L 5 +R 3 +D 4 +R 2 +L 1 +D 1 +L 3 +U 3 +R 1 +L 2 +D 4 +L 5 +U 1 +L 4 +R 4 +U 2 +D 1 +R 5 +D 3 +U 2 +D 3 +U 4 +D 4 +U 1 +L 2 +D 4 +L 3 +U 4 +L 1 +R 1 +L 2 +R 3 +L 2 +U 1 +D 2 +U 5 +R 2 +D 4 +U 1 +D 4 +U 4 +D 5 +L 6 +D 3 +U 2 +D 1 +L 3 +U 4 +R 4 +D 4 +R 3 +L 4 +U 6 +D 1 +U 4 +R 2 +L 1 +D 2 +U 4 +D 5 +U 3 +D 6 +L 1 +U 3 +L 1 +U 1 +D 6 +L 3 +U 6 +L 3 +D 6 +L 1 +D 6 +U 2 +D 5 +U 2 +L 5 +D 3 +U 2 +D 1 +U 6 +L 1 +D 4 +L 6 +R 3 +D 3 +L 3 +D 2 +R 3 +D 5 +R 3 +D 2 +L 1 +R 4 +L 6 +D 4 +R 4 +U 1 +R 6 +D 3 +U 1 +R 1 +D 1 +L 3 +D 1 +R 3 +U 5 +L 5 +D 2 +L 3 +D 2 +L 5 +U 3 +L 1 +U 5 +L 3 +D 4 +U 5 +D 1 +L 6 +D 1 +R 6 +U 4 +R 1 +D 1 +L 2 +U 5 +R 2 +U 6 +L 5 +U 5 +L 6 +U 6 +D 3 +L 1 +R 3 +L 3 +U 4 +R 5 +L 6 +D 5 +L 4 +R 6 +L 6 +R 5 +D 2 +R 4 +L 2 +U 1 +L 3 +U 6 +L 4 +D 6 +U 6 +D 4 +L 2 +R 7 +U 4 +R 1 +L 5 +D 2 +R 3 +U 4 +L 5 +U 7 +L 2 +R 1 +U 4 +L 2 +R 5 +L 6 +D 5 +L 4 +U 5 +L 7 +U 1 +L 5 +U 1 +L 5 +D 3 +U 3 +R 7 +U 7 +R 7 +L 6 +D 4 +U 7 +R 2 +D 3 +R 3 +U 4 +D 4 +U 5 +D 6 +L 5 +R 6 +U 4 +R 6 +D 1 +R 4 +U 1 +D 1 +R 1 +L 4 +U 5 +L 3 +D 5 +L 5 +D 3 +U 2 +R 5 +D 7 +U 7 +D 1 +U 5 +R 6 +U 4 +R 6 +L 7 +U 5 +R 1 +L 1 +U 1 +R 1 +D 7 +L 2 +U 5 +R 4 +U 2 +D 6 +U 6 +L 7 +U 3 +D 2 +L 3 +R 3 +U 2 +L 1 +R 2 +L 5 +D 6 +R 2 +U 6 +L 1 +D 7 +R 4 +D 3 +L 2 +U 5 +R 4 +L 2 +R 5 +D 1 +U 1 +R 6 +D 5 +U 6 +R 2 +U 2 +L 2 +U 6 +L 5 +U 1 +L 1 +D 7 +R 6 +U 5 +D 3 +L 5 +R 3 +D 3 +U 2 +D 7 +U 7 +L 1 +D 5 +L 5 +U 4 +L 5 +D 1 +U 6 +D 5 +L 7 +D 8 +U 8 +R 6 +U 5 +D 8 +U 1 +R 2 +U 6 +D 6 +L 4 +D 2 +R 3 +U 7 +R 4 +U 4 +R 5 +U 6 +R 1 +U 4 +R 1 +U 4 +D 5 +U 3 +L 7 +U 8 +R 1 +D 1 +U 8 +L 8 +U 3 +L 1 +D 4 +R 2 +D 4 +U 2 +L 4 +D 8 +R 7 +D 5 +U 4 +L 5 +U 5 +D 8 +R 8 +U 3 +R 8 +L 4 +U 5 +R 6 +U 7 +D 3 +L 1 +U 5 +D 2 +R 5 +U 4 +D 8 +L 4 +R 1 +D 6 +R 1 +L 6 +D 6 +L 7 +D 4 +L 4 +D 8 +R 8 +D 7 +L 6 +R 1 +D 4 +L 5 +D 2 +U 3 +D 2 +U 6 +R 1 +U 7 +D 7 +R 2 +U 7 +D 5 +L 6 +U 1 +L 8 +U 1 +L 1 +R 9 +D 1 +U 6 +D 5 +L 1 +R 9 +D 2 +L 2 +D 6 +U 6 +D 7 +L 3 +R 5 +L 6 +U 5 +R 1 +U 1 +R 3 +L 9 +U 6 +L 6 +U 2 +D 6 +R 9 +U 4 +D 3 +L 8 +U 5 +D 7 +L 1 +U 7 +R 1 +L 6 +D 8 +L 5 +R 7 +L 2 +R 6 +L 5 +D 3 +L 8 +D 7 +U 8 +R 6 +L 6 +D 7 +U 8 +D 1 +U 2 +D 5 +U 7 +D 8 +L 1 +D 1 +L 1 +U 1 +R 3 +L 5 +R 9 +D 2 +L 8 +R 6 +D 6 +U 1 +R 7 +L 4 +U 4 +D 1 +L 5 +U 2 +R 9 +D 7 +U 8 +L 8 +R 4 +D 1 +L 1 +U 7 +R 8 +L 3 +D 2 +U 8 +R 1 +D 5 +L 1 +R 7 +D 6 +R 2 +U 9 +D 2 +L 5 +U 4 +D 9 +L 7 +D 9 +L 2 +U 9 +D 5 +L 7 +D 6 +U 5 +D 9 +R 3 +U 8 +L 7 +U 1 +L 3 +U 3 +D 1 +L 6 +R 9 +U 2 +L 7 +R 9 +U 5 +R 2 +L 3 +R 4 +D 9 +L 4 +R 9 +U 4 +L 10 +R 9 +D 9 +U 10 +L 2 +R 4 +U 4 +R 9 +D 2 +R 1 +L 4 +R 7 +D 3 +L 6 +U 1 +L 9 +D 6 +U 10 +D 1 +R 10 +D 9 +L 6 +D 10 +U 3 +R 10 +L 8 +U 9 +D 1 +L 1 +D 10 +L 1 +D 5 +L 9 +U 3 +L 4 +U 4 +D 1 +U 3 +R 7 +L 3 +R 3 +L 3 +R 8 +D 9 +R 4 +L 6 +D 7 +R 10 +U 6 +R 2 +D 2 +L 3 +R 9 +D 9 +U 7 +D 2 +R 6 +U 10 +R 8 +U 5 +R 5 +U 10 +R 6 +U 7 +L 7 +U 7 +D 4 +L 9 +U 2 +R 7 +L 8 +R 4 +L 1 +U 9 +R 8 +D 4 +R 5 +D 4 +L 1 +D 10 +R 8 +D 10 +U 9 +D 3 +R 1 +U 10 +R 1 +D 10 +R 1 +L 6 +D 3 +U 8 +R 4 +U 9 +D 8 +U 3 +D 2 +R 3 +L 5 +U 4 +L 3 +R 4 +D 6 +L 9 +R 1 +D 9 +R 2 +D 11 +R 8 +D 5 +R 8 +L 2 +D 2 +L 7 +U 11 +D 10 +L 6 +R 2 +U 9 +L 10 +D 4 +L 5 +R 7 +D 4 +L 1 +U 3 +L 9 +D 7 +R 4 +D 10 +L 5 +U 9 +L 10 +D 5 +L 11 +R 11 +U 8 +R 11 +U 2 +R 7 +L 10 +R 2 +D 8 +L 2 +D 8 +R 11 +L 6 +R 3 +L 2 +U 2 +R 2 +U 3 +D 3 +U 5 +L 8 +U 9 +R 10 +D 1 +U 4 +D 8 +R 3 +D 11 +R 4 +D 4 +R 7 +U 6 +L 11 +U 11 +D 8 +L 5 +R 2 +L 11 +U 7 +D 5 +U 5 +D 9 +L 2 +U 3 +R 10 +U 1 +R 1 +L 11 +D 3 +L 5 +R 2 +L 10 +R 4 +L 1 +U 1 +L 4 +R 5 +U 2 +D 6 +R 11 +U 8 +D 5 +R 5 +D 3 +L 2 +U 7 +D 10 +L 11 +D 10 +U 11 +R 8 +L 2 +D 9 +R 9 +L 11 +R 10 +U 3 +R 4 +L 5 +R 12 +U 5 +D 5 +L 6 +D 11 +R 8 +D 12 +U 6 +L 10 +R 9 +U 1 +L 12 +D 1 +R 8 +U 9 +D 9 +R 6 +D 3 +L 1 +R 3 +L 8 +R 6 +U 12 +L 1 +U 8 +D 7 +U 5 +D 12 +L 4 +R 11 +U 9 +D 12 +R 8 +D 2 +R 7 +U 8 +R 10 +U 3 +R 4 +D 4 +U 9 +R 7 +L 9 +R 7 +U 8 +L 9 +U 6 +R 4 +L 11 +D 11 +R 6 +U 2 +D 1 +R 2 +L 2 +D 11 +R 5 +U 1 +R 1 +D 3 +U 2 +L 3 +U 12 +R 10 +U 12 +R 9 +D 11 +U 9 +L 2 +R 7 +U 5 +R 7 +U 9 +R 3 +D 4 +L 9 +D 4 +R 12 +L 3 +U 12 +L 9 +U 3 +L 11 +R 7 +U 11 +D 2 +L 11 +R 2 +L 12 +U 10 +L 6 +R 8 +D 6 +R 12 +L 7 +R 4 +U 5 +D 10 +R 8 +L 11 +D 4 +U 1 +R 9 +U 12 +D 3 +L 10 +R 11 +U 1 +L 5 +U 11 +L 7 +U 1 +D 13 +U 10 +L 12 +U 9 +D 8 +L 5 +R 4 +L 1 +R 2 +L 7 +D 1 +L 11 +U 9 +R 5 +D 12 +L 4 +U 7 +L 6 +R 7 +U 1 +L 7 +U 2 +D 4 +R 4 +D 7 +L 3 +D 9 +U 3 +D 3 +U 12 +R 2 +L 12 +R 9 +L 8 +D 10 +U 1 +R 11 +L 13 +U 1 +D 3 +U 12 +L 3 +R 7 +L 7 +D 7 +U 7 +D 7 +U 10 +D 1 +L 7 +D 11 +R 3 +D 6 +R 9 +D 5 +U 12 +D 6 +R 8 +D 3 +R 7 +L 6 +D 10 +U 8 +R 9 +D 4 +R 9 +D 2 +U 4 +R 4 +U 7 +L 12 +R 2 +D 10 +U 13 +R 12 +L 12 +D 1 +R 11 +L 2 +U 13 +L 12 +D 7 +L 2 +U 4 +L 4 +D 8 +L 9 +R 3 +D 4 +L 9 +U 9 +L 9 +R 10 +L 4 +R 4 +U 10 +L 11 +D 8 +U 8 +L 13 +R 1 +L 8 +U 13 +L 9 +U 1 +R 13 +U 7 +L 3 +R 8 +L 1 +D 5 +R 7 +U 8 +D 5 +L 12 +R 11 +U 11 +D 10 +U 5 +R 6 +D 11 +R 1 +D 1 +R 9 +L 8 +D 4 +L 11 +U 9 +D 4 +U 3 +D 13 +U 13 +L 6 +D 6 +R 11 +L 9 +U 3 +R 7 +D 9 +R 5 +L 9 +D 14 +R 8 +L 14 +R 6 +L 6 +U 6 +R 7 +L 11 +R 1 +L 6 +D 10 +R 1 +D 14 +R 12 +U 4 +R 2 +L 9 +R 14 +L 3 +D 9 +U 10 +R 11 +L 5 +R 14 +U 3 +D 8 +R 9 +L 13 +U 4 +L 2 +R 4 +D 6 +L 13 +D 4 +R 2 +L 2 +D 10 +L 10 +R 4 +D 2 +R 2 +U 6 +D 7 +U 12 +R 5 +U 13 +L 6 +U 12 +L 3 +D 11 +R 3 +L 7 +U 11 +D 4 +L 13 +U 14 +R 10 +D 12 +U 2 +L 1 +U 12 +D 6 +U 2 +R 12 +L 3 +D 9 +U 9 +R 14 +L 12 +R 5 +L 11 +R 11 +L 5 +R 2 +L 4 +D 8 +U 3 +R 4 +D 12 +R 10 +L 10 +D 10 +U 10 +R 9 +L 14 +R 3 +L 1 +D 1 +R 15 +D 15 +R 12 +L 15 +D 12 +L 10 +R 3 +U 14 +D 4 +U 7 +R 11 +L 10 +U 4 +D 15 +L 3 +U 1 +R 2 +L 15 +U 6 +L 6 +D 3 +L 14 +D 12 +U 1 +L 15 +R 13 +U 7 +D 6 +R 11 +U 7 +L 2 +D 11 +L 1 +R 7 +D 1 +L 4 +R 11 +U 5 +L 4 +R 13 +U 1 +D 4 +L 6 +R 10 +L 15 +U 7 +D 9 +L 10 +R 8 +U 10 +D 8 +L 14 +D 15 +R 14 +U 10 +D 4 +U 6 +D 2 +R 6 +L 6 +D 4 +U 12 +L 3 +R 6 +U 9 +R 3 +U 11 +R 3 +U 15 +D 1 +U 2 +D 3 +U 11 +L 3 +U 2 +L 14 +D 3 +R 9 +D 5 +L 10 +U 7 +L 6 +D 8 +L 8 +U 8 +L 14 +R 9 +L 14 +U 10 +L 8 +U 5 +L 2 +U 4 +D 5 +R 2 +L 1 +U 14 +R 3 +L 4 +U 9 +D 7 +U 14 +D 11 +R 9 +U 5 +R 8 +L 5 +U 3 +D 8 +R 8 +L 11 +R 7 +L 3 +D 16 +L 11 +U 7 +D 6 +R 5 +L 4 +U 9 +L 12 +R 9 +L 10 +D 13 +L 3 +D 13 +U 6 +R 14 +U 2 +L 5 +R 4 +L 15 +U 9 +D 5 +L 6 +R 7 +U 10 +L 3 +D 5 +U 8 +D 12 +L 11 +U 14 +D 12 +U 2 +D 9 +U 11 +D 5 +L 5 +R 10 +L 14 +U 1 +R 8 +D 5 +R 6 +U 6 +L 3 +U 11 +L 8 +R 3 +U 5 +L 1 +R 16 +D 10 +U 12 +R 11 +D 2 +U 4 +D 15 +U 16 +D 2 +L 9 +R 10 +L 3 +U 8 +R 13 +U 11 +D 12 +U 15 +D 1 +L 14 +R 3 +U 13 +D 7 +R 15 +L 3 +R 1 +U 7 +R 6 +D 12 +L 2 +R 13 +D 3 +R 6 +D 10 +U 2 +R 4 +D 12 +L 7 +R 7 +L 8 +R 14 +L 15 +D 8 +L 6 +U 14 +L 16 +U 10 +D 7 +R 6 +D 12 +R 16 +U 11 +R 2 +U 10 +L 1 +R 6 +U 14 +D 13 +U 7 +L 10 +D 4 +L 7 +R 11 +U 17 +D 6 +U 6 +R 6 +U 12 +L 16 +U 5 +R 15 +L 17 +D 13 +U 12 +L 1 +D 7 +L 13 +R 7 +U 2 +L 5 +U 12 +R 10 +U 7 +R 11 +U 17 +D 15 +U 15 +L 10 +D 3 +L 15 +U 8 +R 8 +D 10 +L 9 +U 6 +R 9 +L 1 +U 5 +R 6 +L 11 +D 17 +L 7 +U 3 +D 17 +R 17 +U 8 +L 15 +R 3 +D 2 +U 17 +L 1 +R 13 +U 13 +L 10 +R 2 +D 12 +L 12 +R 13 +L 14 +R 16 +D 12 +R 4 +U 14 +L 15 +R 10 +D 7 +R 12 +U 6 +L 8 +U 7 +R 1 +D 3 +R 3 +L 11 +D 2 +R 15 +U 17 +L 13 +U 17 +D 4 +U 11 +L 17 +D 12 +R 3 +L 12 +U 8 +D 2 +L 14 +U 16 +D 6 +U 7 +L 12 +R 17 +L 7 +D 1 +L 16 +D 16 +R 17 +D 5 +U 16 +D 2 +L 13 +U 9 +D 13 +R 3 +U 1 +D 12 +R 4 +D 11 +L 8 +D 8 +R 13 +D 16 +R 1 +D 10 +R 18 +U 6 +D 4 +U 17 +R 12 +L 14 +U 5 +L 15 +U 18 +R 4 +D 17 +L 4 +R 18 +U 18 +D 4 +L 1 +U 4 +L 2 +U 17 +R 16 +L 7 +U 10 +R 11 +U 9 +R 11 +L 16 +U 3 +R 3 +L 18 +U 8 +R 1 +U 1 +L 5 +U 5 +D 7 +L 1 +R 2 +U 16 +R 17 +D 4 +U 16 +L 12 +R 3 +L 16 +D 5 +U 5 +R 18 +L 7 +U 1 +L 7 +U 16 +R 14 +L 4 +R 13 +L 3 +U 4 +L 11 +U 3 +L 12 +U 16 +L 14 +U 3 +L 9 +R 18 +D 8 +L 15 +R 10 +D 2 +L 13 +D 11 +U 4 +L 13 +D 7 +L 12 +U 7 +D 17 +U 9 +D 5 +L 10 +R 2 +D 7 +L 14 +U 10 +D 17 +L 3 +R 17 +U 16 +D 13 +R 13 +U 14 +R 9 +L 3 +U 14 +L 7 +U 4 +D 1 +R 18 +U 11 +D 9 +U 8 +R 15 +L 5 +D 9 +L 2 +D 18 +U 12 +D 3 +U 14 +D 9 +U 13 +R 16 +U 8 +R 16 +U 4 +L 8 +D 14 +R 15 +D 6 +R 17 +U 6 +D 1 +L 2 +U 9 +D 15 +L 7 +D 3 +R 1 +L 1 +R 17 +D 12 +R 19 +U 4 +R 19 +L 2 +D 17 +U 11 +D 1 +L 9 +R 18 +L 7 +D 13 +U 6 +D 16 +L 6 +R 13 +U 12 +R 1 +L 2 +U 8 +L 16 +R 10 +D 15 +R 5 +L 1 +U 5 +R 18 +U 1 +R 4 +U 14 +R 3 +L 4 +U 13 +D 14 +L 10 +D 7 +U 3 +R 17 +L 19 +R 1 +D 12 +L 9 +U 19 +D 19 +L 5 +R 10 +L 14 +U 15 +D 19 +U 18 +D 14 +R 11 +U 8 +R 2 +U 16 +L 17 +D 6 +L 1 +D 10 +R 18 +U 5 +R 14 +U 10 +D 6 +L 17 +D 6 +U 7 +R 14 +L 1 +U 3 +D 3 +R 18 +D 1 +L 6 +D 18 +L 2 +R 10 +L 9 +R 10 +L 14 +R 15 +U 10 diff --git a/day9/src/main.rs b/day9/src/main.rs new file mode 100644 index 0000000..8f6a2a8 --- /dev/null +++ b/day9/src/main.rs @@ -0,0 +1,103 @@ +use std::collections::HashMap; + +fn main() { + let contents = std::fs::read_to_string("data.txt").expect("Failed to read file"); + let lines = contents.lines().collect::>(); + + let mut hash: HashMap<(i32, i32), bool> = HashMap::new(); + run(&lines, &mut hash, 1); + let part_1 = hash.keys().len(); + println!("Num visited, part 1: {:?}", part_1); + + let mut hash2: HashMap<(i32, i32), bool> = HashMap::new(); + run(&lines, &mut hash2, 9); + let part_2 = hash2.keys().len(); + println!("Num visited, part 2: {:?}", part_2); +} + +fn run(lines: &Vec<&str>, hash: &mut HashMap<(i32, i32), bool>, num_tails: usize) { + let mut head = (0i32, 0i32); + let mut tails: Vec<(i32, i32)> = vec![(0, 0); num_tails]; + + for line in lines { + let (dir, steps) = line.split_once(" ").unwrap(); + + for _ in 0..steps.parse().unwrap() { + match dir { + "L" => head = (head.0, head.1 - 1), + "R" => head = (head.0, head.1 + 1), + "U" => head = (head.0 - 1, head.1), + "D" => head = (head.0 + 1, head.1), + _ => (), + } + // println!("\nnew head location {:?}", head); + + let mut parent = head; + + for tail_i in 0..num_tails { + let mut tail = tails[tail_i]; + + // find the distance from parent to tail + let v_dist = parent.0 - tail.0; + let h_dist = parent.1 - tail.1; + let mut already_moved_diagonally = false; + + // move vertically + if v_dist.abs() > 1 { + let v_diff = v_dist / v_dist.abs(); + tail = (tail.0 + v_diff, tail.1); + + // do we need to move horizontally? + if parent.1 != tail.1 { + let h_diff = h_dist / h_dist.abs(); + tail = (tail.0, tail.1 + h_diff); + already_moved_diagonally = true; + } + } + + // move horizontally + if h_dist.abs() > 1 && !already_moved_diagonally { + let h_diff = h_dist / h_dist.abs(); + tail = (tail.0, tail.1 + h_diff); + + // do we need to move horizontally? + if parent.0 != tail.0 { + let v_diff = v_dist / v_dist.abs(); + tail = (tail.0 + v_diff, tail.1); + } + } + + // println!("new tail ({:?}) location {:?}", tail_i + 1, tail); + if tail_i == num_tails - 1 { + // for the last tail, record where it has been + hash.insert(tail, true); + } + + tails[tail_i] = tail; + parent = tail; + } + } + + let mut temp = tails.to_owned(); + temp.insert(0, head); + display(temp); + } +} + +fn display(rope: Vec<(i32, i32)>) -> () { + let v_min = rope.iter().map(|x| x.0).min().unwrap(); + let v_max = rope.iter().map(|x| x.0).max().unwrap(); + let h_min = rope.iter().map(|x| x.1).min().unwrap(); + let h_max = rope.iter().map(|x| x.1).max().unwrap(); + + for v in v_min..=v_max { + for h in h_min..=h_max { + match rope.iter().position(|&x| x == (v, h)) { + Some(i) => print!("{i}"), + None => print!("."), + } + } + println!(""); + } + println!(""); +} diff --git a/day9/test.txt b/day9/test.txt new file mode 100644 index 0000000..9874df2 --- /dev/null +++ b/day9/test.txt @@ -0,0 +1,8 @@ +R 4 +U 4 +L 3 +D 1 +R 4 +D 1 +L 5 +R 2 diff --git a/day9/test2.txt b/day9/test2.txt new file mode 100644 index 0000000..60bd43b --- /dev/null +++ b/day9/test2.txt @@ -0,0 +1,8 @@ +R 5 +U 8 +L 8 +D 3 +R 17 +D 10 +L 25 +U 20