diff --git a/2022/rust/inputs/day09.txt b/2022/rust/inputs/day09.txt new file mode 100644 index 0000000..0d9ad64 --- /dev/null +++ b/2022/rust/inputs/day09.txt @@ -0,0 +1,2000 @@ +U 1 +R 1 +L 1 +D 1 +R 1 +L 1 +D 1 +L 2 +D 1 +R 1 +D 2 +L 1 +R 1 +D 2 +U 2 +L 1 +R 1 +U 1 +D 1 +R 1 +L 2 +R 2 +L 1 +R 2 +D 1 +U 1 +R 1 +L 2 +R 2 +D 2 +U 1 +L 2 +D 2 +U 2 +L 2 +U 1 +R 1 +L 1 +D 2 +L 1 +U 2 +L 1 +D 1 +U 2 +R 2 +U 1 +D 2 +U 2 +D 1 +L 2 +R 1 +D 1 +R 1 +D 2 +L 1 +U 2 +D 1 +L 2 +U 1 +D 1 +L 2 +R 2 +D 2 +L 2 +U 1 +D 1 +L 2 +U 2 +L 2 +U 2 +R 1 +L 1 +R 2 +D 2 +R 1 +L 2 +R 1 +D 1 +R 1 +U 2 +D 2 +L 1 +U 2 +D 2 +L 2 +U 1 +R 1 +D 1 +U 1 +R 1 +L 2 +U 2 +L 1 +R 2 +L 2 +D 2 +U 1 +D 2 +U 1 +L 1 +U 2 +D 2 +R 1 +D 1 +L 2 +R 2 +D 1 +L 1 +R 1 +U 1 +L 2 +R 2 +U 1 +R 3 +D 2 +U 2 +L 3 +R 3 +D 3 +U 3 +R 1 +D 2 +R 1 +D 1 +L 2 +R 3 +D 3 +U 3 +D 3 +R 1 +U 2 +D 3 +L 3 +R 2 +L 2 +D 3 +U 2 +D 1 +R 3 +D 1 +U 1 +L 2 +D 1 +U 1 +L 1 +D 1 +R 3 +D 2 +L 1 +R 1 +L 2 +U 3 +L 1 +U 1 +L 3 +R 3 +L 3 +R 2 +D 2 +R 1 +U 2 +R 1 +D 3 +U 3 +L 1 +U 2 +D 3 +R 2 +D 1 +U 1 +D 1 +R 3 +U 1 +R 2 +L 1 +D 1 +U 1 +R 2 +L 1 +U 3 +L 1 +R 1 +U 3 +L 3 +D 2 +R 2 +D 1 +L 3 +R 3 +D 1 +L 2 +U 3 +D 1 +U 1 +R 1 +L 1 +U 2 +D 2 +R 3 +U 3 +R 1 +U 2 +D 2 +R 2 +D 2 +R 1 +L 2 +D 1 +U 2 +L 3 +U 2 +D 3 +L 2 +R 1 +D 1 +L 1 +U 2 +D 1 +L 3 +R 2 +D 2 +R 3 +L 3 +D 3 +U 1 +R 1 +L 3 +R 2 +L 1 +U 2 +L 4 +D 1 +L 4 +D 3 +L 3 +D 2 +U 3 +L 3 +D 4 +U 4 +D 4 +L 3 +D 1 +R 4 +D 4 +R 2 +L 3 +D 4 +R 3 +D 3 +R 3 +L 4 +U 3 +R 1 +D 4 +U 2 +R 3 +U 2 +L 4 +R 3 +L 2 +R 4 +L 2 +R 4 +U 2 +R 4 +U 3 +L 3 +D 4 +R 3 +U 4 +R 3 +D 4 +U 2 +D 4 +U 1 +R 1 +U 3 +D 4 +U 2 +D 3 +L 2 +U 4 +L 1 +U 1 +L 1 +U 3 +R 2 +U 1 +R 3 +D 1 +U 2 +R 1 +U 4 +D 3 +L 4 +U 4 +R 1 +D 2 +L 4 +R 3 +U 2 +L 1 +U 1 +L 2 +U 4 +D 1 +L 3 +R 3 +L 3 +R 4 +L 2 +R 4 +U 2 +D 3 +R 4 +L 3 +R 1 +L 3 +D 4 +L 1 +R 4 +U 3 +R 3 +L 4 +D 3 +R 4 +L 4 +R 2 +L 4 +D 4 +R 4 +D 4 +R 4 +L 3 +D 1 +U 4 +R 5 +L 3 +R 3 +L 1 +R 3 +D 3 +U 5 +R 2 +U 4 +D 1 +R 3 +D 1 +R 3 +U 5 +D 5 +U 5 +L 2 +D 1 +U 3 +L 5 +R 1 +D 5 +L 3 +U 5 +L 3 +R 5 +L 1 +U 3 +D 1 +L 5 +R 2 +U 5 +L 1 +D 1 +U 1 +D 5 +L 2 +U 4 +R 2 +D 1 +U 3 +L 3 +D 1 +R 4 +D 3 +U 2 +D 3 +R 5 +U 5 +D 1 +L 3 +U 2 +R 2 +D 3 +U 5 +R 1 +L 4 +D 3 +R 3 +D 4 +L 3 +D 5 +R 5 +D 3 +R 1 +U 3 +R 1 +L 3 +D 3 +L 3 +D 1 +R 1 +U 4 +D 4 +R 2 +D 4 +L 4 +U 5 +L 2 +R 5 +D 5 +R 1 +D 1 +R 1 +L 1 +R 4 +U 4 +L 2 +R 2 +L 5 +D 3 +R 5 +L 5 +D 2 +R 1 +D 2 +R 2 +L 1 +U 1 +R 5 +U 4 +D 2 +U 3 +D 3 +R 4 +L 2 +D 5 +U 5 +L 5 +R 4 +D 1 +U 3 +R 3 +L 6 +U 6 +R 6 +L 2 +D 2 +U 3 +R 4 +D 2 +L 1 +R 1 +L 1 +R 1 +L 4 +U 2 +D 2 +U 4 +R 1 +L 3 +U 1 +L 3 +U 1 +L 3 +D 6 +U 5 +D 2 +L 3 +D 4 +L 3 +U 5 +D 4 +R 3 +L 2 +U 6 +L 3 +D 5 +L 3 +R 2 +D 3 +R 1 +U 4 +D 2 +U 3 +R 5 +D 1 +R 1 +U 5 +L 3 +U 6 +R 1 +U 1 +R 2 +L 3 +D 5 +R 1 +U 5 +L 4 +D 4 +R 5 +L 6 +R 4 +U 3 +R 5 +U 2 +D 4 +R 1 +U 1 +L 6 +D 3 +L 5 +U 4 +R 1 +D 5 +U 3 +D 3 +R 6 +L 3 +D 4 +U 6 +L 3 +D 3 +L 2 +U 1 +R 3 +D 1 +L 3 +U 3 +R 2 +D 2 +L 1 +R 4 +D 6 +U 6 +R 4 +D 6 +R 5 +D 2 +U 1 +L 5 +D 6 +L 2 +U 3 +D 2 +R 4 +L 6 +U 6 +L 3 +D 4 +L 2 +U 3 +R 6 +D 5 +R 7 +L 3 +D 4 +R 5 +U 5 +L 2 +D 6 +R 1 +D 1 +L 6 +D 4 +U 2 +D 4 +R 7 +L 1 +U 4 +R 4 +D 4 +U 5 +D 2 +L 2 +R 6 +U 6 +R 4 +L 6 +U 1 +R 7 +U 3 +L 1 +R 2 +L 4 +D 2 +U 6 +R 1 +U 2 +L 6 +U 6 +L 6 +U 7 +L 3 +D 7 +L 7 +D 6 +U 2 +R 6 +L 7 +R 4 +D 4 +R 2 +U 1 +D 7 +U 6 +L 2 +D 7 +U 2 +R 7 +U 6 +D 3 +L 5 +U 2 +D 4 +R 4 +U 1 +D 2 +L 1 +R 2 +U 6 +R 2 +U 2 +D 2 +L 1 +U 7 +R 6 +L 1 +R 2 +D 1 +R 2 +L 5 +U 7 +R 7 +U 3 +D 1 +R 6 +L 6 +U 1 +D 4 +R 4 +L 1 +R 4 +U 6 +D 7 +L 2 +R 6 +L 1 +D 2 +R 2 +L 4 +D 3 +U 4 +L 5 +R 1 +L 3 +U 2 +D 1 +U 3 +R 7 +D 2 +U 2 +L 7 +R 7 +D 2 +R 4 +L 8 +R 2 +L 5 +D 6 +L 8 +R 3 +D 3 +R 1 +D 6 +U 5 +R 5 +U 8 +R 7 +U 2 +L 2 +R 5 +L 1 +U 6 +D 7 +R 7 +U 5 +R 7 +L 4 +R 4 +U 8 +L 3 +U 2 +D 2 +U 1 +R 1 +U 7 +D 3 +R 2 +D 5 +U 7 +L 8 +R 4 +L 5 +D 1 +U 7 +D 3 +R 7 +U 1 +R 6 +U 4 +L 8 +R 8 +U 5 +L 5 +U 3 +L 7 +D 5 +U 5 +R 8 +U 1 +D 1 +U 1 +R 7 +D 2 +U 2 +D 5 +L 4 +D 4 +U 5 +L 2 +R 5 +U 7 +R 6 +U 5 +L 1 +D 2 +U 8 +L 7 +D 2 +R 2 +D 6 +U 1 +D 3 +L 2 +D 7 +R 3 +D 2 +U 6 +D 6 +U 7 +L 2 +R 8 +U 2 +D 4 +L 3 +R 3 +D 7 +L 5 +U 7 +R 2 +L 8 +R 8 +L 1 +D 6 +L 2 +U 6 +L 8 +D 5 +R 8 +U 1 +R 4 +D 1 +L 7 +U 2 +D 9 +L 5 +U 2 +D 8 +L 6 +D 9 +U 9 +R 1 +D 8 +L 8 +D 9 +U 3 +R 4 +U 6 +D 9 +L 3 +R 1 +U 5 +L 5 +D 5 +L 8 +D 1 +U 9 +L 4 +D 3 +L 9 +R 5 +L 9 +D 5 +L 2 +U 7 +R 6 +D 4 +U 8 +L 7 +D 7 +U 5 +L 9 +R 3 +L 9 +U 4 +L 4 +R 7 +L 5 +R 2 +D 1 +U 2 +R 3 +L 5 +R 9 +L 3 +D 9 +L 9 +U 5 +D 3 +U 6 +D 3 +L 3 +U 5 +D 1 +R 1 +L 8 +R 1 +D 6 +R 2 +U 6 +L 6 +R 3 +D 2 +R 4 +U 6 +R 8 +U 4 +D 8 +R 1 +U 8 +D 4 +L 9 +U 8 +L 2 +U 1 +R 2 +D 7 +R 1 +D 9 +R 3 +L 6 +U 6 +L 2 +R 7 +U 5 +R 8 +L 3 +D 5 +R 3 +U 9 +D 5 +R 5 +U 1 +L 6 +D 2 +R 2 +D 3 +L 2 +U 2 +L 5 +U 9 +L 8 +D 2 +U 7 +R 6 +U 3 +L 8 +U 5 +D 4 +U 4 +R 2 +D 1 +L 7 +U 4 +R 1 +L 3 +D 7 +R 5 +D 8 +R 4 +U 3 +L 3 +D 3 +U 5 +L 3 +D 1 +R 10 +D 4 +U 6 +D 4 +R 7 +U 5 +L 2 +R 5 +D 8 +R 3 +U 6 +R 5 +L 9 +R 7 +D 6 +U 10 +R 10 +D 5 +R 9 +U 4 +R 6 +L 8 +U 5 +L 9 +R 8 +D 2 +U 5 +D 4 +R 3 +D 10 +U 9 +L 5 +U 5 +L 10 +D 7 +U 4 +D 10 +U 1 +D 8 +L 6 +D 9 +R 5 +U 2 +R 3 +U 1 +D 8 +R 3 +U 4 +D 6 +U 10 +D 4 +U 3 +D 5 +R 1 +L 8 +R 9 +D 2 +U 8 +L 1 +R 8 +U 5 +R 9 +U 9 +R 7 +D 5 +L 5 +D 8 +L 7 +U 1 +L 4 +D 2 +R 3 +D 1 +U 2 +L 1 +D 1 +U 6 +R 5 +U 5 +R 6 +L 1 +U 5 +R 5 +U 8 +L 9 +D 2 +R 10 +U 2 +R 6 +U 8 +R 2 +L 11 +U 3 +D 4 +R 6 +L 8 +R 10 +U 10 +R 6 +L 4 +R 11 +U 11 +R 3 +U 11 +L 7 +R 4 +L 7 +U 5 +D 2 +U 8 +R 9 +D 9 +R 1 +U 9 +D 6 +U 3 +D 10 +L 7 +D 8 +R 9 +U 9 +D 7 +L 11 +D 8 +R 8 +U 11 +L 11 +U 4 +D 6 +R 1 +D 8 +R 2 +U 1 +L 11 +R 10 +L 6 +U 8 +L 10 +U 5 +L 11 +U 6 +L 5 +U 10 +R 5 +U 11 +R 6 +D 4 +U 7 +L 11 +D 3 +U 8 +R 8 +L 2 +D 10 +L 5 +D 10 +R 4 +U 3 +L 7 +U 10 +D 4 +U 10 +R 2 +U 1 +D 6 +L 6 +U 7 +D 4 +R 6 +D 11 +L 1 +U 5 +L 1 +D 9 +R 11 +L 8 +D 3 +U 7 +R 9 +D 1 +U 3 +R 1 +L 8 +D 6 +U 9 +D 9 +L 10 +U 8 +D 5 +L 1 +U 2 +D 3 +L 11 +R 3 +L 7 +D 1 +U 8 +D 5 +L 8 +R 7 +L 8 +D 4 +R 7 +D 11 +R 3 +L 1 +R 6 +U 3 +R 11 +L 5 +R 4 +L 1 +D 6 +R 7 +U 2 +L 2 +R 11 +L 1 +D 4 +L 5 +U 3 +R 9 +U 4 +D 10 +U 3 +R 10 +L 4 +R 7 +D 9 +U 11 +D 10 +R 5 +U 6 +L 3 +R 5 +D 1 +R 3 +L 10 +D 4 +U 8 +R 9 +U 5 +R 6 +U 3 +D 2 +R 6 +U 3 +L 3 +R 8 +L 9 +D 6 +U 7 +D 11 +U 12 +R 7 +D 7 +U 12 +L 6 +U 6 +D 3 +L 11 +R 8 +U 10 +L 7 +R 2 +U 8 +L 3 +R 12 +D 4 +L 4 +U 10 +L 9 +R 8 +L 12 +D 3 +R 4 +L 9 +U 4 +L 6 +D 11 +U 3 +R 7 +U 3 +D 3 +U 4 +L 12 +R 11 +U 5 +D 3 +R 7 +U 1 +D 11 +R 7 +L 3 +R 6 +U 10 +L 11 +U 2 +L 11 +U 11 +R 8 +D 12 +U 4 +L 1 +D 3 +R 6 +L 2 +U 4 +D 3 +R 8 +L 2 +D 9 +L 9 +U 8 +R 12 +D 7 +U 13 +R 7 +L 10 +U 6 +L 11 +D 6 +U 13 +R 4 +U 8 +D 7 +U 7 +R 5 +U 2 +R 2 +D 2 +L 6 +D 12 +U 2 +R 4 +U 7 +D 7 +L 13 +R 7 +U 12 +L 11 +U 1 +L 1 +D 7 +U 1 +D 4 +U 10 +D 10 +R 4 +L 13 +R 2 +U 7 +D 5 +R 2 +D 5 +L 13 +R 2 +U 3 +R 9 +U 12 +L 9 +U 9 +R 1 +L 9 +D 9 +R 8 +U 8 +D 8 +U 8 +R 5 +D 7 +R 12 +L 11 +U 1 +D 7 +L 8 +D 3 +R 4 +L 1 +U 2 +R 10 +U 6 +R 8 +U 13 +L 3 +D 1 +R 9 +L 5 +U 5 +L 11 +R 1 +D 8 +U 6 +R 13 +U 4 +L 3 +U 6 +D 12 +R 5 +D 7 +L 4 +D 8 +L 13 +R 13 +U 4 +D 12 +L 1 +U 9 +L 8 +U 11 +R 7 +D 2 +L 11 +U 11 +L 13 +D 6 +R 10 +D 9 +U 8 +R 3 +U 10 +L 8 +U 13 +D 10 +R 2 +D 7 +R 11 +L 10 +D 3 +U 1 +D 13 +L 4 +D 14 +L 14 +U 6 +L 10 +D 7 +L 13 +U 7 +R 14 +D 2 +U 1 +L 12 +R 11 +D 7 +L 9 +D 5 +L 6 +U 11 +D 7 +L 10 +U 11 +L 2 +R 8 +L 2 +U 10 +D 3 +R 14 +D 2 +R 1 +D 2 +U 13 +D 2 +L 5 +D 3 +U 11 +D 8 +R 11 +L 5 +R 10 +U 4 +R 3 +L 9 +U 2 +R 3 +L 5 +U 10 +L 6 +D 8 +R 13 +U 10 +L 13 +U 5 +L 9 +R 14 +U 2 +D 8 +L 3 +R 13 +U 3 +D 12 +R 7 +U 13 +L 2 +U 4 +D 2 +L 13 +U 2 +L 8 +D 10 +U 13 +L 4 +U 1 +D 3 +U 1 +R 8 +L 4 +U 10 +R 2 +U 8 +D 9 +R 10 +D 8 +U 12 +R 11 +L 11 +R 14 +U 5 +R 10 +D 1 +U 6 +D 4 +R 5 +U 11 +D 14 +U 6 +R 7 +D 6 +R 13 +D 7 +R 14 +D 15 +R 6 +D 13 +L 7 +U 9 +L 1 +R 12 +U 8 +L 14 +D 4 +R 8 +L 13 +D 3 +U 9 +D 13 +L 5 +R 9 +U 12 +D 8 +U 11 +L 8 +R 13 +D 6 +R 8 +D 13 +R 4 +D 6 +L 4 +D 13 +U 2 +D 3 +R 1 +L 15 +D 11 +L 8 +D 8 +L 7 +R 1 +D 12 +R 7 +D 2 +U 3 +L 9 +D 1 +R 8 +L 2 +D 9 +L 2 +U 2 +R 4 +L 11 +U 6 +D 11 +L 2 +U 7 +D 7 +U 11 +R 9 +U 4 +R 14 +L 9 +D 5 +R 5 +D 4 +R 1 +D 15 +U 5 +R 8 +U 10 +R 1 +L 1 +U 11 +L 11 +U 15 +R 5 +D 5 +U 3 +L 5 +U 5 +L 5 +D 15 +U 7 +D 13 +R 3 +L 9 +U 12 +L 3 +U 13 +R 1 +U 2 +R 4 +D 9 +L 6 +R 8 +D 13 +L 14 +R 9 +D 10 +L 15 +U 14 +R 14 +U 4 +R 13 +D 12 +L 5 +D 5 +L 13 +U 15 +D 13 +L 12 +U 6 +D 10 +U 10 +L 2 +R 9 +D 5 +U 5 +D 16 +R 12 +D 2 +R 15 +L 1 +D 9 +L 14 +R 9 +L 10 +R 6 +D 16 +L 9 +U 4 +D 1 +U 7 +R 12 +D 2 +R 1 +D 5 +R 15 +L 16 +U 14 +D 16 +L 6 +U 11 +L 16 +R 8 +L 2 +U 16 +R 1 +U 8 +R 16 +D 10 +L 2 +D 14 +U 4 +L 12 +D 9 +R 4 +D 13 +R 1 +U 3 +R 7 +L 3 +U 12 +R 15 +D 16 +R 13 +L 1 +D 16 +U 14 +R 5 +L 7 +R 12 +U 3 +L 14 +R 6 +U 11 +R 14 +L 12 +U 11 +R 6 +L 1 +D 1 +U 5 +D 14 +L 10 +R 1 +U 4 +R 11 +U 16 +D 12 +R 7 +U 2 +R 1 +D 15 +U 16 +D 7 +L 2 +D 3 +R 1 +D 6 +U 16 +D 12 +U 14 +R 13 +U 13 +L 14 +D 5 +U 1 +L 8 +R 7 +L 9 +D 11 +R 10 +D 16 +R 16 +U 10 +R 14 +L 1 +D 7 +U 2 +R 7 +D 15 +R 16 +U 8 +D 12 +U 17 +R 12 +U 7 +R 6 +L 7 +D 8 +R 4 +U 4 +D 14 +U 17 +D 11 +U 3 +R 1 +D 15 +R 11 +D 13 +L 13 +R 9 +L 1 +U 3 +R 12 +L 9 +U 3 +L 17 +D 15 +R 6 +U 9 +R 16 +L 11 +U 3 +L 5 +D 9 +R 6 +U 12 +R 2 +U 4 +L 11 +U 2 +R 11 +D 4 +L 16 +U 2 +R 10 +U 16 +L 12 +D 9 +U 6 +D 16 +L 6 +R 9 +U 14 +D 14 +U 4 +D 14 +R 16 +L 9 +D 14 +R 4 +U 9 +D 11 +R 8 +D 9 +U 1 +D 3 +R 15 +D 10 +R 13 +D 6 +U 2 +R 8 +U 7 +L 2 +R 10 +D 7 +U 10 +R 3 +L 9 +R 1 +D 2 +U 6 +L 17 +U 16 +L 6 +U 16 +L 1 +R 11 +D 16 +R 2 +L 4 +R 6 +L 9 +R 2 +D 11 +U 8 +D 3 +L 15 +D 17 +U 5 +L 3 +D 15 +L 3 +U 12 +R 15 +U 9 +L 11 +D 3 +R 3 +U 12 +R 11 +D 13 +R 7 +U 11 +L 15 +D 5 +L 15 +D 13 +U 10 +R 17 +D 7 +L 16 +R 2 +L 9 +R 13 +L 4 +R 6 +D 9 +L 17 +D 12 +R 14 +U 3 +D 2 +R 6 +U 14 +D 15 +U 7 +L 17 +U 14 +L 8 +U 15 +R 13 +U 3 +R 10 +D 11 +L 14 +U 18 +R 13 +U 13 +R 2 +D 3 +R 5 +U 16 +R 16 +D 13 +U 3 +R 14 +D 17 +U 4 +L 18 +U 8 +R 6 +U 12 +R 17 +L 18 +U 17 +R 18 +D 10 +U 17 +D 2 +R 2 +D 9 +U 13 +R 15 +L 13 +R 8 +D 6 +U 4 +R 12 +U 15 +D 8 +L 16 +D 6 +L 15 +U 8 +L 10 +D 18 +R 8 +U 2 +D 17 +U 8 +R 18 +D 6 +U 7 +L 15 +U 16 +R 16 +D 11 +U 7 +D 12 +R 7 +U 5 +L 16 +D 7 +L 14 +U 1 +L 11 +D 1 +U 17 +R 1 +U 18 +R 1 +U 11 +D 18 +U 16 +R 14 +U 12 +L 5 +D 5 +L 7 +U 10 +R 2 +D 4 +L 10 +R 9 +D 2 +L 17 +R 15 +L 6 +R 2 +D 6 +L 9 +R 10 +L 4 +D 2 +R 12 +D 1 +R 16 +U 15 +D 15 +L 10 +D 16 +L 16 +U 18 +L 5 +R 8 +L 16 +R 10 +D 7 +U 2 +D 8 +U 11 +R 1 +U 1 +L 14 +D 11 +R 8 +U 18 +L 4 +R 14 +L 7 +U 6 +L 17 +U 10 +L 4 +U 6 +L 6 +R 8 +L 15 +D 2 +R 5 +L 13 +D 1 +R 6 +L 11 +U 15 +L 16 +D 13 +R 11 +U 4 +R 1 +L 10 +U 16 +L 2 +R 11 +L 5 +D 19 +R 15 +L 5 +U 17 +R 19 +D 2 +R 9 +U 11 +L 19 +U 16 +D 16 +R 5 +D 13 +U 18 +D 3 +R 15 +U 12 +L 1 +D 11 +U 2 +R 13 +D 1 +R 2 +D 7 +R 2 +U 17 +R 8 +L 2 +U 2 +R 12 +L 2 +R 1 +D 5 +U 7 +L 5 +U 10 +L 14 +R 15 +D 19 +L 13 +U 4 +L 8 +U 8 +L 7 +D 5 +R 17 +U 8 diff --git a/2022/rust/src/main.rs b/2022/rust/src/main.rs index a8c6e06..f0faa52 100644 --- a/2022/rust/src/main.rs +++ b/2022/rust/src/main.rs @@ -5,5 +5,5 @@ mod solutions; fn main() { - solutions::day08::run(); + solutions::day09::run(); } diff --git a/2022/rust/src/solutions/day09.rs b/2022/rust/src/solutions/day09.rs new file mode 100644 index 0000000..35d5299 --- /dev/null +++ b/2022/rust/src/solutions/day09.rs @@ -0,0 +1,100 @@ +use std::collections::HashSet; +use crate::utils; + + +pub fn run() -> () { + let data = parse_data(&utils::read_lines(utils::Source::Day(9))); + + println!("Day 9"); + println!("Part 1: {}", solve1(&data)); + println!("Part 2: {}", solve2(&data)); +} + + +enum Direction { U, D, L, R } + +struct Move { + direction: Direction, + units: i32 +} + + +fn fix_tail(head: (i32, i32), tail: (i32, i32), direction: &Direction) -> Option<(i32, i32)> { + let diff_x = head.0.abs_diff(tail.0); + let diff_y = head.1.abs_diff(tail.1); + match (diff_y > 1, diff_x > 1, direction) { + (true, _, Direction::U) => Some((head.0, head.1 - 1)), + (true, _, Direction::D) => Some((head.0, head.1 + 1)), + (_, true, Direction::L) => Some((head.0 + 1, head.1)), + (_, true, Direction::R) => Some((head.0 - 1, head.1)), + (_, _, _) => None, + } +} + +fn tail_visits(data: &[Move]) -> HashSet<(i32, i32)> { + let mut set = HashSet::from([(0, 0)]); + let mut head = (0, 0); + let mut tail = (0, 0); + for m in data { + for _ in 0..m.units { + match m.direction { + Direction::U => head = (head.0, head.1 + 1), + Direction::D => head = (head.0, head.1 - 1), + Direction::L => head = (head.0 - 1, head.1), + Direction::R => head = (head.0 + 1, head.1), + } + if let Some(new) = fix_tail(head, tail, &m.direction) { + set.insert(new); + tail = new + } + } + }; + set +} + +fn solve1(data: &[Move]) -> usize { + tail_visits(&data).len() +} + +fn solve2(data: &[Move]) -> i32 { + 2 +} + + +fn parse_data>(data: &[T]) -> Vec { + data.iter() + .map(|s| { + let mut s = s.as_ref().split_whitespace().into_iter(); + Move { + direction: match s.next().unwrap() { + "U" => Direction::U, + "D" => Direction::D, + "L" => Direction::L, + "R" => Direction::R, + _ => unreachable!() + }, + units: s.next().unwrap().parse().unwrap(), + } + }) + .collect() +} + + +#[cfg(test)] +mod tests { + use super::*; + + static DATA: &[&str; 8] = &["R 4", "U 4", "L 3", "D 1", "R 4", "D 1", "L 5", "R 2"]; + + #[test] + fn part1() { + let data = parse_data(DATA); + assert_eq!(13, solve1(&data)); + } + + #[test] + fn part2() { + let data = parse_data(DATA); + assert_eq!(2, solve2(&data)); + } +} diff --git a/2022/rust/src/solutions/mod.rs b/2022/rust/src/solutions/mod.rs index 9ac735a..a8fc1a9 100644 --- a/2022/rust/src/solutions/mod.rs +++ b/2022/rust/src/solutions/mod.rs @@ -6,3 +6,4 @@ pub mod day05; pub mod day06; pub mod day07; pub mod day08; +pub mod day09;