From ea8464aad67b650337b5036cf75cbf4e4ebf466d Mon Sep 17 00:00:00 2001 From: "Dylan \"smellyfis\" Thies" Date: Mon, 19 Dec 2022 08:14:54 -0500 Subject: [PATCH] day 9 part 1 --- day9/Cargo.lock | 25 + day9/Cargo.toml | 9 + day9/input | 2000 ++++++++++++++++++++++++++++++++++++++++++++++ day9/src/main.rs | 63 ++ 4 files changed, 2097 insertions(+) create mode 100644 day9/Cargo.lock create mode 100644 day9/Cargo.toml create mode 100644 day9/input create mode 100644 day9/src/main.rs diff --git a/day9/Cargo.lock b/day9/Cargo.lock new file mode 100644 index 0000000..9a63508 --- /dev/null +++ b/day9/Cargo.lock @@ -0,0 +1,25 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day9" +version = "0.1.0" +dependencies = [ + "itertools", +] + +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] diff --git a/day9/Cargo.toml b/day9/Cargo.toml new file mode 100644 index 0000000..48fb381 --- /dev/null +++ b/day9/Cargo.toml @@ -0,0 +1,9 @@ +[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] +itertools = "0.10.5" diff --git a/day9/input b/day9/input new file mode 100644 index 0000000..67c0d6c --- /dev/null +++ b/day9/input @@ -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..23f23ea --- /dev/null +++ b/day9/src/main.rs @@ -0,0 +1,63 @@ +use itertools::Itertools; +use std::fs::File; +use std::io::{prelude::*, BufReader}; + +fn main() -> std::io::Result<()> { + //Read in file + let file = File::open("input")?; + let reader = BufReader::new(file); + + let mut tail_pos: Vec<(i32, i32)> = vec![(0, 0)]; + let mut head_pos: Vec<(i32, i32)> = vec![(0, 0)]; + + //read in input + reader.lines().for_each(|line| { + let line = line.unwrap(); + let (direction, steps) = match line.split(' ').collect::>()[..] { + [dir, step] => (dir, step.parse::().unwrap()), + _ => panic!("failed parseing line {}", line), + }; + for _ in 0..steps { + let (mut cur_head_x, mut cur_head_y) = head_pos.last().unwrap(); + let (mut cur_tail_x, mut cur_tail_y) = tail_pos.last().unwrap(); + match direction { + "L" => cur_head_x -= 1, + "R" => cur_head_x += 1, + "U" => cur_head_y += 1, + "D" => cur_head_y -= 1, + x => panic!("invalid movement {}", x), + }; + let x_offset = cur_head_x - cur_tail_x; + let y_offset = cur_head_y - cur_tail_y; + if x_offset > 1 { + if y_offset != 0 { + cur_tail_y = cur_head_y; + } + cur_tail_x += 1 + } else if x_offset < -1 { + if y_offset != 0 { + cur_tail_y = cur_head_y; + } + cur_tail_x -= 1 + } else if y_offset > 1 { + if x_offset != 0 { + cur_tail_x = cur_head_x; + } + cur_tail_y += 1 + } else if y_offset < -1 { + if x_offset != 0 { + cur_tail_x = cur_head_x; + } + cur_tail_y -= 1 + } + let new_tail = (cur_tail_x, cur_tail_y); + if *tail_pos.last().unwrap() != new_tail { + tail_pos.push(new_tail); + } + head_pos.push((cur_head_x, cur_head_y)); + } + }); + let part1 = tail_pos.iter().unique().count(); + println!("Part 1: {}", part1); + Ok(()) +}