diff --git a/Cargo.toml b/Cargo.toml index b4ada73..6c5e209 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "aoc-vv" version = "0.1.0" edition = "2021" -default-run = "p08" +default-run = "p09" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/etc/p09.txt b/etc/p09.txt new file mode 100644 index 0000000..8e32261 --- /dev/null +++ b/etc/p09.txt @@ -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/etc/p10.txt b/etc/p10.txt new file mode 100644 index 0000000..ad1a578 --- /dev/null +++ b/etc/p10.txt @@ -0,0 +1,146 @@ +noop +noop +addx 5 +addx 1 +noop +noop +addx 3 +addx 1 +addx 6 +noop +addx -1 +addx 5 +addx 1 +noop +addx 4 +addx 1 +noop +addx -6 +addx 12 +noop +addx 3 +addx 1 +addx -26 +addx -12 +addx 5 +addx 19 +addx -3 +addx -13 +addx 2 +noop +addx 3 +addx 2 +noop +addx 3 +addx 15 +addx -8 +addx 2 +addx 6 +noop +addx -23 +addx 20 +addx 3 +addx 2 +addx 5 +addx -40 +noop +noop +addx 3 +addx 6 +addx -2 +noop +addx 5 +noop +noop +addx 5 +addx -2 +addx 9 +noop +noop +noop +addx -14 +addx 17 +noop +noop +addx 8 +noop +noop +addx -2 +addx 4 +noop +noop +addx -35 +noop +noop +noop +addx -1 +addx 5 +addx 6 +noop +addx -4 +addx 5 +addx 2 +addx 3 +noop +addx 5 +addx 14 +addx -10 +addx -25 +addx 1 +addx 38 +addx -6 +addx 2 +addx 3 +addx -2 +addx -38 +noop +addx 9 +addx -4 +noop +addx 25 +addx -20 +noop +addx 3 +addx 2 +addx 5 +addx 2 +addx -9 +addx 14 +addx -2 +noop +noop +addx 7 +addx 3 +addx -2 +addx 2 +noop +addx 3 +addx -38 +noop +addx 7 +noop +noop +addx 1 +noop +addx 3 +addx 1 +noop +noop +addx 6 +noop +addx 4 +addx 1 +noop +noop +addx 4 +addx 1 +addx 7 +addx -3 +addx 5 +noop +noop +noop +noop +noop +noop +noop diff --git a/etc/p11.txt b/etc/p11.txt new file mode 100644 index 0000000..8798a00 --- /dev/null +++ b/etc/p11.txt @@ -0,0 +1,55 @@ +Monkey 0: + Starting items: 71, 56, 50, 73 + Operation: new = old * 11 + Test: divisible by 13 + If true: throw to monkey 1 + If false: throw to monkey 7 + +Monkey 1: + Starting items: 70, 89, 82 + Operation: new = old + 1 + Test: divisible by 7 + If true: throw to monkey 3 + If false: throw to monkey 6 + +Monkey 2: + Starting items: 52, 95 + Operation: new = old * old + Test: divisible by 3 + If true: throw to monkey 5 + If false: throw to monkey 4 + +Monkey 3: + Starting items: 94, 64, 69, 87, 70 + Operation: new = old + 2 + Test: divisible by 19 + If true: throw to monkey 2 + If false: throw to monkey 6 + +Monkey 4: + Starting items: 98, 72, 98, 53, 97, 51 + Operation: new = old + 6 + Test: divisible by 5 + If true: throw to monkey 0 + If false: throw to monkey 5 + +Monkey 5: + Starting items: 79 + Operation: new = old + 7 + Test: divisible by 2 + If true: throw to monkey 7 + If false: throw to monkey 0 + +Monkey 6: + Starting items: 77, 55, 63, 93, 66, 90, 88, 71 + Operation: new = old * 7 + Test: divisible by 11 + If true: throw to monkey 2 + If false: throw to monkey 4 + +Monkey 7: + Starting items: 54, 97, 87, 70, 59, 82, 59 + Operation: new = old + 8 + Test: divisible by 17 + If true: throw to monkey 1 + If false: throw to monkey 3 diff --git a/src/bin/p09.rs b/src/bin/p09.rs new file mode 100644 index 0000000..0cac517 --- /dev/null +++ b/src/bin/p09.rs @@ -0,0 +1,168 @@ +#![feature(iterator_try_collect)] + +use std::fs; +use std::collections::HashSet; +use std::str; +use std::error::Error; +use std::str::FromStr; +use std::io::{self, BufRead}; + +#[derive(PartialEq, Debug)] +enum Direction { + Right, + Left, + Up, + Down, +} + +impl FromStr for Direction { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + match s { + "R" => Ok(Direction::Right), + "L" => Ok(Direction::Left), + "U" => Ok(Direction::Up), + "D" => Ok(Direction::Down), + _ => Err("Can't parse into a direction"), + } + } +} + +#[derive(PartialEq, Debug)] +struct MoveDirective { + direction: Direction, + amount: i32, +} + +impl FromStr for MoveDirective { + type Err = Box; + + fn from_str(s: &str) -> Result { + match s.len() { + x if x >= 3 => { + Ok(MoveDirective { + direction: s[0..1].parse()?, + amount: s[2..].parse()?, + }) + }, + _ => Err("Can't parse.".into()), + } + } +} + +trait Movable { + fn do_move(&mut self, direction: &Direction); +} + +type Pos = (i32, i32); + +impl Movable for Pos { + fn do_move(&mut self, direction: &Direction) { + match direction { + Direction::Left => self.0 -= 1, + Direction::Right => self.0 += 1, + Direction::Up => self.1 -= 1, + Direction::Down => self.1 += 1, + } + } +} + +#[derive(PartialEq, Debug)] +struct Rope { + front: Pos, + end: Pos, +} + +impl Movable for Rope { + fn do_move(&mut self, direction: &Direction) { + self.front.do_move(direction); + self.update(); + } +} + +impl Rope { + fn new() -> Rope { + Rope{ + front: (0, 0), + end: (0, 0), + } + } + + fn update(&mut self) { + fn process(f: i32, e: i32, f2: i32, e2: i32) -> Pos { + // Check difference, clamp if abs greater than 1 + // Then add the clamped difference to the front. + // E F + let d = e - f; + if d == 0 { + return (f, e2); + } + + let abs = d.abs(); + let endpos = f + d.signum(); + (endpos, match abs { + x if x > 1 => f2, + _ => e2, + }) + } + + (self.end.0, self.end.1) = process(self.front.0, self.end.0, self.front.1, self.end.1); + (self.end.1, self.end.0) = process(self.front.1, self.end.1, self.front.0, self.end.0); + } +} + +#[derive(Debug)] +struct EtchASketch(HashSet); + +impl EtchASketch { + fn new() -> EtchASketch { + EtchASketch(HashSet::new()) + } + + fn visit(&mut self, pos: Pos) { + self.0.insert(pos); + } +} + +fn main() { + let filename = "etc/p09.txt"; + let file = fs::File::open(filename).expect("Can't open file"); + let reader = io::BufReader::new(file); + + let directives: Vec = reader.lines().flatten().flat_map(|l| l.parse()).collect(); + let mut etch = EtchASketch::new(); + + let mut rope = Rope::new(); + etch.visit(rope.end); + for directive in directives { + dbg!(&directive); + for _ in 0..directive.amount { + rope.do_move(&directive.direction); + etch.visit(rope.end); + } + dbg!(&rope); + } + + //dbg!(rope, &etch); + + println!("PART ONE ---------------"); + dbg!(etch.0.len()); + part1(); + println!("\nPART TWO ---------------"); + part2(); +} + +fn part1() {} + +fn part2() {} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_input() { + assert_eq!(MoveDirective{ direction: Direction::Down, amount: 42 }, "D 42".parse().unwrap()); + } +}