diff --git a/Cargo.toml b/Cargo.toml index 7441437..503efb3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,4 +9,5 @@ members = [ "day6", "day7", "day8", + "day9", ] \ No newline at end of file diff --git a/day9/Cargo.toml b/day9/Cargo.toml new file mode 100644 index 0000000..cd7ac00 --- /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] +nalgebra = "0.31.4" diff --git a/day9/input.txt b/day9/input.txt new file mode 100644 index 0000000..64edb2f --- /dev/null +++ b/day9/input.txt @@ -0,0 +1,2000 @@ +R 2 +D 2 +R 2 +U 1 +R 2 +L 2 +D 1 +L 1 +D 2 +R 2 +U 2 +D 1 +R 2 +D 2 +U 1 +R 1 +D 1 +L 1 +U 1 +R 1 +L 1 +R 2 +U 2 +D 2 +R 2 +L 2 +U 1 +L 2 +U 2 +L 2 +R 2 +U 2 +R 1 +U 2 +L 2 +D 1 +R 1 +U 2 +D 2 +R 2 +L 2 +U 1 +D 1 +L 2 +U 2 +L 2 +U 1 +D 2 +R 1 +D 1 +R 2 +U 1 +L 2 +D 1 +U 2 +R 2 +L 1 +D 2 +U 1 +D 1 +L 1 +U 1 +R 1 +D 1 +R 1 +U 1 +D 2 +L 1 +D 1 +R 2 +D 1 +U 2 +D 2 +U 2 +L 1 +U 2 +R 2 +L 2 +D 2 +R 1 +L 2 +U 2 +L 1 +U 1 +L 1 +R 2 +L 2 +R 1 +D 1 +U 1 +L 2 +R 1 +L 1 +U 1 +D 1 +U 1 +D 1 +R 1 +L 2 +R 2 +L 1 +U 1 +D 2 +U 2 +L 2 +R 2 +U 1 +R 2 +L 2 +R 2 +L 1 +U 3 +D 1 +L 1 +D 3 +U 1 +D 2 +L 1 +R 3 +D 2 +U 3 +R 1 +D 3 +R 2 +D 1 +U 3 +L 1 +R 2 +L 3 +D 3 +U 2 +L 2 +R 3 +U 3 +D 3 +L 3 +D 2 +L 3 +R 1 +L 1 +D 1 +U 3 +D 3 +U 2 +L 3 +R 3 +U 1 +D 2 +R 2 +L 2 +D 3 +R 3 +U 1 +R 1 +L 3 +U 2 +L 2 +U 1 +R 1 +D 1 +R 3 +U 2 +D 1 +L 1 +U 1 +R 2 +L 1 +R 3 +L 1 +U 3 +L 2 +D 2 +L 2 +D 3 +L 2 +R 1 +U 2 +L 3 +D 1 +L 3 +D 1 +U 2 +L 3 +R 2 +U 1 +L 3 +D 3 +R 3 +U 2 +R 2 +D 3 +R 3 +U 2 +R 2 +L 2 +U 3 +R 1 +L 2 +D 3 +U 1 +L 1 +U 1 +L 2 +R 3 +L 3 +D 3 +R 3 +U 3 +L 1 +R 2 +D 3 +U 1 +R 2 +U 1 +D 1 +L 1 +D 2 +L 2 +D 3 +U 2 +D 1 +U 3 +D 3 +U 3 +R 3 +L 3 +U 4 +L 3 +D 1 +R 4 +U 3 +D 2 +R 1 +D 4 +L 3 +U 1 +L 1 +R 2 +D 1 +R 3 +D 3 +L 3 +D 4 +L 3 +R 4 +U 3 +R 3 +D 1 +R 3 +D 3 +R 3 +D 4 +U 4 +R 2 +D 3 +R 3 +D 2 +U 1 +R 2 +D 2 +U 2 +D 3 +L 2 +R 4 +D 4 +U 4 +R 3 +U 4 +R 1 +U 2 +R 4 +D 2 +L 4 +R 4 +U 3 +L 2 +U 2 +L 3 +R 3 +L 1 +U 4 +L 3 +U 3 +L 3 +U 1 +R 2 +U 3 +R 2 +L 3 +U 1 +D 3 +R 4 +D 1 +R 2 +L 1 +D 1 +U 2 +D 3 +R 4 +U 1 +L 3 +R 4 +U 4 +L 4 +R 2 +D 1 +U 4 +R 1 +D 3 +L 3 +D 1 +R 3 +D 2 +U 2 +L 1 +U 2 +D 3 +L 1 +U 3 +D 3 +L 3 +U 2 +L 3 +U 2 +R 1 +D 1 +R 1 +L 1 +D 2 +R 3 +D 2 +L 2 +R 3 +D 5 +R 5 +U 4 +D 5 +U 5 +D 4 +R 4 +D 2 +R 5 +L 4 +R 2 +L 2 +R 5 +U 5 +R 1 +D 2 +R 1 +L 3 +D 5 +U 3 +D 4 +R 3 +U 4 +D 1 +U 4 +L 5 +R 1 +U 4 +L 5 +U 3 +D 4 +L 2 +D 4 +U 4 +L 2 +D 1 +R 3 +D 1 +R 2 +D 4 +R 5 +L 1 +U 4 +L 4 +U 3 +L 1 +U 1 +R 4 +U 3 +L 1 +R 3 +D 5 +U 2 +R 4 +D 3 +L 2 +D 4 +R 5 +D 2 +U 3 +R 4 +D 4 +L 2 +U 4 +R 5 +L 1 +U 5 +D 1 +R 3 +L 4 +D 1 +U 3 +D 5 +R 2 +D 2 +L 5 +U 2 +D 3 +L 5 +D 5 +L 1 +R 5 +D 2 +U 3 +R 2 +L 2 +U 1 +L 5 +R 1 +L 4 +D 5 +R 5 +D 2 +U 5 +L 5 +D 1 +L 1 +D 3 +R 1 +D 2 +L 2 +R 4 +U 5 +L 2 +R 1 +U 3 +D 1 +U 1 +D 5 +R 2 +D 2 +R 3 +D 6 +U 1 +R 6 +D 4 +U 1 +R 5 +L 6 +R 2 +L 6 +U 6 +R 5 +D 2 +U 1 +D 2 +L 2 +D 5 +R 3 +U 4 +D 2 +L 1 +U 1 +D 3 +U 1 +D 1 +R 5 +U 1 +R 1 +D 3 +U 5 +L 6 +R 3 +L 6 +U 4 +D 2 +R 1 +L 6 +R 2 +D 3 +U 2 +R 2 +L 1 +D 1 +U 1 +R 4 +U 1 +R 2 +U 2 +L 2 +U 2 +D 5 +L 4 +U 6 +L 3 +D 6 +U 5 +L 6 +U 3 +R 5 +U 2 +R 4 +L 6 +D 1 +R 5 +D 4 +L 2 +R 2 +U 1 +D 2 +L 2 +U 4 +R 1 +D 2 +U 2 +R 6 +L 2 +D 5 +R 5 +L 3 +D 1 +U 1 +L 2 +D 4 +R 6 +L 5 +R 3 +U 1 +R 3 +L 1 +R 3 +U 1 +L 1 +U 4 +D 4 +U 3 +R 3 +U 1 +R 2 +D 1 +L 6 +U 2 +R 2 +D 1 +R 5 +L 2 +D 5 +L 3 +R 6 +D 2 +L 2 +D 3 +L 5 +D 7 +L 7 +D 4 +U 5 +R 7 +L 7 +D 3 +U 5 +R 6 +U 3 +L 6 +R 5 +L 4 +D 4 +R 4 +L 6 +D 6 +U 3 +D 3 +R 7 +U 1 +L 5 +U 3 +L 4 +U 3 +L 5 +D 1 +R 7 +U 3 +L 6 +D 1 +U 3 +L 2 +U 6 +L 6 +D 1 +U 1 +D 2 +L 5 +U 4 +R 5 +D 7 +U 3 +D 4 +L 1 +D 3 +R 7 +D 2 +U 4 +L 1 +D 3 +R 3 +D 6 +R 4 +U 3 +D 4 +R 6 +L 7 +U 5 +L 7 +R 3 +L 7 +D 5 +R 7 +D 4 +U 3 +R 6 +U 7 +D 2 +R 2 +L 2 +D 1 +R 3 +U 3 +D 5 +U 3 +L 3 +D 6 +L 6 +R 1 +L 5 +D 6 +U 4 +R 2 +L 2 +D 1 +U 7 +L 5 +D 3 +U 1 +L 1 +R 1 +L 6 +R 1 +D 6 +U 4 +L 7 +U 6 +R 6 +L 2 +D 5 +R 1 +D 6 +L 1 +R 3 +D 1 +U 5 +L 1 +D 3 +U 7 +D 5 +U 7 +D 7 +U 4 +R 3 +U 4 +L 8 +U 1 +R 1 +D 2 +U 5 +D 2 +L 5 +D 6 +U 4 +R 5 +L 5 +U 7 +L 3 +D 1 +L 2 +R 8 +L 1 +U 8 +L 2 +D 3 +R 6 +L 8 +D 2 +L 1 +U 4 +D 1 +R 2 +D 7 +U 5 +D 4 +U 4 +L 2 +D 6 +U 1 +D 5 +U 2 +D 2 +L 8 +D 6 +L 2 +U 1 +R 7 +D 1 +U 5 +L 6 +D 3 +L 2 +D 8 +R 6 +L 5 +U 2 +L 6 +U 4 +D 6 +L 7 +U 8 +L 5 +D 8 +R 8 +D 6 +L 3 +U 6 +L 1 +D 8 +R 7 +L 7 +R 2 +D 6 +R 1 +U 5 +L 5 +R 5 +L 3 +U 8 +L 1 +U 2 +D 5 +R 8 +U 5 +L 5 +D 2 +R 5 +U 1 +D 8 +R 3 +U 1 +R 6 +D 6 +R 5 +D 6 +L 8 +U 8 +L 8 +U 8 +L 8 +R 8 +U 8 +R 5 +L 1 +D 3 +U 1 +D 6 +U 1 +L 8 +U 3 +R 5 +L 2 +R 1 +D 2 +L 2 +U 4 +D 1 +R 1 +D 2 +R 2 +U 4 +R 3 +U 8 +D 9 +L 9 +D 5 +L 4 +D 7 +L 9 +U 4 +L 9 +D 7 +U 4 +L 3 +U 2 +R 5 +U 3 +L 1 +R 5 +L 8 +U 4 +R 6 +L 8 +U 1 +R 7 +D 6 +R 6 +U 7 +L 9 +R 7 +U 8 +R 5 +U 6 +L 4 +D 4 +L 3 +R 8 +U 6 +L 7 +R 4 +D 7 +R 3 +L 3 +D 2 +L 2 +U 5 +R 8 +L 7 +R 9 +D 8 +U 1 +L 1 +D 4 +U 6 +R 4 +L 2 +R 9 +L 9 +R 2 +D 3 +L 4 +U 6 +R 3 +D 5 +L 4 +R 8 +U 3 +R 5 +L 3 +D 7 +R 1 +D 2 +U 5 +L 7 +D 6 +R 1 +D 9 +L 9 +R 8 +U 8 +L 8 +D 7 +U 3 +L 2 +U 4 +D 8 +U 6 +R 3 +U 5 +R 7 +D 1 +R 8 +L 9 +U 7 +D 9 +L 2 +R 7 +U 1 +R 6 +D 3 +L 5 +U 10 +L 8 +R 3 +L 4 +D 9 +U 4 +L 5 +U 5 +D 10 +R 8 +U 6 +L 3 +U 4 +D 6 +L 8 +D 2 +R 8 +L 9 +U 3 +R 5 +D 1 +R 9 +D 6 +L 5 +R 10 +L 8 +R 9 +L 6 +U 8 +L 8 +U 5 +R 3 +U 6 +D 3 +L 10 +D 9 +U 5 +L 3 +U 6 +R 2 +D 7 +R 9 +L 5 +D 3 +U 3 +R 2 +D 10 +U 3 +R 2 +U 6 +L 10 +R 3 +U 3 +R 4 +L 8 +R 1 +L 6 +U 9 +L 7 +D 7 +R 6 +U 3 +R 1 +L 6 +D 5 +L 3 +U 2 +L 5 +R 9 +D 5 +R 4 +L 2 +U 5 +D 7 +L 10 +D 9 +U 7 +D 9 +R 5 +D 3 +L 1 +R 10 +L 4 +U 6 +R 7 +L 2 +R 6 +L 3 +R 3 +D 2 +L 1 +R 2 +L 7 +D 8 +R 5 +L 7 +D 8 +U 5 +L 8 +U 4 +R 8 +U 1 +D 1 +U 4 +D 6 +R 8 +U 10 +D 5 +U 5 +L 1 +D 2 +R 10 +U 10 +R 2 +L 9 +R 2 +D 3 +L 6 +R 10 +D 10 +R 9 +D 7 +U 3 +R 4 +D 9 +R 4 +D 9 +U 9 +L 8 +D 7 +R 7 +U 7 +R 7 +D 9 +L 7 +U 5 +L 10 +R 8 +L 11 +D 9 +L 5 +R 11 +L 6 +R 1 +U 2 +D 9 +L 3 +R 6 +L 6 +R 2 +L 6 +D 6 +R 2 +D 5 +L 8 +R 9 +U 6 +D 6 +L 1 +R 3 +D 2 +R 5 +D 6 +L 1 +D 10 +U 2 +R 4 +U 6 +R 11 +D 1 +R 2 +L 4 +D 9 +L 4 +U 8 +D 10 +U 4 +R 10 +D 1 +U 11 +R 2 +L 11 +D 7 +U 1 +L 7 +U 10 +D 10 +L 11 +R 1 +U 8 +R 1 +L 11 +R 3 +D 10 +R 10 +L 9 +U 7 +R 9 +L 6 +R 7 +U 5 +R 6 +U 4 +L 11 +U 7 +R 7 +L 4 +U 4 +R 2 +D 3 +R 2 +L 9 +D 4 +L 11 +R 6 +D 2 +L 9 +R 7 +D 6 +U 5 +L 8 +D 9 +R 11 +U 11 +R 6 +D 11 +L 9 +R 4 +L 6 +U 10 +R 11 +U 5 +L 6 +R 12 +D 3 +R 4 +U 12 +R 6 +D 8 +R 1 +D 2 +L 11 +R 6 +D 5 +U 10 +D 5 +R 8 +L 6 +D 5 +U 5 +R 8 +L 1 +D 10 +R 5 +U 6 +L 8 +R 4 +L 10 +D 6 +R 3 +D 9 +L 4 +R 9 +U 5 +R 2 +U 11 +R 9 +U 8 +R 7 +L 2 +D 7 +U 7 +D 8 +U 12 +R 6 +D 12 +R 5 +D 10 +U 2 +D 8 +U 6 +R 3 +U 5 +R 5 +L 11 +D 10 +R 3 +U 11 +D 8 +R 7 +L 3 +U 9 +R 4 +L 2 +D 4 +R 8 +D 9 +R 2 +D 3 +U 6 +L 5 +D 4 +L 2 +R 9 +U 5 +D 1 +U 9 +R 9 +U 11 +L 12 +R 10 +D 5 +U 1 +R 9 +U 4 +D 8 +R 1 +D 5 +R 7 +U 11 +L 6 +U 1 +R 12 +D 1 +R 7 +U 12 +D 9 +R 12 +L 1 +U 3 +D 6 +R 11 +L 6 +U 8 +D 11 +R 7 +U 5 +D 4 +U 1 +L 11 +D 1 +U 5 +R 13 +L 9 +U 4 +D 4 +R 10 +U 4 +D 7 +L 4 +D 10 +R 6 +D 5 +R 9 +L 10 +D 2 +U 11 +D 8 +U 1 +R 8 +U 5 +R 8 +D 10 +L 10 +D 7 +R 5 +U 6 +D 7 +U 9 +R 8 +D 4 +R 2 +D 1 +L 1 +U 2 +R 10 +D 2 +U 13 +L 9 +U 13 +L 12 +U 12 +D 6 +L 1 +R 4 +L 7 +R 4 +L 2 +U 8 +R 7 +D 10 +U 2 +L 8 +D 5 +R 9 +D 9 +R 2 +L 3 +U 2 +D 11 +U 5 +D 12 +R 3 +U 10 +D 2 +R 1 +D 13 +U 7 +L 7 +R 1 +U 1 +R 1 +U 6 +D 12 +R 7 +L 7 +R 9 +U 10 +R 13 +D 3 +R 12 +U 1 +L 6 +R 9 +U 10 +L 1 +U 13 +R 2 +D 8 +U 12 +D 10 +L 7 +U 6 +D 9 +L 11 +D 8 +U 4 +R 1 +D 11 +L 8 +U 1 +D 4 +R 7 +U 7 +R 5 +L 1 +R 14 +L 8 +D 10 +R 13 +U 13 +R 9 +L 13 +U 2 +D 7 +R 11 +D 2 +L 9 +D 11 +L 2 +U 12 +D 11 +R 12 +D 3 +R 6 +L 11 +R 7 +D 3 +U 6 +D 9 +L 10 +R 13 +D 7 +U 14 +L 10 +R 11 +D 12 +R 12 +U 13 +R 4 +L 14 +U 5 +L 4 +U 10 +L 3 +U 13 +R 9 +D 7 +U 8 +R 5 +L 14 +U 5 +R 6 +D 13 +L 13 +U 9 +R 13 +D 1 +L 8 +R 9 +U 8 +L 7 +U 4 +D 4 +R 4 +L 5 +U 11 +R 14 +L 2 +U 1 +D 14 +R 13 +D 3 +L 13 +D 2 +U 9 +D 14 +U 1 +R 1 +D 12 +L 6 +R 4 +U 4 +L 11 +U 14 +D 13 +R 12 +L 7 +U 13 +R 4 +U 14 +L 14 +R 11 +L 8 +D 3 +U 4 +R 1 +U 5 +D 12 +L 5 +U 14 +D 6 +R 6 +U 4 +L 1 +D 11 +U 9 +R 5 +U 13 +D 7 +L 5 +D 3 +L 8 +U 7 +D 4 +L 13 +R 1 +D 11 +L 7 +U 6 +D 9 +R 10 +D 6 +R 9 +L 2 +D 6 +U 12 +L 10 +D 3 +U 6 +L 4 +R 4 +U 12 +D 13 +R 9 +L 1 +R 5 +U 14 +R 14 +D 7 +U 10 +R 3 +L 4 +U 6 +L 13 +U 14 +R 10 +L 7 +D 12 +U 5 +L 11 +D 7 +U 9 +D 4 +L 1 +R 11 +D 9 +L 5 +D 15 +R 4 +U 12 +L 1 +U 8 +L 15 +D 15 +L 3 +R 11 +L 9 +R 1 +U 12 +D 9 +R 7 +D 6 +U 2 +L 12 +U 13 +R 11 +L 15 +D 4 +L 8 +U 6 +L 7 +R 2 +U 7 +D 2 +U 13 +D 10 +L 13 +U 1 +D 6 +L 11 +R 14 +L 5 +U 2 +R 11 +D 10 +L 4 +R 14 +U 13 +D 9 +U 2 +D 4 +R 14 +L 4 +R 4 +L 4 +U 6 +D 11 +L 10 +U 9 +L 3 +U 12 +L 8 +U 9 +D 4 +U 4 +L 10 +U 1 +D 8 +U 15 +D 3 +U 12 +R 3 +D 8 +U 1 +R 10 +L 1 +U 5 +D 1 +L 1 +R 3 +U 1 +R 8 +U 10 +R 1 +U 11 +R 15 +D 16 +U 13 +D 7 +U 7 +D 14 +R 9 +L 13 +R 12 +U 2 +R 11 +L 11 +R 3 +D 11 +U 11 +R 2 +D 3 +U 6 +L 14 +R 6 +L 6 +U 3 +R 3 +D 1 +U 5 +L 3 +R 4 +D 9 +U 15 +R 2 +U 5 +D 5 +R 14 +U 6 +R 1 +D 4 +U 2 +D 3 +R 8 +L 4 +D 2 +U 12 +D 2 +U 7 +L 14 +U 1 +R 10 +L 4 +D 12 +L 9 +D 16 +U 2 +R 7 +D 16 +U 9 +D 13 +U 7 +L 14 +D 5 +R 12 +U 13 +R 13 +U 2 +L 11 +D 9 +U 2 +R 8 +U 5 +R 7 +U 9 +L 11 +D 16 +U 10 +R 5 +D 7 +L 6 +D 8 +U 4 +R 3 +D 5 +L 5 +U 11 +R 4 +D 12 +R 12 +L 10 +R 15 +U 9 +D 12 +L 11 +U 6 +D 11 +U 12 +L 6 +R 3 +U 12 +D 5 +L 1 +R 12 +U 14 +L 1 +D 2 +L 4 +D 7 +L 12 +U 10 +L 12 +U 4 +D 14 +R 13 +U 9 +L 2 +U 6 +L 1 +U 9 +D 16 +L 2 +R 16 +D 5 +L 7 +U 13 +L 15 +R 1 +D 8 +R 15 +D 5 +R 12 +L 5 +R 11 +U 17 +D 13 +U 13 +L 4 +D 8 +L 1 +D 7 +R 11 +U 7 +R 11 +L 9 +D 3 +L 2 +U 4 +D 16 +L 10 +U 11 +R 5 +U 4 +R 6 +L 11 +R 17 +U 13 +R 12 +D 11 +L 17 +U 15 +D 4 +R 9 +U 9 +L 10 +D 5 +R 14 +U 10 +R 5 +U 15 +L 12 +D 14 +R 14 +L 11 +R 5 +U 7 +D 1 +R 4 +D 14 +U 3 +R 6 +D 5 +R 1 +D 12 +L 14 +D 6 +L 15 +U 16 +D 10 +R 12 +D 9 +U 1 +D 1 +L 4 +D 6 +U 16 +R 11 +L 11 +R 3 +L 2 +U 12 +R 9 +D 16 +R 12 +L 14 +U 6 +L 7 +D 5 +U 4 +R 13 +L 8 +D 16 +U 5 +D 5 +U 6 +R 14 +L 6 +D 7 +U 3 +L 15 +R 14 +L 17 +R 17 +U 16 +L 4 +R 3 +U 1 +D 15 +L 12 +D 11 +L 18 +D 18 +U 10 +D 4 +U 1 +R 11 +U 18 +D 12 +R 11 +U 13 +D 14 +R 17 +D 18 +U 13 +R 8 +U 4 +R 9 +D 18 +L 6 +R 7 +L 14 +U 10 +L 10 +U 16 +D 15 +L 15 +D 3 +L 2 +D 7 +R 3 +D 7 +U 11 +L 6 +R 8 +L 3 +U 3 +R 8 +D 8 +U 10 +L 15 +D 1 +U 16 +R 1 +L 13 +R 7 +U 10 +L 12 +R 8 +D 3 +L 14 +D 12 +R 12 +D 3 +L 2 +D 15 +R 3 +L 14 +D 4 +R 5 +L 13 +D 9 +U 2 +L 5 +R 13 +D 4 +L 14 +R 14 +D 16 +R 1 +U 11 +R 6 +L 7 +U 16 +L 15 +D 6 +U 7 +R 16 +D 2 +L 15 +D 18 +U 3 +D 1 +R 7 +D 1 +L 4 +D 16 +U 12 +L 12 +R 7 +U 5 +L 5 +U 13 +R 13 +U 7 +L 9 +R 9 +U 8 +D 6 +L 3 +U 4 +R 12 +L 12 +D 16 +U 12 +L 4 +R 11 +U 9 +D 13 +R 15 +L 3 +D 17 +R 6 +D 13 +R 6 +D 5 +L 19 +U 10 +D 3 +L 2 +U 13 +R 2 +D 3 +L 3 +U 3 +R 1 +U 12 +L 2 +D 19 +L 17 +R 10 +D 11 +U 8 +R 10 +L 15 +R 4 +D 9 +U 4 +D 11 +U 4 +D 3 +L 5 +D 15 +U 1 +L 19 +D 16 +R 11 +U 12 +D 16 +L 4 +R 13 +U 2 +L 19 +U 9 +R 5 +D 7 +R 19 +L 9 +U 2 +D 2 +R 3 +U 10 +L 13 +D 16 +L 2 +D 5 +L 8 +R 9 +L 18 +R 9 +U 13 +D 7 +R 14 +U 8 +R 18 +L 18 +U 8 +L 13 +R 9 +U 5 +L 16 +U 4 +D 4 +R 10 +U 13 +R 2 +L 6 +R 18 +D 3 +L 11 +R 12 +L 2 +R 12 +D 7 +U 12 +R 13 +U 14 +D 1 +R 8 +L 13 +U 5 +L 9 +U 19 +D 14 +L 4 +U 8 +D 8 +U 1 +D 16 +U 4 +D 8 +U 20 \ No newline at end of file diff --git a/day9/sample_input.txt b/day9/sample_input.txt new file mode 100644 index 0000000..c1eba0a --- /dev/null +++ b/day9/sample_input.txt @@ -0,0 +1,8 @@ +R 5 +U 8 +L 8 +D 3 +R 17 +D 10 +L 25 +U 20 \ No newline at end of file diff --git a/day9/src/main.rs b/day9/src/main.rs new file mode 100644 index 0000000..6d8f820 --- /dev/null +++ b/day9/src/main.rs @@ -0,0 +1,64 @@ +use std::collections::HashSet; + +use nalgebra::base::Vector2; + +type IVec2 = Vector2; + +const RIGHT: IVec2 = IVec2::new(1, 0); +const LEFT: IVec2 = IVec2::new(-1, 0); +const UP: IVec2 = IVec2::new(0, 1); +const DOWN: IVec2 = IVec2::new(0, -1); + +const ZERO: IVec2 = IVec2::new(0, 0); + +fn main() { + const INPUT: &str = include_str!("../input.txt"); + + let mut visited: HashSet = HashSet::new(); + + let mut knots: [IVec2; 10] = [ZERO; 10]; + + for line in INPUT.lines() { + let (dir, steps) = line.split_once(' ').unwrap(); + let dir: IVec2 = match dir.chars().next().unwrap() { + 'R' => RIGHT, + 'L' => LEFT, + 'U' => UP, + 'D' => DOWN, + _ => ZERO, + }; + let steps: u32 = steps.parse().unwrap(); + + for _ in 0..steps { + *knots.get_mut(0).unwrap() += dir; + + for i in 1..knots.len() { + let diff: IVec2; + { + let knot = knots.get(i).unwrap(); + let prev = knots.get(i - 1).unwrap(); + diff = *prev - *knot; + } + + let knot = knots.get_mut(i).unwrap(); + if diff.x.abs() > 1 || diff.y.abs() > 1 { + // need to move + if diff.x == 0 { + knot.y += diff.y.signum(); + } else if diff.y == 0 { + knot.x += diff.x.signum(); + } else { + knot.x += diff.x.signum(); + knot.y += diff.y.signum(); + } + } + + if i == 9 { + visited.insert(*knot); + } + } + } + } + + println!("{}", visited.len()); +}