diff --git a/aoc_09a/.gitignore b/aoc_09a/.gitignore new file mode 100644 index 0000000..62bd1a4 --- /dev/null +++ b/aoc_09a/.gitignore @@ -0,0 +1,12 @@ +# ---> Rust +# Generated by Cargo +# will have compiled files and executables +/target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + diff --git a/aoc_09a/Cargo.toml b/aoc_09a/Cargo.toml new file mode 100644 index 0000000..d926ffa --- /dev/null +++ b/aoc_09a/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "aoc_09a" +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/aoc_09a/input b/aoc_09a/input new file mode 100644 index 0000000..8e32261 --- /dev/null +++ b/aoc_09a/input @@ -0,0 +1,2000 @@ +R 1 +U 2 +R 1 +L 2 +U 2 +D 2 +L 2 +U 2 +L 2 +R 2 +D 2 +L 1 +D 2 +L 2 +U 1 +L 1 +R 2 +L 1 +R 1 +U 2 +D 1 +U 2 +L 1 +U 2 +D 1 +L 1 +D 1 +L 1 +D 2 +U 1 +D 1 +U 1 +R 2 +U 1 +L 2 +D 2 +U 1 +D 2 +R 2 +L 1 +D 1 +R 1 +U 2 +R 2 +D 2 +L 2 +U 1 +L 1 +U 2 +D 1 +U 2 +R 1 +D 1 +R 1 +L 2 +R 2 +U 1 +D 2 +L 2 +U 2 +D 1 +L 1 +U 2 +D 2 +U 1 +L 2 +R 2 +D 1 +L 1 +D 1 +U 2 +R 2 +D 1 +U 1 +R 2 +D 2 +U 2 +L 1 +R 2 +U 1 +R 2 +L 2 +U 2 +R 2 +L 1 +R 1 +U 1 +R 1 +U 1 +L 1 +D 1 +R 1 +U 2 +D 2 +U 2 +L 1 +D 2 +U 1 +R 2 +D 2 +L 1 +D 2 +L 1 +U 1 +R 1 +L 1 +U 1 +D 2 +U 1 +R 2 +D 1 +U 1 +D 1 +R 3 +L 3 +R 2 +D 2 +U 3 +R 3 +U 1 +D 1 +L 3 +D 3 +L 2 +U 3 +R 2 +U 2 +L 3 +R 2 +D 3 +R 1 +D 2 +R 1 +L 1 +D 3 +R 2 +D 1 +U 2 +L 2 +U 1 +L 1 +D 2 +R 2 +U 1 +R 3 +U 2 +R 2 +D 3 +L 2 +D 2 +R 2 +L 3 +D 1 +U 3 +L 2 +R 2 +L 3 +U 2 +R 3 +U 3 +L 2 +U 3 +R 1 +L 3 +D 3 +U 2 +L 1 +U 3 +R 2 +L 1 +U 2 +R 1 +U 1 +L 2 +R 2 +D 1 +L 1 +U 2 +D 1 +L 1 +D 1 +L 1 +D 2 +U 2 +D 3 +R 2 +D 3 +L 3 +R 3 +U 2 +L 2 +U 2 +L 2 +U 2 +L 3 +U 1 +L 2 +D 3 +L 3 +R 3 +D 2 +U 3 +R 1 +L 2 +R 3 +D 1 +U 2 +R 3 +L 3 +R 3 +U 3 +R 2 +L 2 +R 2 +D 2 +R 3 +D 2 +U 3 +L 3 +D 3 +R 3 +U 3 +R 4 +L 3 +D 2 +L 4 +D 2 +U 2 +L 1 +R 3 +U 2 +R 2 +L 4 +D 2 +R 2 +D 2 +U 2 +R 4 +D 1 +L 1 +U 1 +L 3 +D 3 +U 1 +R 1 +D 4 +U 2 +L 3 +U 3 +D 2 +R 3 +L 1 +R 1 +L 1 +R 3 +L 1 +R 1 +D 1 +R 3 +D 3 +R 2 +U 3 +R 2 +D 1 +L 3 +D 2 +U 3 +D 2 +L 4 +D 3 +R 1 +L 4 +D 2 +R 1 +U 3 +L 1 +R 4 +L 3 +U 4 +R 2 +U 1 +R 4 +L 1 +R 1 +U 3 +D 3 +R 3 +U 1 +L 4 +R 4 +U 2 +R 1 +D 2 +L 4 +R 1 +D 2 +U 2 +L 1 +U 4 +R 2 +D 2 +R 3 +U 1 +L 2 +R 3 +U 4 +R 2 +L 1 +U 1 +R 4 +L 2 +R 1 +L 2 +D 3 +U 4 +L 3 +U 4 +L 4 +U 4 +D 3 +U 3 +L 1 +D 1 +U 1 +D 1 +L 4 +D 4 +L 2 +U 4 +L 3 +D 2 +L 1 +U 1 +D 4 +R 1 +L 4 +U 5 +R 5 +U 3 +D 1 +L 4 +U 1 +L 1 +U 2 +D 4 +R 5 +U 5 +D 5 +L 4 +R 4 +L 5 +U 1 +L 1 +U 4 +L 1 +R 5 +L 5 +R 1 +D 2 +U 5 +R 4 +U 3 +D 2 +U 5 +L 3 +D 4 +U 1 +D 2 +U 3 +R 1 +D 2 +L 3 +U 4 +D 1 +L 5 +D 2 +U 3 +D 4 +R 3 +U 1 +R 1 +D 4 +L 5 +R 3 +L 3 +R 5 +L 4 +R 5 +D 4 +R 5 +U 1 +R 2 +D 4 +R 4 +U 2 +L 5 +R 3 +D 5 +U 4 +D 2 +U 5 +L 2 +R 5 +L 3 +D 2 +R 3 +U 5 +L 5 +D 5 +U 2 +R 5 +U 1 +D 2 +R 1 +L 1 +R 3 +U 2 +D 4 +U 1 +R 3 +U 5 +D 5 +L 3 +U 1 +D 1 +L 4 +R 4 +L 4 +R 1 +U 2 +L 3 +R 2 +U 2 +L 1 +U 1 +L 5 +U 3 +R 2 +U 3 +D 1 +R 4 +D 5 +L 1 +D 1 +U 3 +D 2 +U 5 +L 6 +D 2 +R 6 +D 3 +U 4 +R 3 +U 5 +D 4 +U 5 +D 1 +L 3 +U 5 +R 3 +U 1 +D 2 +R 4 +U 3 +L 6 +D 2 +R 4 +D 2 +L 2 +U 6 +R 4 +U 1 +R 4 +U 6 +L 6 +U 4 +L 3 +D 2 +U 4 +L 3 +R 4 +D 4 +U 2 +L 2 +D 1 +U 3 +L 5 +R 3 +L 4 +D 5 +R 1 +U 4 +L 2 +U 4 +R 2 +L 5 +R 6 +D 1 +U 1 +R 6 +D 6 +U 6 +R 6 +U 6 +R 2 +U 6 +R 4 +D 4 +U 5 +D 5 +R 2 +D 1 +R 6 +D 5 +R 2 +D 1 +L 6 +D 5 +L 5 +D 6 +U 5 +D 1 +U 5 +L 1 +R 5 +L 5 +U 5 +R 3 +U 2 +D 6 +L 5 +U 5 +D 5 +R 3 +D 1 +U 6 +R 6 +D 5 +U 5 +R 1 +D 5 +L 3 +R 4 +U 5 +R 5 +U 3 +D 3 +L 5 +U 2 +L 3 +U 2 +L 5 +R 6 +L 1 +D 3 +U 5 +R 5 +L 5 +U 2 +R 4 +D 6 +L 3 +R 2 +U 6 +D 3 +R 6 +D 7 +L 3 +U 2 +L 3 +D 4 +L 2 +U 3 +D 2 +L 4 +D 5 +R 2 +L 3 +D 2 +R 6 +U 6 +D 1 +R 5 +U 1 +R 5 +U 7 +L 6 +U 6 +L 4 +D 7 +U 4 +R 2 +L 7 +U 7 +L 5 +D 4 +U 4 +R 6 +U 4 +R 3 +U 3 +R 4 +U 2 +R 2 +D 4 +U 2 +R 1 +D 2 +L 5 +D 6 +R 6 +U 7 +L 2 +D 4 +L 4 +D 7 +U 7 +D 5 +L 3 +U 5 +R 2 +D 2 +L 6 +R 1 +D 1 +R 5 +D 2 +R 3 +D 5 +U 3 +L 5 +R 7 +U 2 +R 6 +U 5 +D 3 +R 3 +U 4 +D 6 +U 2 +L 4 +U 1 +R 2 +L 6 +U 6 +R 2 +U 6 +D 3 +L 4 +R 1 +L 7 +D 5 +U 3 +D 5 +R 7 +U 1 +L 1 +U 3 +R 5 +D 6 +R 3 +U 7 +L 3 +R 1 +L 7 +U 3 +D 6 +R 4 +L 2 +D 4 +R 6 +L 4 +D 8 +R 3 +D 5 +L 2 +R 2 +L 4 +U 3 +R 1 +U 1 +D 3 +L 1 +R 6 +U 5 +D 6 +U 3 +D 3 +L 7 +U 3 +D 6 +L 2 +R 2 +D 7 +L 7 +D 6 +L 2 +R 3 +L 1 +R 2 +U 3 +L 6 +D 3 +U 5 +L 3 +U 4 +R 8 +L 5 +U 5 +R 3 +D 4 +R 1 +L 7 +U 4 +R 4 +D 8 +U 8 +D 4 +L 8 +U 3 +L 3 +R 4 +L 1 +U 3 +D 4 +R 5 +L 4 +R 3 +L 7 +R 1 +U 1 +D 2 +L 8 +U 5 +R 2 +L 7 +U 1 +L 8 +R 4 +U 3 +R 7 +U 6 +L 3 +U 6 +L 3 +U 3 +D 8 +L 5 +D 7 +U 1 +L 2 +R 4 +L 4 +R 1 +D 8 +R 8 +L 4 +R 5 +L 2 +R 8 +L 7 +D 4 +L 1 +U 1 +R 2 +U 1 +L 2 +D 1 +L 2 +R 8 +U 2 +L 8 +D 5 +L 4 +R 6 +U 1 +D 2 +L 5 +R 7 +L 6 +R 1 +L 2 +R 3 +L 2 +D 2 +L 3 +R 4 +U 7 +R 6 +D 3 +L 4 +D 6 +R 3 +D 6 +R 8 +U 1 +R 6 +D 1 +U 7 +D 9 +R 2 +D 1 +U 6 +R 3 +D 5 +U 5 +L 6 +U 3 +D 7 +L 2 +D 6 +L 5 +U 4 +L 2 +D 5 +L 3 +D 4 +U 7 +L 4 +D 9 +R 3 +L 5 +R 5 +L 5 +U 1 +R 8 +L 6 +U 2 +D 2 +R 3 +L 5 +D 7 +L 4 +U 4 +D 9 +L 8 +R 1 +L 5 +R 8 +D 9 +R 6 +L 6 +U 6 +R 3 +U 5 +R 8 +U 4 +L 8 +U 3 +R 2 +L 7 +R 9 +U 6 +L 2 +U 2 +D 9 +U 6 +R 5 +D 8 +R 1 +D 1 +L 4 +U 2 +D 9 +L 9 +D 5 +U 9 +R 2 +D 6 +R 9 +L 1 +R 2 +U 1 +L 7 +R 4 +U 4 +L 2 +U 2 +L 5 +D 5 +L 6 +D 2 +R 8 +L 4 +D 9 +R 8 +L 2 +D 4 +R 2 +L 6 +R 10 +U 7 +L 4 +U 9 +R 8 +D 9 +U 10 +R 2 +L 4 +U 7 +D 8 +R 8 +D 5 +L 5 +D 5 +L 2 +D 1 +U 5 +D 6 +R 7 +L 10 +U 9 +R 3 +D 9 +U 2 +L 8 +U 3 +D 2 +U 5 +D 5 +R 2 +U 5 +R 4 +L 8 +U 10 +L 7 +D 4 +L 1 +U 7 +L 10 +R 1 +L 6 +D 10 +R 2 +U 3 +D 1 +R 2 +D 2 +U 6 +L 1 +D 2 +U 5 +D 6 +L 4 +D 3 +R 4 +L 3 +D 10 +U 2 +R 8 +U 5 +L 5 +R 8 +D 6 +L 8 +U 8 +R 9 +U 3 +L 9 +U 2 +R 5 +U 1 +R 1 +D 2 +L 3 +R 9 +D 10 +L 2 +R 9 +D 4 +L 7 +U 7 +R 2 +D 10 +U 5 +R 9 +L 6 +D 4 +U 10 +R 5 +D 2 +R 7 +U 10 +L 3 +D 9 +L 3 +R 6 +L 8 +U 5 +R 10 +L 9 +U 4 +R 8 +D 2 +R 4 +U 10 +L 1 +U 9 +L 9 +R 3 +D 4 +L 7 +R 6 +D 8 +L 5 +R 9 +L 8 +R 7 +D 10 +L 3 +D 3 +U 6 +L 5 +R 5 +L 9 +R 2 +D 2 +U 5 +R 8 +D 11 +U 10 +L 3 +D 6 +U 11 +R 11 +U 4 +D 7 +L 8 +R 10 +U 10 +L 5 +R 7 +L 4 +U 2 +L 5 +U 3 +D 6 +U 11 +D 6 +L 1 +D 10 +L 6 +D 9 +R 3 +D 5 +R 6 +U 5 +L 7 +R 9 +D 5 +R 11 +D 10 +U 1 +L 2 +R 8 +L 6 +D 5 +U 10 +L 10 +R 5 +U 2 +D 3 +L 2 +R 6 +D 6 +L 1 +U 5 +R 8 +D 7 +R 10 +L 4 +D 2 +R 10 +U 8 +L 10 +R 7 +U 8 +D 7 +U 3 +R 8 +D 10 +U 11 +D 11 +L 4 +U 5 +R 10 +U 2 +L 11 +U 10 +R 10 +U 1 +D 6 +U 1 +L 3 +R 11 +L 2 +U 3 +D 1 +U 11 +L 2 +D 4 +R 9 +L 2 +D 7 +U 1 +R 2 +L 8 +R 6 +D 4 +R 1 +L 6 +D 4 +U 8 +D 8 +R 5 +U 11 +R 6 +U 11 +R 11 +U 7 +R 9 +D 4 +R 1 +D 9 +R 3 +L 9 +U 4 +R 6 +D 5 +L 3 +R 11 +U 11 +L 6 +R 11 +L 7 +D 1 +R 10 +D 2 +U 8 +R 4 +L 6 +R 4 +U 4 +D 12 +R 6 +L 12 +R 9 +L 8 +R 2 +L 12 +U 2 +L 9 +D 2 +U 8 +D 9 +R 12 +U 6 +L 2 +U 11 +R 5 +D 7 +U 11 +D 1 +R 6 +U 3 +D 9 +L 2 +R 1 +D 6 +R 12 +D 5 +L 11 +R 11 +L 3 +R 11 +L 1 +D 11 +U 10 +L 2 +R 2 +U 8 +D 3 +U 3 +L 4 +D 8 +L 2 +D 9 +R 10 +D 9 +U 11 +L 3 +D 4 +L 5 +U 4 +R 5 +D 12 +U 2 +L 11 +R 1 +L 6 +D 11 +R 9 +U 10 +D 2 +L 12 +D 7 +U 9 +D 12 +U 5 +L 4 +D 7 +L 11 +D 7 +L 2 +D 10 +R 7 +D 1 +R 9 +U 4 +D 12 +U 4 +R 3 +D 1 +L 6 +D 3 +R 9 +L 12 +D 10 +U 2 +L 12 +D 6 +L 2 +D 5 +L 1 +U 4 +L 5 +U 5 +R 7 +U 9 +R 4 +D 9 +L 13 +U 2 +L 8 +U 1 +R 10 +L 5 +U 2 +L 7 +U 6 +L 10 +U 11 +R 2 +U 6 +R 13 +D 4 +U 3 +R 11 +D 2 +U 7 +D 4 +R 13 +L 7 +R 11 +L 8 +U 4 +R 13 +D 9 +U 11 +L 4 +D 10 +U 8 +D 8 +R 6 +U 7 +L 8 +R 2 +U 7 +L 12 +R 2 +D 8 +L 7 +U 6 +D 6 +L 9 +R 8 +L 11 +U 6 +D 3 +U 2 +L 2 +R 1 +U 7 +L 6 +U 5 +D 6 +U 11 +D 11 +U 8 +R 12 +L 7 +R 3 +D 8 +L 11 +U 6 +D 10 +L 2 +D 6 +L 5 +D 10 +U 12 +D 6 +R 10 +D 4 +R 13 +U 2 +D 3 +L 9 +U 12 +L 10 +D 11 +R 7 +D 5 +L 5 +D 2 +L 11 +U 6 +L 1 +U 11 +D 5 +R 8 +U 1 +D 11 +U 8 +L 6 +D 6 +U 12 +L 7 +R 14 +D 8 +R 11 +D 12 +R 7 +U 6 +D 12 +R 6 +D 6 +L 6 +U 14 +D 2 +U 11 +D 11 +L 14 +U 8 +L 12 +D 12 +U 9 +R 7 +D 2 +U 10 +D 8 +R 8 +D 8 +L 10 +D 11 +L 4 +D 11 +U 4 +D 6 +U 5 +D 8 +R 14 +D 5 +R 1 +L 8 +R 8 +L 2 +R 11 +D 9 +L 3 +R 7 +L 5 +U 14 +L 1 +R 8 +L 12 +R 5 +D 11 +U 6 +R 1 +U 10 +R 11 +U 11 +L 9 +R 9 +L 8 +R 1 +D 3 +R 11 +U 12 +D 14 +L 1 +U 4 +D 2 +L 11 +R 4 +U 14 +R 1 +L 3 +R 13 +L 13 +D 8 +L 14 +U 12 +R 13 +D 9 +R 8 +D 12 +U 14 +D 2 +L 10 +R 1 +D 12 +R 13 +L 1 +U 5 +L 12 +R 6 +U 14 +R 6 +L 13 +U 11 +R 2 +D 6 +R 5 +U 12 +R 1 +D 11 +L 4 +U 6 +R 4 +U 5 +L 12 +D 3 +R 4 +D 1 +L 15 +R 15 +U 13 +R 10 +U 14 +R 15 +D 4 +R 8 +U 13 +L 4 +R 5 +D 7 +R 5 +L 2 +D 7 +L 4 +R 7 +D 6 +R 3 +D 12 +U 9 +L 14 +R 7 +L 12 +R 7 +D 15 +R 4 +L 1 +D 11 +R 10 +D 8 +L 9 +D 10 +L 4 +R 10 +U 8 +D 2 +L 8 +D 7 +U 11 +L 9 +U 15 +L 7 +R 6 +L 14 +D 2 +L 15 +D 6 +U 2 +R 9 +D 6 +U 7 +R 7 +U 15 +D 13 +L 6 +D 9 +R 12 +U 2 +R 8 +L 14 +R 11 +D 7 +U 1 +R 11 +D 12 +L 15 +D 9 +U 7 +L 3 +U 12 +L 3 +D 9 +R 12 +U 2 +D 8 +L 1 +U 15 +R 15 +U 15 +L 10 +U 2 +D 4 +R 8 +U 4 +D 8 +L 7 +R 11 +U 15 +D 9 +R 10 +D 8 +R 6 +D 6 +U 3 +L 13 +D 10 +L 11 +D 7 +U 5 +D 8 +U 7 +R 10 +U 1 +L 5 +D 13 +L 13 +U 11 +R 14 +D 7 +L 4 +R 8 +D 12 +U 14 +D 7 +L 5 +D 14 +U 2 +L 16 +R 9 +U 13 +R 14 +L 16 +U 16 +L 9 +U 13 +R 5 +U 15 +R 6 +D 7 +R 15 +L 15 +U 3 +L 5 +R 3 +U 1 +R 14 +U 5 +L 6 +U 13 +D 6 +U 1 +R 10 +D 11 +L 16 +U 10 +R 16 +D 15 +L 7 +R 15 +U 15 +R 5 +D 9 +U 6 +D 7 +L 15 +R 9 +L 10 +U 13 +R 7 +D 15 +U 14 +D 12 +L 2 +U 11 +D 14 +R 4 +L 1 +U 1 +R 13 +D 12 +R 14 +L 4 +R 11 +U 14 +L 2 +D 6 +R 15 +U 12 +R 15 +U 9 +D 11 +R 4 +L 15 +U 12 +D 14 +L 11 +U 10 +L 15 +U 9 +D 7 +R 12 +L 14 +U 15 +L 6 +U 2 +R 11 +L 12 +R 5 +U 8 +D 7 +U 6 +R 2 +U 6 +R 16 +L 2 +R 11 +L 7 +D 16 +R 7 +L 4 +R 13 +U 12 +D 1 +R 2 +D 4 +L 10 +D 12 +R 3 +D 14 +R 17 +L 4 +D 3 +L 2 +R 13 +L 15 +R 13 +U 9 +D 7 +L 13 +U 14 +D 6 +L 6 +D 6 +R 3 +U 6 +R 8 +U 14 +R 13 +L 15 +D 2 +U 3 +D 10 +R 16 +L 10 +D 8 +R 10 +D 9 +U 8 +R 1 +L 4 +U 14 +R 7 +L 16 +R 8 +D 4 +R 9 +U 12 +D 8 +U 7 +R 9 +L 16 +D 15 +U 11 +D 15 +U 2 +R 9 +U 10 +L 14 +D 14 +R 4 +U 12 +L 1 +U 8 +R 3 +U 13 +D 17 +U 17 +D 6 +U 17 +L 11 +D 16 +L 10 +R 10 +L 6 +U 16 +L 7 +D 8 +R 16 +U 7 +D 9 +L 2 +U 5 +L 4 +U 10 +D 1 +L 15 +U 5 +L 14 +R 7 +U 15 +L 14 +U 14 +L 7 +D 3 +L 4 +U 1 +R 11 +D 12 +R 9 +U 16 +L 3 +D 3 +L 4 +U 5 +D 16 +U 1 +D 15 +R 1 +L 16 +U 7 +L 2 +U 12 +L 13 +U 16 +D 9 +R 4 +D 15 +R 7 +U 14 +L 2 +U 9 +R 2 +L 13 +U 16 +R 4 +D 17 +U 10 +D 10 +U 10 +D 18 +R 10 +U 7 +L 6 +U 9 +D 9 +L 5 +U 9 +R 9 +L 15 +U 9 +D 10 +U 10 +R 10 +D 2 +U 15 +D 3 +R 18 +U 13 +R 1 +D 17 +L 16 +D 10 +L 1 +R 7 +U 1 +D 12 +L 3 +U 12 +L 6 +R 18 +D 13 +R 18 +U 17 +D 7 +L 11 +D 14 +L 2 +U 18 +D 8 +L 6 +D 16 +U 4 +R 14 +U 3 +D 11 +R 12 +U 12 +R 5 +D 16 +R 17 +U 3 +D 15 +U 11 +L 17 +U 15 +L 17 +U 12 +D 15 +L 14 +D 14 +U 13 +L 16 +R 5 +U 16 +D 6 +U 13 +L 13 +D 4 +R 6 +D 6 +L 18 +U 18 +L 15 +R 6 +L 6 +R 6 +U 13 +L 8 +U 13 +R 13 +U 13 +L 15 +R 6 +U 8 +R 10 +U 11 +L 18 +U 3 +L 2 +D 8 +L 5 +U 11 +L 5 +U 8 +R 13 +U 12 +R 9 +U 18 +D 11 +L 12 +D 13 +R 18 +U 2 +L 9 +D 14 +R 2 +L 17 +U 3 +L 9 +U 10 +R 9 +L 13 +R 15 +D 14 +U 2 +R 4 +L 5 +U 12 +L 14 +U 15 +D 13 +R 10 +L 5 +U 15 +D 10 +R 7 +L 9 +R 15 +L 6 +U 9 +L 15 +U 10 +R 14 +L 17 +R 16 +U 12 +D 15 +L 5 +U 17 +R 12 +D 17 +U 8 +R 10 +L 9 +R 6 +U 1 +D 3 +L 3 +D 7 +U 6 +L 9 +U 19 +R 10 +U 14 +R 15 +U 4 +D 9 +R 17 +L 6 +U 9 +R 2 +U 9 +R 16 +L 13 +U 11 +R 15 +D 10 +L 5 +U 1 +R 4 +U 17 +L 1 +U 10 +L 3 +U 9 +L 17 +U 8 +L 2 +U 10 +D 12 +L 16 +R 18 +L 6 +D 11 +R 6 +U 7 +R 3 +L 15 +R 7 +U 14 +R 2 +U 7 +R 17 +L 7 +R 1 +D 11 +R 10 +L 17 +R 5 +U 10 +L 15 +U 7 +R 7 +L 17 +D 19 +U 17 +R 3 +D 6 +L 8 +R 8 +D 3 +U 7 +L 9 diff --git a/aoc_09a/input2 b/aoc_09a/input2 new file mode 100644 index 0000000..9874df2 --- /dev/null +++ b/aoc_09a/input2 @@ -0,0 +1,8 @@ +R 4 +U 4 +L 3 +D 1 +R 4 +D 1 +L 5 +R 2 diff --git a/aoc_09a/input3 b/aoc_09a/input3 new file mode 100644 index 0000000..60bd43b --- /dev/null +++ b/aoc_09a/input3 @@ -0,0 +1,8 @@ +R 5 +U 8 +L 8 +D 3 +R 17 +D 10 +L 25 +U 20 diff --git a/aoc_09a/input4 b/aoc_09a/input4 new file mode 100644 index 0000000..75b29ac --- /dev/null +++ b/aoc_09a/input4 @@ -0,0 +1,1499 @@ +R 1 +U 2 +R 1 +L 2 +U 2 +D 2 +L 2 +U 2 +L 2 +R 2 +D 2 +L 1 +D 2 +L 2 +U 1 +L 1 +R 2 +L 1 +R 1 +U 2 +D 1 +U 2 +L 1 +U 2 +D 1 +L 1 +D 1 +L 1 +D 2 +U 1 +D 1 +U 1 +R 2 +U 1 +L 2 +D 2 +U 1 +D 2 +R 2 +L 1 +D 1 +R 1 +U 2 +R 2 +D 2 +L 2 +U 1 +L 1 +U 2 +D 1 +U 2 +R 1 +D 1 +R 1 +L 2 +R 2 +U 1 +D 2 +L 2 +U 2 +D 1 +L 1 +U 2 +D 2 +U 1 +L 2 +R 2 +D 1 +L 1 +D 1 +U 2 +R 2 +D 1 +U 1 +R 2 +D 2 +U 2 +L 1 +R 2 +U 1 +R 2 +L 2 +U 2 +R 2 +L 1 +R 1 +U 1 +R 1 +U 1 +L 1 +D 1 +R 1 +U 2 +D 2 +U 2 +L 1 +D 2 +U 1 +R 2 +D 2 +L 1 +D 2 +L 1 +U 1 +R 1 +L 1 +U 1 +D 2 +U 1 +R 2 +D 1 +U 1 +D 1 +R 3 +L 3 +R 2 +D 2 +U 3 +R 3 +U 1 +D 1 +L 3 +D 3 +L 2 +U 3 +R 2 +U 2 +L 3 +R 2 +D 3 +R 1 +D 2 +R 1 +L 1 +D 3 +R 2 +D 1 +U 2 +L 2 +U 1 +L 1 +D 2 +R 2 +U 1 +R 3 +U 2 +R 2 +D 3 +L 2 +D 2 +R 2 +L 3 +D 1 +U 3 +L 2 +R 2 +L 3 +U 2 +R 3 +U 3 +L 2 +U 3 +R 1 +L 3 +D 3 +U 2 +L 1 +U 3 +R 2 +L 1 +U 2 +R 1 +U 1 +L 2 +R 2 +D 1 +L 1 +U 2 +D 1 +L 1 +D 1 +L 1 +D 2 +U 2 +D 3 +R 2 +D 3 +L 3 +R 3 +U 2 +L 2 +U 2 +L 2 +U 2 +L 3 +U 1 +L 2 +D 3 +L 3 +R 3 +D 2 +U 3 +R 1 +L 2 +R 3 +D 1 +U 2 +R 3 +L 3 +R 3 +U 3 +R 2 +L 2 +R 2 +D 2 +R 3 +D 2 +U 3 +L 3 +D 3 +R 3 +U 3 +R 4 +L 3 +D 2 +L 4 +D 2 +U 2 +L 1 +R 3 +U 2 +R 2 +L 4 +D 2 +R 2 +D 2 +U 2 +R 4 +D 1 +L 1 +U 1 +L 3 +D 3 +U 1 +R 1 +D 4 +U 2 +L 3 +U 3 +D 2 +R 3 +L 1 +R 1 +L 1 +R 3 +L 1 +R 1 +D 1 +R 3 +D 3 +R 2 +U 3 +R 2 +D 1 +L 3 +D 2 +U 3 +D 2 +L 4 +D 3 +R 1 +L 4 +D 2 +R 1 +U 3 +L 1 +R 4 +L 3 +U 4 +R 2 +U 1 +R 4 +L 1 +R 1 +U 3 +D 3 +R 3 +U 1 +L 4 +R 4 +U 2 +R 1 +D 2 +L 4 +R 1 +D 2 +U 2 +L 1 +U 4 +R 2 +D 2 +R 3 +U 1 +L 2 +R 3 +U 4 +R 2 +L 1 +U 1 +R 4 +L 2 +R 1 +L 2 +D 3 +U 4 +L 3 +U 4 +L 4 +U 4 +D 3 +U 3 +L 1 +D 1 +U 1 +D 1 +L 4 +D 4 +L 2 +U 4 +L 3 +D 2 +L 1 +U 1 +D 4 +R 1 +L 4 +U 5 +R 5 +U 3 +D 1 +L 4 +U 1 +L 1 +U 2 +D 4 +R 5 +U 5 +D 5 +L 4 +R 4 +L 5 +U 1 +L 1 +U 4 +L 1 +R 5 +L 5 +R 1 +D 2 +U 5 +R 4 +U 3 +D 2 +U 5 +L 3 +D 4 +U 1 +D 2 +U 3 +R 1 +D 2 +L 3 +U 4 +D 1 +L 5 +D 2 +U 3 +D 4 +R 3 +U 1 +R 1 +D 4 +L 5 +R 3 +L 3 +R 5 +L 4 +R 5 +D 4 +R 5 +U 1 +R 2 +D 4 +R 4 +U 2 +L 5 +R 3 +D 5 +U 4 +D 2 +U 5 +L 2 +R 5 +L 3 +D 2 +R 3 +U 5 +L 5 +D 5 +U 2 +R 5 +U 1 +D 2 +R 1 +L 1 +R 3 +U 2 +D 4 +U 1 +R 3 +U 5 +D 5 +L 3 +U 1 +D 1 +L 4 +R 4 +L 4 +R 1 +U 2 +L 3 +R 2 +U 2 +L 1 +U 1 +L 5 +U 3 +R 2 +U 3 +D 1 +R 4 +D 5 +L 1 +D 1 +U 3 +D 2 +U 5 +L 6 +D 2 +R 6 +D 3 +U 4 +R 3 +U 5 +D 4 +U 5 +D 1 +L 3 +U 5 +R 3 +U 1 +D 2 +R 4 +U 3 +L 6 +D 2 +R 4 +D 2 +L 2 +U 6 +R 4 +U 1 +R 4 +U 6 +L 6 +U 4 +L 3 +D 2 +U 4 +L 3 +R 4 +D 4 +U 2 +L 2 +D 1 +U 3 +L 5 +R 3 +L 4 +D 5 +R 1 +U 4 +L 2 +U 4 +R 2 +L 5 +R 6 +D 1 +U 1 +R 6 +D 6 +U 6 +R 6 +U 6 +R 2 +U 6 +R 4 +D 4 +U 5 +D 5 +R 2 +D 1 +R 6 +D 5 +R 2 +D 1 +L 6 +D 5 +L 5 +D 6 +U 5 +D 1 +U 5 +L 1 +R 5 +L 5 +U 5 +R 3 +U 2 +D 6 +L 5 +U 5 +D 5 +R 3 +D 1 +U 6 +R 6 +D 5 +U 5 +R 1 +D 5 +L 3 +R 4 +U 5 +R 5 +U 3 +D 3 +L 5 +U 2 +L 3 +U 2 +L 5 +R 6 +L 1 +D 3 +U 5 +R 5 +L 5 +U 2 +R 4 +D 6 +L 3 +R 2 +U 6 +D 3 +R 6 +D 7 +L 3 +U 2 +L 3 +D 4 +L 2 +U 3 +D 2 +L 4 +D 5 +R 2 +L 3 +D 2 +R 6 +U 6 +D 1 +R 5 +U 1 +R 5 +U 7 +L 6 +U 6 +L 4 +D 7 +U 4 +R 2 +L 7 +U 7 +L 5 +D 4 +U 4 +R 6 +U 4 +R 3 +U 3 +R 4 +U 2 +R 2 +D 4 +U 2 +R 1 +D 2 +L 5 +D 6 +R 6 +U 7 +L 2 +D 4 +L 4 +D 7 +U 7 +D 5 +L 3 +U 5 +R 2 +D 2 +L 6 +R 1 +D 1 +R 5 +D 2 +R 3 +D 5 +U 3 +L 5 +R 7 +U 2 +R 6 +U 5 +D 3 +R 3 +U 4 +D 6 +U 2 +L 4 +U 1 +R 2 +L 6 +U 6 +R 2 +U 6 +D 3 +L 4 +R 1 +L 7 +D 5 +U 3 +D 5 +R 7 +U 1 +L 1 +U 3 +R 5 +D 6 +R 3 +U 7 +L 3 +R 1 +L 7 +U 3 +D 6 +R 4 +L 2 +D 4 +R 6 +L 4 +D 8 +R 3 +D 5 +L 2 +R 2 +L 4 +U 3 +R 1 +U 1 +D 3 +L 1 +R 6 +U 5 +D 6 +U 3 +D 3 +L 7 +U 3 +D 6 +L 2 +R 2 +D 7 +L 7 +D 6 +L 2 +R 3 +L 1 +R 2 +U 3 +L 6 +D 3 +U 5 +L 3 +U 4 +R 8 +L 5 +U 5 +R 3 +D 4 +R 1 +L 7 +U 4 +R 4 +D 8 +U 8 +D 4 +L 8 +U 3 +L 3 +R 4 +L 1 +U 3 +D 4 +R 5 +L 4 +R 3 +L 7 +R 1 +U 1 +D 2 +L 8 +U 5 +R 2 +L 7 +U 1 +L 8 +R 4 +U 3 +R 7 +U 6 +L 3 +U 6 +L 3 +U 3 +D 8 +L 5 +D 7 +U 1 +L 2 +R 4 +L 4 +R 1 +D 8 +R 8 +L 4 +R 5 +L 2 +R 8 +L 7 +D 4 +L 1 +U 1 +R 2 +U 1 +L 2 +D 1 +L 2 +R 8 +U 2 +L 8 +D 5 +L 4 +R 6 +U 1 +D 2 +L 5 +R 7 +L 6 +R 1 +L 2 +R 3 +L 2 +D 2 +L 3 +R 4 +U 7 +R 6 +D 3 +L 4 +D 6 +R 3 +D 6 +R 8 +U 1 +R 6 +D 1 +U 7 +D 9 +R 2 +D 1 +U 6 +R 3 +D 5 +U 5 +L 6 +U 3 +D 7 +L 2 +D 6 +L 5 +U 4 +L 2 +D 5 +L 3 +D 4 +U 7 +L 4 +D 9 +R 3 +L 5 +R 5 +L 5 +U 1 +R 8 +L 6 +U 2 +D 2 +R 3 +L 5 +D 7 +L 4 +U 4 +D 9 +L 8 +R 1 +L 5 +R 8 +D 9 +R 6 +L 6 +U 6 +R 3 +U 5 +R 8 +U 4 +L 8 +U 3 +R 2 +L 7 +R 9 +U 6 +L 2 +U 2 +D 9 +U 6 +R 5 +D 8 +R 1 +D 1 +L 4 +U 2 +D 9 +L 9 +D 5 +U 9 +R 2 +D 6 +R 9 +L 1 +R 2 +U 1 +L 7 +R 4 +U 4 +L 2 +U 2 +L 5 +D 5 +L 6 +D 2 +R 8 +L 4 +D 9 +R 8 +L 2 +D 4 +R 2 +L 6 +R 10 +U 7 +L 4 +U 9 +R 8 +D 9 +U 10 +R 2 +L 4 +U 7 +D 8 +R 8 +D 5 +L 5 +D 5 +L 2 +D 1 +U 5 +D 6 +R 7 +L 10 +U 9 +R 3 +D 9 +U 2 +L 8 +U 3 +D 2 +U 5 +D 5 +R 2 +U 5 +R 4 +L 8 +U 10 +L 7 +D 4 +L 1 +U 7 +L 10 +R 1 +L 6 +D 10 +R 2 +U 3 +D 1 +R 2 +D 2 +U 6 +L 1 +D 2 +U 5 +D 6 +L 4 +D 3 +R 4 +L 3 +D 10 +U 2 +R 8 +U 5 +L 5 +R 8 +D 6 +L 8 +U 8 +R 9 +U 3 +L 9 +U 2 +R 5 +U 1 +R 1 +D 2 +L 3 +R 9 +D 10 +L 2 +R 9 +D 4 +L 7 +U 7 +R 2 +D 10 +U 5 +R 9 +L 6 +D 4 +U 10 +R 5 +D 2 +R 7 +U 10 +L 3 +D 9 +L 3 +R 6 +L 8 +U 5 +R 10 +L 9 +U 4 +R 8 +D 2 +R 4 +U 10 +L 1 +U 9 +L 9 +R 3 +D 4 +L 7 +R 6 +D 8 +L 5 +R 9 +L 8 +R 7 +D 10 +L 3 +D 3 +U 6 +L 5 +R 5 +L 9 +R 2 +D 2 +U 5 +R 8 +D 11 +U 10 +L 3 +D 6 +U 11 +R 11 +U 4 +D 7 +L 8 +R 10 +U 10 +L 5 +R 7 +L 4 +U 2 +L 5 +U 3 +D 6 +U 11 +D 6 +L 1 +D 10 +L 6 +D 9 +R 3 +D 5 +R 6 +U 5 +L 7 +R 9 +D 5 +R 11 +D 10 +U 1 +L 2 +R 8 +L 6 +D 5 +U 10 +L 10 +R 5 +U 2 +D 3 +L 2 +R 6 +D 6 +L 1 +U 5 +R 8 +D 7 +R 10 +L 4 +D 2 +R 10 +U 8 +L 10 +R 7 +U 8 +D 7 +U 3 +R 8 +D 10 +U 11 +D 11 +L 4 +U 5 +R 10 +U 2 +L 11 +U 10 +R 10 +U 1 +D 6 +U 1 +L 3 +R 11 +L 2 +U 3 +D 1 +U 11 +L 2 +D 4 +R 9 +L 2 +D 7 +U 1 +R 2 +L 8 +R 6 +D 4 +R 1 +L 6 +D 4 +U 8 +D 8 +R 5 +U 11 +R 6 +U 11 +R 11 +U 7 +R 9 +D 4 +R 1 +D 9 +R 3 +L 9 +U 4 +R 6 +D 5 +L 3 +R 11 +U 11 +L 6 +R 11 +L 7 +D 1 +R 10 +D 2 +U 8 +R 4 +L 6 +R 4 +U 4 +D 12 +R 6 +L 12 +R 9 +L 8 +R 2 +L 12 +U 2 +L 9 +D 2 +U 8 +D 9 +R 12 +U 6 +L 2 +U 11 +R 5 +D 7 +U 11 +D 1 +R 6 +U 3 +D 9 +L 2 +R 1 +D 6 +R 12 +D 5 +L 11 +R 11 +L 3 +R 11 +L 1 +D 11 +U 10 +L 2 +R 2 +U 8 +D 3 +U 3 +L 4 +D 8 +L 2 +D 9 +R 10 +D 9 +U 11 +L 3 +D 4 +L 5 +U 4 +R 5 +D 12 +U 2 +L 11 +R 1 +L 6 +D 11 +R 9 +U 10 +D 2 +L 12 +D 7 +U 9 +D 12 +U 5 +L 4 +D 7 +L 11 +D 7 +L 2 +D 10 +R 7 +D 1 +R 9 +U 4 +D 12 +U 4 +R 3 +D 1 +L 6 +D 3 +R 9 +L 12 +D 10 +U 2 +L 12 +D 6 +L 2 +D 5 +L 1 +U 4 +L 5 +U 5 +R 7 +U 9 +R 4 +D 9 +L 13 +U 2 +L 8 +U 1 +R 10 +L 5 +U 2 +L 7 +U 6 +L 10 +U 11 +R 2 +U 6 +R 13 +D 4 +U 3 +R 11 +D 2 +U 7 +D 4 +R 13 +L 7 +R 11 +L 8 +U 4 +R 13 +D 9 +U 11 +L 4 +D 10 +U 8 +D 8 +R 6 +U 7 +L 8 +R 2 +U 7 +L 12 +R 2 +D 8 +L 7 +U 6 +D 6 +L 9 +R 8 +L 11 +U 6 +D 3 +U 2 +L 2 +R 1 +U 7 +L 6 +U 5 +D 6 +U 11 +D 11 +U 8 +R 12 +L 7 +R 3 +D 8 +L 11 +U 6 +D 10 +L 2 +D 6 +L 5 +D 10 +U 12 +D 6 +R 10 +D 4 +R 13 +U 2 +D 3 +L 9 +U 12 +L 10 +D 11 +R 7 +D 5 +L 5 +D 2 +L 11 +U 6 +L 1 +U 11 +D 5 +R 8 +U 1 +D 11 +U 8 +L 6 +D 6 +U 12 +L 7 +R 14 +D 8 +R 11 +D 12 +R 7 +U 6 +D 12 +R 6 +D 6 +L 6 +U 14 +D 2 +U 11 +D 11 +L 14 +U 8 +L 12 +D 12 +U 9 +R 7 +D 2 +U 10 +D 8 +R 8 +D 8 +L 10 +D 11 +L 4 +D 11 +U 4 +D 6 +U 5 +D 8 +R 14 +D 5 +R 1 +L 8 +R 8 +L 2 +R 11 +D 9 +L 3 +R 7 +L 5 +U 14 +L 1 +R 8 +L 12 +R 5 +D 11 +U 6 +R 1 +U 10 +R 11 +U 11 +L 9 +R 9 +L 8 +R 1 +D 3 +R 11 +U 12 +D 14 +L 1 +U 4 +D 2 +L 11 +R 4 +U 14 +R 1 +L 3 +R 13 +L 13 +D 8 +L 14 +U 12 +R 13 +D 9 +R 8 +D 12 +U 14 +D 2 +L 10 +R 1 +D 12 +R 13 +L 1 +U 5 +L 12 +R 6 +U 14 +R 6 +L 13 +U 11 +R 2 +D 6 +R 5 +U 12 +R 1 +D 11 +L 4 +U 6 +R 4 +U 5 +L 12 +D 3 +R 4 +D 1 +L 15 +R 15 +U 13 +R 10 +U 14 +R 15 +D 4 +R 8 +U 13 +L 4 +R 5 +D 7 +R 5 +L 2 +D 7 +L 4 +R 7 +D 6 +R 3 +D 12 +U 9 +L 14 +R 7 +L 12 +R 7 +D 15 +R 4 +L 1 +D 11 +R 10 +D 8 +L 9 +D 10 +L 4 +R 10 +U 8 +D 2 +L 8 +D 7 +U 11 +L 9 +U 15 +L 7 +R 6 +L 14 +D 2 +L 15 +D 6 +U 2 +R 9 +D 6 +U 7 +R 7 diff --git a/aoc_09a/src/main.rs b/aoc_09a/src/main.rs new file mode 100644 index 0000000..c263660 --- /dev/null +++ b/aoc_09a/src/main.rs @@ -0,0 +1,85 @@ +use std::fs::File; +use std::io::{self, BufRead}; +use std::path::Path; +use std::collections::HashMap; + +fn main() { + let file_path = String::from("input"); + let mut positions = HashMap::<(i32, i32), u32>::new(); + let mut tail: (i32, i32) = (0, 0); + let mut head: (i32, i32) = (0, 0); + *positions.entry(tail).or_insert(0) += 1; + + + println!("In file {}", file_path); + + if let Ok(lines) = read_lines(file_path) { + // Consumes the iterator, returns an (Optional) String + for line in lines { + if let Ok(ip) = line { + let split: Vec<&str> = ip.split(" ").collect(); + let dir = split[0]; + let steps: usize = split[1].parse().unwrap(); + if dir == "U" { + for _ in 0..steps { + println!("U {}", steps); + head.1 += 1; + if tail.1 - head.1 == -2 { + println!("U move {}", steps); + tail.0 = head.0; + tail.1 += 1; + *positions.entry(tail).or_insert(0) += 1; + } + } + } + else if dir == "D" { + for _ in 0..steps { + println!("D {}", steps); + head.1 -= 1; + if tail.1 - head.1 == 2 { + println!("D move {}", steps); + tail.0 = head.0; + tail.1 -= 1; + *positions.entry(tail).or_insert(0) += 1; + } + } + } + else if dir == "R" { + for _ in 0..steps { + println!("R {}", steps); + head.0 += 1; + if tail.0 - head.0 == -2 { + println!("R move {}", steps); + tail.1 = head.1; + tail.0 += 1; + *positions.entry(tail).or_insert(0) += 1; + } + } + } + else if dir == "L" { + for _ in 0..steps { + println!("L {}", steps); + head.0 -= 1; + if tail.0 - head.0 == 2 { + println!("L move {}", steps); + tail.1 = head.1; + tail.0 -= 1; + *positions.entry(tail).or_insert(0) += 1; + } + } + } + } + } + } + + println!("tail {:?}", tail); + println!("head {:?}", head); + println!("positions {:?}", positions); + println!("positions {}", positions.len()); +} + +fn read_lines

