diff options
Diffstat (limited to 'aoc22')
-rw-r--r-- | aoc22/Cargo.lock | 7 | ||||
-rw-r--r-- | aoc22/Cargo.toml | 1 | ||||
-rw-r--r-- | aoc22/day9/Cargo.toml | 7 | ||||
-rw-r--r-- | aoc22/day9/input | 2000 | ||||
-rw-r--r-- | aoc22/day9/src/main.rs | 149 |
5 files changed, 2164 insertions, 0 deletions
diff --git a/aoc22/Cargo.lock b/aoc22/Cargo.lock index af6e3ba..1cb6746 100644 --- a/aoc22/Cargo.lock +++ b/aoc22/Cargo.lock @@ -31,5 +31,12 @@ dependencies = [ ] [[package]] +name = "day9" +version = "0.1.0" +dependencies = [ + "lib", +] + +[[package]] name = "lib" version = "0.1.0" diff --git a/aoc22/Cargo.toml b/aoc22/Cargo.toml index e2032ea..3a94d1d 100644 --- a/aoc22/Cargo.toml +++ b/aoc22/Cargo.toml @@ -6,4 +6,5 @@ members = [ "day2", "day7", "day8", + "day9", ] diff --git a/aoc22/day9/Cargo.toml b/aoc22/day9/Cargo.toml new file mode 100644 index 0000000..e6da5ab --- /dev/null +++ b/aoc22/day9/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "day9" +version = "0.1.0" +edition = "2021" + +[dependencies] +lib = { path = "../lib" } diff --git a/aoc22/day9/input b/aoc22/day9/input new file mode 100644 index 0000000..5160ab8 --- /dev/null +++ b/aoc22/day9/input @@ -0,0 +1,2000 @@ +L 2 +U 2 +R 2 +L 1 +R 1 +U 1 +D 1 +L 1 +R 1 +D 2 +R 1 +U 2 +D 2 +L 2 +R 2 +U 1 +L 1 +D 2 +U 2 +L 1 +U 2 +L 2 +U 2 +L 2 +D 1 +U 2 +D 1 +R 1 +U 2 +R 2 +D 1 +R 1 +U 1 +R 2 +L 1 +R 1 +L 1 +D 1 +L 1 +D 2 +U 1 +L 2 +R 2 +U 1 +R 1 +L 1 +U 2 +D 1 +L 2 +D 2 +R 1 +L 2 +U 1 +R 1 +L 1 +R 2 +D 2 +R 2 +L 1 +R 1 +U 1 +L 2 +D 2 +L 2 +R 2 +U 2 +D 2 +L 1 +U 2 +D 2 +L 2 +D 1 +U 2 +D 2 +U 2 +R 2 +U 2 +D 2 +L 1 +R 2 +L 1 +U 1 +D 1 +R 1 +L 1 +U 1 +R 2 +L 1 +D 2 +R 1 +D 1 +R 2 +D 2 +L 2 +U 1 +R 1 +D 2 +L 1 +U 1 +D 1 +L 1 +D 2 +R 1 +D 1 +R 2 +D 2 +R 1 +L 1 +R 1 +D 1 +R 1 +U 1 +L 3 +D 3 +R 2 +U 3 +R 1 +D 3 +U 1 +R 3 +L 2 +U 3 +L 3 +D 2 +R 2 +L 3 +D 3 +U 1 +L 3 +D 1 +U 3 +L 3 +D 1 +R 2 +D 1 +R 1 +U 2 +R 2 +U 2 +R 1 +L 2 +R 2 +L 2 +D 1 +U 1 +R 3 +L 3 +D 1 +U 3 +L 1 +U 2 +R 1 +L 1 +R 2 +U 1 +R 3 +D 1 +L 3 +D 3 +L 3 +R 3 +D 1 +R 1 +L 2 +D 2 +R 3 +L 1 +D 1 +U 1 +D 1 +U 2 +R 3 +U 2 +D 3 +R 3 +D 2 +L 1 +R 1 +D 2 +R 1 +L 2 +D 2 +U 2 +L 1 +R 2 +U 1 +D 2 +R 2 +D 2 +L 2 +R 3 +D 1 +U 2 +L 2 +R 3 +D 3 +L 3 +U 3 +L 2 +D 1 +R 1 +L 3 +D 2 +R 2 +D 2 +L 1 +U 1 +R 2 +U 3 +D 1 +L 1 +R 1 +L 2 +U 2 +L 3 +U 2 +D 2 +U 1 +L 1 +R 1 +U 3 +D 3 +R 4 +L 4 +U 1 +D 2 +L 1 +D 4 +L 3 +D 1 +R 4 +U 2 +D 2 +L 1 +D 3 +L 3 +R 2 +L 2 +R 1 +L 3 +R 1 +L 2 +U 1 +L 2 +U 4 +D 4 +U 4 +L 4 +R 4 +D 3 +L 1 +R 3 +D 4 +R 1 +L 4 +R 4 +U 1 +R 3 +U 2 +D 4 +L 1 +U 3 +L 2 +R 2 +D 1 +L 1 +U 3 +L 2 +U 1 +D 1 +L 4 +D 4 +U 2 +D 4 +R 3 +U 1 +R 1 +D 3 +L 1 +D 2 +R 2 +D 3 +L 3 +U 4 +L 4 +R 1 +D 2 +L 3 +U 3 +D 1 +R 4 +L 4 +U 4 +R 3 +L 3 +D 3 +L 1 +D 1 +U 1 +L 3 +R 4 +L 3 +R 4 +L 1 +D 1 +R 4 +U 3 +D 4 +U 1 +D 3 +R 4 +U 2 +D 1 +L 3 +D 3 +L 1 +R 3 +U 2 +L 4 +D 4 +L 2 +D 4 +U 1 +L 3 +R 2 +D 2 +U 2 +D 2 +R 1 +U 3 +R 3 +U 4 +L 3 +R 2 +D 4 +U 3 +D 4 +R 5 +L 1 +D 3 +L 5 +R 3 +D 5 +U 3 +R 1 +U 3 +D 4 +R 1 +D 5 +R 3 +L 4 +D 2 +R 2 +U 2 +L 4 +U 3 +D 1 +L 2 +D 3 +U 2 +D 2 +R 4 +L 5 +U 1 +D 5 +R 2 +D 5 +R 3 +L 3 +R 4 +D 1 +L 5 +D 2 +U 2 +D 4 +U 4 +R 4 +L 2 +D 3 +L 3 +R 3 +L 4 +D 2 +U 1 +R 3 +L 3 +R 2 +L 5 +R 4 +D 2 +L 3 +R 2 +U 2 +R 4 +L 4 +R 1 +U 5 +D 5 +U 1 +R 4 +L 5 +R 5 +L 3 +R 1 +U 2 +L 4 +U 4 +L 5 +D 1 +U 5 +D 5 +U 2 +R 4 +U 3 +D 5 +R 1 +D 1 +L 5 +R 4 +L 4 +R 3 +D 3 +U 2 +R 5 +L 5 +U 5 +L 3 +D 2 +R 3 +L 4 +R 1 +L 3 +U 5 +L 2 +D 5 +R 5 +L 3 +D 3 +U 3 +L 5 +U 3 +R 1 +U 3 +L 5 +D 1 +U 4 +R 6 +U 1 +D 3 +U 1 +L 5 +R 1 +U 3 +D 3 +R 3 +U 5 +L 1 +R 2 +L 3 +U 5 +L 2 +R 6 +D 3 +U 3 +R 2 +U 5 +L 2 +U 5 +D 5 +R 1 +D 1 +U 6 +L 2 +D 2 +L 4 +R 5 +U 1 +D 3 +R 4 +D 1 +U 6 +R 4 +D 4 +U 6 +R 5 +L 5 +D 6 +R 6 +U 2 +L 2 +D 3 +R 6 +U 5 +L 5 +R 6 +L 3 +D 5 +U 2 +L 3 +U 4 +D 2 +U 5 +R 6 +D 3 +U 4 +L 2 +U 5 +L 6 +R 6 +D 5 +R 4 +D 3 +L 1 +D 4 +R 6 +L 4 +R 3 +U 5 +R 6 +U 1 +D 3 +L 4 +D 2 +U 6 +L 4 +D 6 +L 4 +D 5 +L 6 +D 1 +U 5 +R 5 +L 5 +R 4 +D 2 +R 2 +U 3 +D 2 +R 2 +D 2 +R 6 +U 6 +L 4 +U 6 +R 5 +D 5 +U 2 +R 4 +L 4 +D 2 +R 1 +D 4 +U 5 +R 4 +D 1 +U 2 +L 1 +R 1 +U 4 +R 3 +L 6 +D 5 +L 6 +R 1 +D 3 +U 4 +D 3 +L 2 +D 7 +U 2 +D 7 +U 4 +L 3 +R 6 +D 1 +L 6 +R 3 +L 6 +U 7 +R 2 +D 3 +L 3 +U 1 +L 4 +U 1 +L 1 +D 3 +R 1 +D 5 +L 3 +R 1 +D 4 +U 1 +R 4 +D 7 +U 7 +D 1 +R 7 +D 3 +R 2 +D 1 +U 6 +R 4 +U 7 +D 1 +U 2 +L 5 +R 2 +U 5 +L 1 +U 5 +D 6 +R 5 +D 4 +R 6 +U 3 +L 2 +D 6 +R 1 +D 1 +U 3 +L 2 +U 2 +L 5 +D 5 +L 7 +D 6 +R 3 +D 6 +U 6 +L 7 +U 4 +L 7 +D 7 +L 7 +U 5 +R 3 +L 5 +D 4 +R 3 +D 4 +U 7 +L 7 +D 6 +U 1 +R 5 +L 4 +R 5 +D 7 +R 4 +L 5 +U 5 +R 3 +U 6 +D 4 +U 7 +R 7 +D 1 +R 6 +U 6 +D 3 +L 1 +R 1 +U 5 +R 2 +L 6 +U 2 +R 8 +U 3 +R 3 +L 8 +R 4 +U 4 +L 4 +R 2 +L 2 +U 1 +D 2 +U 6 +L 1 +R 6 +U 2 +R 1 +D 2 +R 8 +D 6 +R 3 +L 1 +D 6 +R 3 +U 3 +L 3 +R 1 +D 4 +R 3 +D 8 +U 4 +L 1 +D 7 +L 2 +R 6 +U 2 +L 6 +U 7 +D 4 +R 2 +L 5 +R 3 +L 1 +U 2 +L 8 +R 8 +U 2 +R 8 +L 1 +U 8 +L 1 +D 4 +R 5 +U 1 +R 5 +L 8 +D 8 +R 4 +L 7 +U 3 +D 8 +L 7 +R 7 +L 8 +D 2 +U 2 +D 8 +L 1 +R 3 +L 7 +D 4 +R 5 +L 4 +R 7 +U 5 +L 7 +U 4 +R 4 +U 5 +R 3 +D 7 +U 7 +R 8 +L 7 +U 4 +D 2 +R 1 +D 8 +U 4 +D 7 +R 1 +D 4 +L 6 +U 1 +L 8 +D 1 +R 7 +L 2 +U 7 +R 7 +L 4 +U 6 +L 5 +D 3 +R 3 +L 1 +R 2 +U 3 +D 3 +R 5 +U 6 +D 8 +L 7 +R 2 +L 6 +R 4 +L 4 +R 5 +L 8 +R 8 +U 7 +L 6 +R 9 +D 2 +L 2 +D 9 +U 3 +D 3 +L 1 +U 9 +D 7 +U 3 +D 8 +R 3 +U 3 +L 7 +D 9 +L 8 +U 8 +L 6 +R 7 +D 1 +U 1 +R 5 +L 3 +R 7 +U 8 +R 8 +D 5 +L 4 +R 5 +D 6 +L 7 +U 7 +R 9 +U 4 +R 5 +L 9 +R 7 +D 7 +U 3 +D 7 +L 3 +U 5 +D 2 +U 8 +D 1 +U 7 +R 7 +D 2 +U 8 +D 4 +R 7 +L 3 +U 3 +D 2 +R 9 +U 4 +D 4 +U 1 +L 4 +U 2 +D 7 +U 1 +L 4 +R 5 +L 3 +U 8 +R 4 +L 6 +U 6 +R 5 +U 3 +L 6 +D 7 +U 5 +R 2 +D 3 +L 6 +U 5 +L 7 +U 4 +R 6 +D 2 +L 1 +R 7 +L 1 +D 9 +L 6 +D 1 +R 1 +U 7 +R 4 +L 9 +D 9 +U 4 +D 8 +U 1 +L 8 +D 2 +U 9 +L 7 +R 10 +U 10 +L 10 +D 5 +R 9 +D 8 +L 1 +R 3 +L 7 +U 2 +L 1 +D 4 +R 5 +U 5 +D 1 +R 3 +D 3 +R 7 +U 2 +D 6 +U 6 +L 1 +D 7 +R 5 +L 9 +R 1 +U 7 +D 10 +U 3 +D 5 +U 8 +L 5 +R 8 +L 2 +R 9 +L 10 +R 9 +D 6 +U 1 +D 2 +L 7 +R 5 +L 6 +R 2 +D 9 +U 4 +L 8 +D 6 +L 10 +D 3 +U 8 +D 9 +U 5 +L 1 +U 9 +R 2 +D 5 +L 7 +U 4 +D 10 +U 6 +D 7 +U 6 +L 3 +D 2 +R 6 +L 10 +R 7 +U 4 +L 6 +D 1 +R 3 +D 8 +U 5 +L 7 +U 4 +L 6 +U 5 +L 3 +D 4 +U 4 +L 4 +D 6 +U 7 +L 10 +D 5 +L 7 +D 3 +U 3 +L 1 +D 3 +U 8 +D 2 +R 5 +U 7 +D 3 +L 5 +D 2 +L 2 +R 7 +L 10 +D 2 +U 2 +R 2 +D 9 +R 4 +L 4 +R 9 +D 8 +L 1 +U 8 +L 8 +R 4 +L 9 +U 11 +L 3 +R 4 +U 6 +L 11 +U 8 +R 4 +D 9 +R 5 +D 9 +U 11 +D 4 +R 1 +U 6 +L 8 +R 10 +D 11 +U 6 +D 4 +U 2 +D 7 +L 3 +R 5 +L 7 +R 5 +L 7 +D 2 +L 7 +U 9 +D 3 +L 6 +R 2 +U 6 +L 8 +R 10 +U 3 +R 7 +L 8 +U 1 +D 4 +L 1 +U 1 +D 6 +L 5 +U 4 +R 3 +U 7 +R 5 +U 11 +L 11 +R 11 +L 2 +R 3 +U 2 +R 10 +L 4 +U 8 +L 6 +R 8 +L 11 +U 6 +D 2 +L 7 +D 10 +R 3 +L 6 +R 8 +D 4 +U 7 +D 4 +R 1 +D 6 +R 11 +D 11 +R 9 +U 10 +R 7 +D 8 +U 4 +L 3 +R 9 +U 2 +D 3 +L 7 +R 10 +L 9 +D 11 +U 5 +L 10 +D 2 +R 10 +D 7 +U 4 +R 8 +D 9 +L 3 +R 4 +L 11 +D 4 +U 5 +R 7 +U 3 +R 9 +D 11 +R 1 +D 10 +R 2 +U 8 +L 7 +R 9 +U 9 +D 11 +R 6 +L 2 +D 4 +R 4 +D 6 +L 12 +D 11 +R 5 +U 1 +R 9 +L 9 +D 7 +L 1 +R 6 +L 4 +U 4 +R 10 +D 12 +R 1 +U 8 +D 8 +L 1 +U 12 +D 2 +R 7 +U 12 +L 10 +D 12 +R 6 +U 10 +D 8 +L 8 +U 1 +R 4 +L 7 +D 1 +L 7 +R 7 +U 4 +L 12 +U 6 +D 1 +U 8 +R 12 +L 11 +D 12 +R 3 +D 11 +U 2 +R 9 +D 11 +L 9 +R 1 +U 7 +D 9 +U 8 +L 8 +D 11 +R 9 +U 5 +D 6 +U 8 +D 6 +U 8 +D 11 +L 3 +D 4 +R 1 +U 6 +L 10 +U 11 +D 11 +U 5 +D 1 +R 3 +D 2 +L 4 +R 4 +D 10 +L 3 +D 12 +U 5 +R 1 +U 9 +D 1 +U 2 +R 7 +L 7 +U 8 +L 9 +D 4 +U 6 +R 9 +U 4 +L 11 +U 5 +L 6 +D 4 +U 8 +L 11 +U 2 +L 4 +U 1 +D 9 +R 2 +L 5 +D 8 +R 11 +U 7 +L 9 +D 2 +U 12 +R 13 +D 1 +L 10 +D 5 +R 9 +U 2 +L 10 +U 12 +R 4 +U 11 +D 4 +L 3 +U 12 +D 9 +R 9 +L 2 +D 5 +L 2 +U 6 +D 6 +L 1 +U 8 +R 9 +D 1 +L 11 +R 4 +D 4 +U 7 +R 9 +U 1 +L 5 +D 6 +U 2 +D 8 +U 6 +L 2 +D 11 +L 2 +D 11 +U 12 +D 6 +U 12 +R 13 +D 13 +L 6 +U 7 +L 1 +D 12 +U 9 +L 2 +U 13 +R 3 +U 8 +L 9 +D 13 +R 4 +U 4 +D 2 +L 7 +R 1 +D 1 +L 4 +R 12 +U 2 +D 12 +L 11 +U 10 +L 5 +U 9 +D 11 +R 7 +L 4 +D 10 +L 10 +U 5 +R 8 +L 5 +R 12 +L 9 +D 3 +U 11 +L 4 +R 8 +U 8 +R 9 +D 11 +U 10 +L 11 +U 4 +D 6 +R 3 +U 3 +R 13 +L 5 +D 9 +U 5 +R 1 +L 4 +D 9 +U 10 +R 8 +D 3 +L 7 +R 5 +U 2 +R 11 +U 12 +D 12 +R 3 +L 5 +D 13 +U 6 +R 5 +U 11 +D 12 +L 8 +U 14 +L 2 +R 4 +U 7 +R 9 +L 10 +U 4 +L 4 +R 12 +D 13 +R 6 +L 12 +D 6 +R 6 +D 9 +L 1 +U 8 +L 11 +D 2 +L 14 +R 10 +D 1 +U 8 +D 13 +L 3 +R 10 +U 4 +D 12 +R 12 +U 4 +D 2 +L 4 +U 6 +D 1 +U 7 +R 11 +U 7 +D 10 +R 6 +U 4 +D 2 +U 1 +L 2 +R 9 +D 3 +R 8 +D 12 +L 11 +U 2 +L 3 +U 5 +D 6 +L 14 +R 9 +L 14 +R 12 +U 12 +R 8 +L 13 +U 6 +L 10 +D 5 +U 14 +D 11 +L 11 +R 8 +L 6 +D 13 +R 5 +D 6 +L 7 +R 6 +D 8 +L 7 +D 9 +L 9 +U 8 +D 11 +L 7 +U 2 +D 9 +L 14 +R 3 +L 1 +D 9 +L 9 +R 1 +L 9 +U 6 +L 13 +D 7 +L 8 +D 2 +L 11 +U 8 +L 9 +U 7 +D 14 +L 11 +R 10 +D 1 +R 3 +D 9 +U 13 +D 3 +U 4 +R 2 +L 6 +U 11 +R 3 +L 9 +D 15 +R 12 +D 4 +L 14 +U 11 +L 2 +R 1 +L 10 +U 5 +R 11 +U 13 +R 13 +U 14 +D 2 +U 5 +D 14 +R 9 +D 8 +R 13 +L 1 +U 2 +R 7 +U 5 +L 8 +U 9 +R 3 +U 8 +R 9 +L 7 +R 15 +L 3 +D 12 +U 14 +R 12 +L 1 +R 9 +U 5 +R 4 +U 1 +D 4 +R 12 +L 2 +D 7 +U 2 +D 14 +U 2 +R 5 +D 12 +U 2 +D 5 +R 11 +L 5 +R 8 +D 10 +R 11 +L 12 +D 11 +L 6 +R 14 +D 2 +L 8 +R 6 +L 12 +R 13 +L 7 +R 4 +U 4 +D 15 +R 14 +D 5 +L 12 +U 7 +L 5 +D 5 +L 11 +U 10 +D 10 +L 13 +D 8 +R 10 +U 1 +L 6 +U 3 +L 12 +D 15 +U 12 +L 13 +U 7 +R 1 +L 13 +D 13 +U 2 +D 15 +U 2 +D 4 +L 7 +U 11 +R 9 +D 11 +L 9 +D 10 +U 9 +D 14 +R 8 +D 13 +U 16 +D 14 +R 13 +D 3 +L 9 +R 5 +D 2 +R 4 +D 14 +U 7 +D 5 +R 8 +L 14 +R 7 +U 4 +L 4 +R 15 +L 1 +U 12 +R 8 +L 4 +R 14 +L 13 +D 11 +U 3 +R 11 +D 11 +R 2 +D 10 +R 4 +D 8 +L 10 +R 3 +L 4 +R 16 +U 8 +D 9 +R 8 +D 15 +U 16 +R 15 +D 7 +R 10 +L 7 +R 2 +U 3 +R 16 +D 13 +L 10 +U 13 +D 8 +U 15 +D 3 +U 3 +L 16 +U 3 +R 11 +D 6 +R 12 +U 11 +R 2 +D 1 +U 3 +L 7 +U 9 +D 12 +R 13 +L 13 +U 5 +D 16 +L 14 +D 13 +U 15 +D 3 +U 15 +R 11 +D 16 +R 7 +D 2 +L 14 +R 8 +L 10 +R 3 +L 2 +U 2 +L 9 +D 5 +L 2 +D 12 +R 3 +U 7 +R 4 +U 2 +L 9 +R 13 +L 7 +U 16 +R 4 +D 1 +U 7 +R 3 +U 9 +L 6 +U 6 +D 7 +U 8 +D 16 +L 14 +U 16 +D 8 +U 6 +L 8 +D 2 +R 6 +U 14 +L 16 +R 7 +L 15 +U 15 +D 12 +R 2 +U 15 +R 8 +D 9 +R 6 +U 9 +D 1 +R 14 +U 7 +D 12 +R 7 +U 14 +R 16 +D 5 +R 11 +L 8 +U 4 +L 7 +D 8 +R 10 +D 9 +U 4 +L 5 +U 6 +D 17 +L 1 +U 16 +L 16 +R 14 +D 14 +U 3 +L 10 +D 3 +R 10 +U 2 +D 17 +R 12 +L 14 +D 10 +L 16 +U 14 +R 3 +L 17 +D 5 +U 14 +R 15 +D 5 +L 2 +R 6 +U 2 +L 5 +R 2 +L 10 +R 14 +L 16 +U 7 +L 5 +R 12 +L 13 +U 5 +L 13 +R 10 +L 12 +U 5 +R 15 +D 1 +U 12 +R 8 +D 12 +R 14 +U 7 +R 3 +L 15 +U 9 +D 10 +U 3 +R 17 +L 11 +D 4 +L 17 +R 5 +L 10 +R 3 +U 4 +L 3 +D 5 +R 1 +D 11 +L 9 +R 1 +L 9 +D 11 +L 1 +D 2 +U 6 +L 15 +U 1 +L 9 +D 11 +U 18 +D 16 +L 1 +R 1 +L 12 +U 3 +L 7 +R 14 +D 11 +R 9 +D 10 +L 7 +D 2 +L 10 +D 18 +R 13 +D 10 +R 16 +D 6 +U 8 +D 12 +R 6 +L 7 +D 16 +L 16 +U 11 +R 13 +D 12 +R 3 +D 2 +U 8 +L 9 +R 12 +L 11 +D 2 +L 17 +D 10 +U 12 +R 7 +D 15 +U 5 +L 10 +R 1 +U 13 +L 12 +R 7 +D 17 +U 5 +D 13 +U 13 +R 4 +U 14 +L 16 +R 18 +U 17 +L 16 +U 13 +R 5 +L 6 +U 6 +D 10 +R 6 +U 10 +L 8 +D 8 +L 3 +R 4 +U 17 +R 11 +D 14 +U 5 +L 17 +R 3 +U 6 +D 3 +R 11 +U 15 +D 4 +R 2 +D 9 +U 13 +L 12 +R 14 +L 17 +D 4 +U 14 +L 4 +U 11 +R 11 +L 6 +R 15 +L 18 +D 8 +U 2 +R 17 +D 10 +U 15 +D 18 +L 1 +D 6 +R 5 +D 14 +L 10 +D 16 +L 7 +D 15 +L 15 +D 15 +L 6 +U 4 +D 15 +U 17 +L 13 +R 10 +U 15 +D 16 +U 9 +R 9 +D 16 +R 12 +U 16 +D 11 +L 9 +R 5 +L 14 +R 1 +L 3 +D 4 +R 4 +D 5 +U 13 +D 14 +L 9 +U 4 +R 19 +D 3 +R 13 +U 17 +R 2 +D 13 +R 14 +L 18 +D 12 +L 5 +D 11 +U 19 +D 14 +U 2 +R 1 +U 18 +D 1 +L 9 +R 17 +U 10 +L 9 +D 15 +L 15 +U 15 +R 19 +D 17 +R 19 +D 9 +L 11 +U 16 +D 10 +U 6 +D 17 +R 3 +D 19 +R 13 +L 16 +R 2 +D 9 +R 3 +L 7 +R 18 +L 6 +U 5 +D 15 +L 5 +D 19 +R 6 +D 14 +U 16 +D 9 +L 18 +U 19 +L 10 +D 13 +R 18 +U 8 +L 5 +R 13 +U 15 +R 6 +D 12 +R 10 +D 5 +U 17 +R 9 +U 2 +D 14 +R 18 +D 3 +L 7 +D 5 +R 15 +U 2 +L 6 +R 5 +D 17 +L 19 +R 14 +U 13 +D 16 +U 1 +D 18 +L 14 +U 4 +R 8 +L 16 +D 15 +U 8 diff --git a/aoc22/day9/src/main.rs b/aoc22/day9/src/main.rs new file mode 100644 index 0000000..f1043f7 --- /dev/null +++ b/aoc22/day9/src/main.rs @@ -0,0 +1,149 @@ +use std::collections::HashSet; + +fn main() { + let input = lib::read_input(9); + + part1(&input); + part2(&input); +} + +type P = [i32; 2]; + +fn part1(input: &str) { + let mut visited = HashSet::new(); + + let mut head = [0, 0]; + let mut tail = [0, 0]; + visited.insert(tail); + + for line in input.lines() { + let (dir, dist) = line.split_at(1); + let dist = dist[1..].parse::<i32>().unwrap(); + + let d = match dir { + "L" => [-1, 0], + "U" => [0, -1], + "D" => [0, 1], + "R" => [1, 0], + _ => panic!("invalid direction"), + }; + + for _ in 0..dist { + head[0] += d[0]; + head[1] += d[1]; + + if distance(tail, head) <= 1 { + continue; + } + + let m = len1(tail, head); + + tail[0] += m[0]; + tail[1] += m[1]; + + visited.insert(tail); + } + } + println!("{}", visited.len()); +} + +fn part2(input: &str) { + let mut visited = HashSet::new(); + + let mut rope = [[0, 0]; 10]; + visited.insert(rope[9]); + + for line in input.lines() { + let (dir, dist) = line.split_at(1); + let dist = dist[1..].parse::<i32>().unwrap(); + + let d = match dir { + "L" => [-1, 0], + "U" => [0, -1], + "D" => [0, 1], + "R" => [1, 0], + _ => panic!("invalid direction"), + }; + + for _ in 0..dist { + rope[0][0] += d[0]; + rope[0][1] += d[1]; + + for i in 1..rope.len() { + if distance(rope[i], rope[i - 1]) <= 1 { + break; + } + + let m = len1(rope[i], rope[i - 1]); + + rope[i][0] += m[0]; + rope[i][1] += m[1]; + + if i == rope.len() - 1 { + visited.insert(rope[i]); + } + } + } + + // print(&visited, &rope); + } + println!("{}", visited.len()); +} + +fn distance(a: P, b: P) -> i32 { + (a[0] - b[0]).abs().max((a[1] - b[1]).abs()) +} + +fn len1(from: P, to: P) -> P { + [ + (to[0] - from[0]).clamp(-1, 1), + (to[1] - from[1]).clamp(-1, 1), + ] +} + +fn print(visited: &HashSet<P>, rope: &[P]) { + let x_min = *visited + .iter() + .map(|[x, _]| x) + .min() + .unwrap() + .min(rope.iter().map(|[x, _]| x).min().unwrap()); + let x_max = *visited + .iter() + .map(|[x, _]| x) + .max() + .unwrap() + .max(rope.iter().map(|[x, _]| x).max().unwrap()); + let y_min = *visited + .iter() + .map(|[_, y]| y) + .min() + .unwrap() + .min(rope.iter().map(|[_, y]| y).min().unwrap()); + let y_max = *visited + .iter() + .map(|[_, y]| y) + .max() + .unwrap() + .max(rope.iter().map(|[_, y]| y).max().unwrap()); + + for y in y_min..=y_max { + for x in x_min..=x_max { + if x == 0 && y == 0 { + eprint!("\x1b[31m"); + } + if [x, y] == rope[0] { + eprint!("H"); + } else if let Some((i, _)) = rope.iter().enumerate().find(|(i, &b)| b == [x, y]) { + eprint!("{}", i); + } else if visited.contains(&[x, y]) { + eprint!("#"); + } else { + eprint!("."); + } + eprint!("\x1b[0m"); + } + eprintln!(); + } + eprintln!(); +} |