(filename: P) -> io::Result>> +where P: AsRef, { + let file = File::open(filename)?; + Ok(io::BufReader::new(file).lines()) +} diff --git a/aoc_09b/.gitignore b/aoc_09b/.gitignore new file mode 100644 index 0000000..62bd1a4 --- /dev/null +++ b/aoc_09b/.gitignore @@ -0,0 +1,12 @@ +# ---> Rust +# Generated by Cargo +# will have compiled files and executables +/target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + diff --git a/aoc_09b/Cargo.toml b/aoc_09b/Cargo.toml new file mode 100644 index 0000000..b28a076 --- /dev/null +++ b/aoc_09b/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "aoc_09b" +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/aoc_09b/src/main.rs b/aoc_09b/src/main.rs new file mode 100644 index 0000000..97a0b81 --- /dev/null +++ b/aoc_09b/src/main.rs @@ -0,0 +1,152 @@ +use std::fs::File; +use std::io::{self, BufRead}; +use std::path::Path; +use std::collections::HashMap; +use std::ops::Add; +use std::ops::Sub; + +#[derive(Eq, Hash, PartialEq, Debug, Clone, Copy)] +struct Point(i32, i32); + +impl Add for Point { + type Output = Point; + #[inline(always)] + fn add(self, other: Point) -> Point { + // Probably it will be optimized to not actually copy self and rhs for each call ! + Point(self.0 + other.0, self.1 + other.1) + } +} + +impl Sub for Point { + type Output = Point; + #[inline(always)] + fn sub(self, other: Point) -> Point { + // Probably it will be optimized to not actually copy self and rhs for each call ! + Point(self.0 - other.0, self.1 - other.1) + } +} +fn check_diff(tail: Point, head: Point) -> Point { + let diff = tail - head; + + match diff { + Point(-2, -2) => tail + Point(1, 1), + Point(-2, -1) => tail + Point(1, 1), + Point(-2, 0) => tail + Point(1, 0), + Point(-2, 1) => tail + Point(1, -1), + Point(-2, 2) => tail + Point(1, -1), + Point(-1, -2) => tail + Point(1, 1), + Point(-1, 2) => tail + Point(1, -1), + Point(0, -2) => tail + Point(0, 1), + Point(0, 2) => tail + Point(0, -1), + Point(1, -2) => tail + Point(-1, 1), + Point(1, 2) => tail + Point(-1, -1), + Point(2, -2) => tail + Point(-1, 1), + Point(2, -1) => tail + Point(-1, 1), + Point(2, 0) => tail + Point(-1, 0), + Point(2, 1) => tail + Point(-1, -1), + Point(2, 2) => tail + Point(-1, -1), + _ => tail, + } +} + +fn print_map(hist_x: Vec, hist_y: Vec) { + let width= hist_x.iter().max().unwrap() + 1; + let height= hist_y.iter().max().unwrap() + 1; + + println!("width {}, height {}", width, height); + let mut map: Vec> = Vec::new(); + for _ in 0..height { + map.push(Vec::new()); + for _ in 0..width { + let len = map.len() - 1; + map[len].push(0); + } + } + for i in 0..hist_x.len() { + map[height - 1 - hist_y[i]][hist_x[i]] += 1; + } + let mut count = 0; + for y in 0..map.len() { + //if x % 2 == 0 { + let mut s = String::from(""); + for x in 0..map[0].len() { + // if y % 2 == 0 { + //s.push((map[y][x] as u8 + ' ' as u8) as char); + if map[y][x] > 0 { + s.push(('#' as u8 + map[y][x] as u8) as char); + } + else { + s.push(' '); + } + count += 1; + // } + } + println!("{}", s); + // } + } + println!("count {}", count / map.len()); +} + +fn main() { + let file_path = String::from("../aoc_09a/input4"); + let mut positions = HashMap::::new(); + let mut rope: Vec = Vec::new(); + let mut hist_x: Vec = Vec::new(); + let mut hist_y: Vec = Vec::new(); + + for _ in 0..10 { + rope.push(Point(0, 0)); + } + *positions.entry(rope[9]).or_insert(0) += 1; + hist_x.push(rope[9].0); + hist_y.push(rope[9].1); + + println!("In file {}", file_path); + + if let Ok(lines) = read_lines(file_path) { + // Consumes the iterator, returns an (Optional) String + for line in lines { + if let Ok(ip) = line { + let split: Vec<&str> = ip.split(" ").collect(); + let dir = split[0]; + let steps: usize = split[1].parse().unwrap(); + let mut diff = Point(0, 0); + match dir { + "U" => diff = Point(0, 1), + "D" => diff = Point(0, -1), + "R" => diff = Point(1, 0), + "L" => diff = Point(-1, 0), + _ => (), + } + for k in 0..steps { + rope[0] = rope[0] + diff; + for i in 0..rope.len() - 1 { + rope[i + 1] = check_diff(rope[i + 1], rope[i]) + } + *positions.entry(*rope.last().unwrap()).or_insert(0) += 1; + hist_x.push(rope[9].0); + hist_y.push(rope[9].1); + } + } + } + } + + let minx = *hist_x.iter().min().unwrap(); + let miny = *hist_y.iter().min().unwrap(); + for i in 0..hist_x.len() { + hist_x[i] -= minx; + hist_y[i] -= miny; + } + let hist_x: Vec = hist_x.into_iter().map(|x| x as usize).collect(); + let hist_y: Vec = hist_y.into_iter().map(|x| x as usize).collect(); + print_map(hist_x, hist_y); + println!("rope {:?}", rope); + //println!("positions {:?}", positions); + println!("positions {}", positions.len()); +} + +fn read_lines

(filename: P) -> io::Result>> +where P: AsRef, { + let file = File::open(filename)?; + Ok(io::BufReader::new(file).lines()) +}