diff --git a/src/aoc2022/day09/input.txt b/src/aoc2022/day09/input.txt new file mode 100644 index 0000000..e23b58c --- /dev/null +++ b/src/aoc2022/day09/input.txt @@ -0,0 +1,2001 @@ +D 2 +L 2 +U 1 +L 1 +U 2 +R 1 +L 1 +D 2 +U 2 +R 2 +U 1 +L 2 +R 1 +D 1 +L 2 +R 1 +U 2 +L 1 +U 1 +D 1 +R 1 +U 2 +D 2 +L 1 +D 1 +U 1 +L 1 +U 1 +D 2 +U 1 +L 2 +D 1 +L 1 +D 2 +U 1 +D 2 +R 1 +L 2 +R 1 +U 1 +R 2 +U 2 +D 2 +R 1 +D 1 +R 1 +U 2 +D 1 +U 2 +D 2 +L 1 +D 2 +R 2 +U 1 +L 1 +R 1 +U 2 +D 2 +R 1 +D 2 +U 1 +L 2 +R 1 +L 2 +D 2 +U 2 +D 2 +L 2 +U 1 +L 1 +D 2 +L 1 +R 2 +U 2 +D 1 +R 1 +U 2 +D 2 +U 1 +R 2 +L 1 +R 1 +L 1 +U 2 +D 2 +L 2 +D 1 +L 2 +U 2 +R 2 +L 1 +D 1 +L 2 +U 1 +L 2 +D 2 +L 2 +D 2 +R 2 +L 2 +R 1 +D 1 +L 2 +U 2 +L 2 +R 1 +D 1 +R 1 +D 2 +R 1 +U 2 +R 3 +U 1 +D 2 +U 3 +R 2 +U 3 +D 3 +U 1 +L 3 +R 1 +U 1 +D 2 +U 1 +D 2 +R 1 +L 3 +R 1 +L 3 +D 1 +L 2 +D 3 +U 2 +R 3 +D 2 +L 2 +D 1 +U 2 +R 2 +L 3 +R 3 +L 1 +R 1 +U 3 +D 3 +L 2 +U 2 +L 2 +R 1 +U 2 +L 2 +D 3 +R 2 +U 2 +L 3 +D 1 +R 1 +U 2 +R 3 +D 2 +U 3 +D 1 +R 2 +L 2 +D 1 +U 3 +L 1 +D 2 +L 1 +R 2 +L 1 +R 1 +D 3 +L 3 +R 2 +L 2 +R 3 +D 3 +U 1 +L 3 +D 1 +R 2 +L 2 +R 1 +D 3 +R 1 +L 2 +R 3 +U 2 +R 3 +L 3 +D 3 +L 3 +D 1 +U 1 +R 1 +U 3 +D 1 +U 2 +D 3 +R 3 +U 1 +L 3 +D 3 +U 1 +R 2 +D 1 +R 3 +D 2 +R 1 +L 2 +D 3 +L 2 +R 2 +D 3 +U 3 +L 1 +U 3 +L 2 +R 2 +L 1 +U 3 +D 1 +R 3 +U 4 +D 1 +L 2 +R 2 +U 2 +R 2 +D 2 +U 1 +R 2 +D 1 +R 4 +L 4 +D 1 +U 2 +L 2 +D 1 +R 2 +L 3 +U 4 +L 1 +R 2 +D 2 +L 1 +R 1 +D 2 +U 1 +L 2 +R 1 +D 2 +L 3 +R 4 +D 3 +U 1 +R 4 +L 1 +D 3 +R 1 +D 1 +L 3 +R 1 +U 4 +L 1 +R 3 +L 3 +R 1 +U 3 +R 3 +U 3 +L 2 +R 4 +D 3 +L 1 +U 1 +D 3 +U 3 +D 3 +U 1 +R 2 +U 2 +D 2 +U 1 +D 3 +L 2 +D 1 +U 3 +D 2 +U 3 +L 2 +U 2 +R 3 +U 4 +D 2 +R 3 +L 2 +D 2 +R 4 +U 2 +R 3 +L 2 +U 3 +R 1 +U 1 +L 2 +D 2 +U 3 +L 2 +R 4 +U 1 +R 3 +U 1 +R 4 +L 2 +R 4 +D 3 +U 3 +R 3 +L 3 +U 3 +D 4 +R 3 +U 3 +L 4 +D 4 +U 4 +L 4 +R 1 +U 3 +L 3 +U 1 +R 1 +D 5 +R 2 +L 3 +U 2 +D 2 +L 2 +R 3 +D 3 +L 2 +R 2 +L 5 +R 1 +L 5 +D 2 +R 3 +U 5 +L 4 +R 3 +L 3 +U 1 +R 1 +D 4 +U 5 +L 4 +U 2 +L 4 +D 1 +L 5 +U 5 +R 3 +L 1 +U 2 +L 2 +D 2 +L 3 +D 5 +U 3 +R 3 +U 2 +D 2 +U 1 +R 4 +U 4 +L 3 +R 2 +L 4 +U 4 +D 2 +L 2 +D 3 +U 5 +D 4 +L 5 +D 3 +R 3 +U 5 +R 2 +L 1 +U 1 +L 5 +D 1 +R 5 +L 3 +U 2 +L 1 +R 5 +U 2 +R 4 +U 2 +R 4 +L 2 +U 5 +R 5 +U 2 +R 3 +D 2 +L 3 +R 5 +D 5 +L 5 +D 2 +L 5 +R 4 +U 1 +R 3 +D 1 +U 5 +R 1 +U 3 +L 1 +R 4 +D 5 +L 4 +D 1 +U 3 +R 4 +L 3 +R 5 +L 5 +D 3 +L 1 +D 5 +U 3 +D 3 +U 1 +R 4 +L 5 +R 1 +U 5 +D 2 +L 2 +D 1 +U 6 +R 6 +D 6 +U 5 +R 6 +D 4 +R 3 +L 3 +U 2 +L 5 +U 6 +R 4 +U 3 +L 4 +R 3 +L 1 +D 3 +U 4 +D 4 +R 4 +U 6 +D 2 +R 1 +U 3 +D 1 +L 1 +D 4 +L 5 +D 4 +L 4 +D 5 +L 5 +U 1 +R 1 +U 6 +R 2 +U 2 +R 3 +U 2 +L 4 +U 5 +D 1 +L 6 +U 2 +L 2 +U 3 +L 1 +R 5 +U 1 +R 2 +L 1 +R 1 +D 5 +L 5 +D 5 +L 3 +R 4 +L 5 +U 3 +D 1 +U 3 +L 5 +R 2 +D 4 +R 6 +L 4 +D 5 +U 5 +L 6 +U 3 +R 1 +L 5 +D 2 +R 4 +U 4 +D 2 +L 5 +U 4 +D 1 +U 3 +D 3 +R 3 +U 1 +D 3 +U 4 +D 3 +R 6 +D 4 +L 6 +D 5 +U 1 +R 2 +D 5 +R 3 +L 2 +D 2 +U 2 +D 6 +L 6 +U 2 +L 5 +R 2 +U 5 +L 6 +R 4 +D 3 +R 3 +U 3 +L 3 +U 5 +D 2 +L 3 +U 7 +L 6 +U 2 +R 6 +D 5 +U 5 +D 5 +R 1 +L 1 +R 6 +L 6 +R 3 +U 1 +D 1 +U 2 +R 7 +U 4 +R 6 +D 4 +L 6 +U 7 +R 1 +L 1 +D 2 +L 6 +D 3 +L 4 +D 3 +U 6 +D 3 +U 3 +R 1 +U 6 +D 5 +L 5 +D 5 +U 2 +D 7 +L 3 +R 4 +D 2 +R 1 +D 4 +U 1 +D 6 +U 1 +R 2 +U 6 +R 4 +L 2 +U 1 +R 4 +D 2 +L 1 +U 3 +L 3 +D 5 +L 6 +D 3 +R 3 +D 1 +L 1 +D 6 +L 3 +U 4 +D 7 +U 2 +L 3 +U 1 +L 6 +U 4 +D 6 +L 3 +R 7 +U 2 +R 5 +D 1 +L 6 +D 6 +U 3 +D 2 +L 6 +U 3 +L 3 +R 3 +U 3 +L 4 +D 3 +U 1 +L 6 +U 2 +D 2 +U 5 +L 4 +D 6 +L 3 +R 7 +D 2 +U 1 +R 1 +D 3 +U 2 +L 7 +D 4 +U 6 +D 6 +U 2 +D 5 +L 4 +D 4 +L 7 +R 1 +D 4 +U 8 +L 1 +D 1 +U 4 +R 3 +L 4 +R 8 +L 1 +U 2 +L 6 +U 7 +D 5 +R 4 +L 5 +U 1 +D 6 +L 6 +D 7 +R 5 +U 4 +D 7 +U 7 +R 5 +L 2 +D 5 +L 5 +U 3 +R 7 +U 6 +R 6 +D 5 +R 4 +L 7 +U 6 +R 6 +U 1 +R 4 +U 7 +R 8 +D 1 +L 3 +R 6 +L 2 +U 7 +R 7 +U 3 +R 7 +D 1 +U 8 +R 2 +L 4 +U 1 +D 6 +R 5 +U 8 +L 8 +U 4 +D 8 +L 8 +U 3 +R 7 +L 3 +U 2 +R 6 +L 5 +R 2 +L 1 +R 8 +D 7 +R 5 +D 3 +U 3 +R 2 +U 2 +L 4 +D 2 +U 1 +R 2 +D 3 +U 7 +L 4 +D 5 +L 6 +D 3 +R 1 +D 7 +U 8 +R 3 +D 5 +R 5 +D 7 +U 3 +R 1 +L 2 +U 8 +R 6 +D 1 +U 7 +D 3 +U 2 +R 3 +D 7 +R 2 +D 4 +R 5 +U 1 +D 8 +U 1 +D 1 +R 4 +D 1 +L 1 +U 3 +L 3 +U 7 +R 1 +L 7 +U 1 +R 5 +U 9 +R 1 +U 5 +R 6 +U 7 +R 1 +D 9 +L 9 +R 6 +U 3 +L 6 +R 8 +L 1 +U 5 +L 9 +R 2 +U 4 +L 9 +D 8 +R 8 +U 6 +D 8 +U 8 +L 5 +U 7 +R 6 +U 5 +R 2 +L 7 +U 9 +D 2 +U 9 +R 7 +L 9 +R 5 +L 1 +U 4 +D 3 +L 3 +D 9 +L 5 +R 9 +U 8 +D 9 +U 6 +R 4 +D 3 +U 9 +L 9 +U 8 +L 6 +R 9 +L 8 +R 1 +L 4 +D 8 +L 1 +R 5 +L 1 +R 7 +D 2 +L 2 +D 4 +R 7 +U 9 +R 3 +L 2 +R 1 +D 9 +R 1 +U 6 +D 7 +U 4 +D 8 +L 6 +D 8 +L 4 +U 5 +R 6 +U 9 +R 7 +U 1 +R 5 +D 1 +R 9 +D 1 +R 7 +D 2 +U 2 +R 5 +U 9 +R 4 +U 4 +R 2 +D 9 +R 7 +D 3 +U 1 +L 2 +R 3 +U 7 +L 5 +R 2 +U 10 +D 4 +U 7 +L 6 +R 5 +L 10 +U 2 +D 7 +L 9 +D 8 +R 5 +L 9 +D 2 +R 10 +U 8 +D 10 +L 2 +D 6 +R 6 +L 3 +R 10 +D 7 +U 2 +D 7 +R 1 +U 9 +D 1 +R 10 +L 6 +U 1 +L 9 +U 7 +R 1 +U 1 +D 7 +U 6 +L 2 +R 8 +L 5 +D 3 +R 7 +L 2 +D 10 +R 1 +D 9 +L 10 +R 3 +L 8 +D 1 +R 5 +U 9 +L 10 +R 9 +L 5 +D 7 +R 7 +L 6 +D 3 +R 10 +L 3 +D 6 +L 9 +D 10 +R 2 +L 10 +U 9 +R 3 +U 9 +R 9 +L 3 +U 6 +R 6 +D 3 +R 10 +L 8 +D 3 +L 8 +U 8 +D 4 +R 1 +L 2 +D 1 +U 9 +D 8 +R 8 +U 10 +D 2 +U 7 +R 3 +L 2 +D 2 +R 1 +U 5 +L 7 +R 6 +D 10 +U 8 +D 8 +L 9 +D 1 +L 6 +U 6 +L 10 +U 10 +D 8 +U 2 +R 2 +L 6 +R 6 +U 11 +R 3 +D 1 +U 8 +R 4 +L 6 +U 3 +L 5 +D 9 +U 8 +L 11 +D 4 +R 5 +D 8 +U 9 +R 7 +L 10 +U 6 +L 9 +U 8 +D 5 +R 7 +D 3 +U 7 +R 7 +D 2 +U 3 +D 1 +U 3 +D 6 +U 11 +R 8 +L 3 +D 5 +L 6 +D 2 +R 4 +U 6 +R 3 +L 11 +D 4 +R 3 +L 9 +R 3 +L 1 +D 11 +R 6 +D 6 +U 4 +L 3 +R 10 +L 6 +D 8 +U 2 +D 7 +L 10 +R 8 +D 5 +L 10 +D 11 +L 6 +D 10 +L 9 +D 2 +R 10 +D 9 +U 9 +D 2 +R 10 +D 9 +U 10 +L 3 +U 1 +D 6 +L 5 +U 5 +R 10 +L 3 +D 6 +R 9 +L 1 +D 5 +U 10 +R 5 +L 9 +U 3 +R 5 +U 3 +D 6 +R 11 +D 9 +L 6 +R 5 +D 3 +R 7 +D 6 +R 1 +U 3 +L 4 +U 8 +R 8 +L 3 +U 4 +R 3 +U 5 +L 10 +D 6 +U 2 +R 1 +D 11 +R 7 +L 7 +D 1 +L 11 +D 2 +R 10 +D 5 +L 6 +D 9 +L 9 +D 2 +U 6 +L 5 +R 3 +U 6 +D 3 +U 3 +D 4 +R 10 +L 8 +D 5 +R 8 +D 10 +L 7 +D 4 +L 10 +R 10 +U 11 +L 4 +U 1 +D 12 +U 8 +L 5 +R 5 +L 9 +U 1 +L 4 +R 4 +L 6 +D 11 +L 9 +U 10 +D 4 +L 6 +U 7 +R 10 +L 3 +U 4 +D 12 +U 9 +D 4 +L 5 +D 11 +R 6 +D 1 +L 4 +U 5 +D 1 +U 8 +D 8 +R 6 +L 4 +D 4 +U 1 +L 1 +R 11 +L 2 +R 4 +L 9 +U 3 +D 6 +U 2 +R 6 +U 4 +R 4 +D 12 +R 4 +U 11 +L 7 +R 2 +U 12 +R 2 +D 12 +R 9 +L 2 +R 9 +L 5 +U 1 +R 5 +U 12 +L 9 +U 7 +R 12 +D 12 +L 12 +D 7 +L 2 +D 9 +U 10 +R 10 +U 3 +R 9 +D 10 +U 4 +L 3 +U 1 +D 2 +L 10 +U 2 +L 10 +U 6 +R 1 +D 5 +U 2 +L 8 +U 12 +R 10 +U 11 +D 10 +U 13 +D 6 +R 11 +L 9 +U 4 +D 5 +L 9 +U 4 +L 5 +D 10 +U 4 +L 9 +R 6 +D 8 +U 10 +R 6 +L 5 +R 13 +L 6 +R 3 +U 11 +L 1 +U 6 +D 6 +U 8 +D 11 +R 3 +L 7 +R 8 +L 11 +R 3 +U 3 +L 2 +R 2 +D 12 +R 3 +U 6 +R 1 +U 11 +R 9 +U 6 +R 12 +L 7 +D 12 +L 6 +R 8 +D 12 +L 1 +R 12 +D 10 +R 2 +U 7 +L 5 +D 6 +U 6 +D 2 +R 13 +U 1 +D 3 +U 5 +R 12 +L 1 +D 12 +R 2 +D 8 +L 12 +R 5 +L 13 +U 4 +R 4 +L 4 +R 12 +U 7 +D 3 +L 12 +R 2 +D 5 +L 13 +D 1 +L 8 +U 13 +L 10 +U 5 +R 10 +U 3 +L 8 +R 4 +L 10 +D 3 +U 4 +D 6 +L 6 +R 11 +U 3 +D 5 +L 4 +R 1 +U 3 +R 2 +L 12 +R 5 +D 7 +L 2 +U 9 +R 5 +D 2 +U 10 +D 7 +L 14 +U 1 +R 1 +D 2 +U 7 +L 13 +R 13 +D 8 +L 3 +U 11 +R 8 +U 8 +D 9 +U 10 +R 2 +D 3 +U 14 +R 12 +L 13 +R 2 +D 13 +R 5 +D 10 +R 12 +D 5 +R 13 +D 4 +L 3 +U 1 +L 5 +R 4 +L 12 +U 5 +D 11 +U 6 +L 1 +D 9 +R 9 +U 1 +R 9 +D 14 +R 6 +L 4 +R 8 +L 9 +R 7 +L 1 +D 8 +R 1 +L 12 +D 12 +L 9 +U 11 +D 1 +R 9 +U 7 +R 14 +D 5 +R 7 +U 5 +D 4 +R 6 +D 1 +L 12 +U 8 +D 4 +L 2 +U 4 +L 6 +U 2 +D 4 +L 11 +U 5 +R 1 +U 5 +D 3 +U 12 +L 1 +D 3 +L 14 +D 6 +R 9 +U 7 +L 14 +D 10 +L 11 +R 1 +D 11 +R 7 +D 8 +U 14 +L 9 +D 11 +R 8 +D 6 +R 11 +D 12 +R 12 +D 7 +L 14 +R 14 +D 13 +R 5 +L 11 +R 3 +L 15 +R 12 +D 9 +L 8 +R 15 +U 3 +L 3 +D 5 +R 13 +U 4 +L 4 +U 1 +L 3 +R 6 +L 9 +R 13 +D 9 +R 14 +U 3 +L 7 +R 2 +L 15 +R 6 +L 12 +U 1 +L 9 +D 7 +R 8 +L 12 +R 2 +U 3 +R 1 +L 10 +U 2 +L 6 +R 3 +D 14 +L 11 +D 10 +U 4 +D 1 +R 15 +D 8 +R 3 +U 3 +R 2 +U 3 +L 2 +R 11 +D 15 +R 4 +U 14 +D 11 +L 12 +R 6 +D 14 +L 5 +D 3 +R 5 +D 9 +R 2 +D 11 +R 5 +D 10 +R 13 +L 11 +U 13 +R 6 +U 13 +R 13 +U 1 +L 8 +R 12 +D 15 +R 10 +U 1 +R 9 +L 8 +R 5 +D 6 +U 3 +L 5 +R 6 +D 8 +R 14 +D 3 +U 8 +L 7 +U 2 +D 2 +U 13 +D 6 +U 5 +L 8 +U 9 +D 10 +U 15 +D 14 +L 14 +U 1 +L 13 +R 10 +U 15 +R 13 +D 8 +U 8 +R 11 +L 12 +U 5 +D 6 +R 8 +D 13 +L 9 +R 8 +D 9 +R 2 +D 1 +L 9 +U 5 +R 12 +U 1 +D 10 +U 1 +R 15 +D 4 +U 6 +D 7 +U 11 +D 5 +L 6 +D 10 +U 14 +R 12 +L 15 +U 4 +D 12 +U 6 +D 1 +R 11 +D 16 +U 10 +D 2 +R 12 +L 16 +D 10 +U 8 +D 7 +R 16 +D 15 +U 2 +D 13 +R 10 +D 12 +R 8 +L 16 +D 13 +U 12 +L 7 +R 16 +L 8 +R 16 +U 11 +R 11 +L 16 +U 6 +L 15 +D 3 +R 13 +D 8 +L 8 +D 12 +L 4 +U 11 +R 7 +L 9 +D 13 +U 1 +R 12 +L 9 +D 14 +L 9 +D 9 +R 3 +L 5 +D 8 +L 11 +U 4 +R 10 +D 1 +L 2 +R 11 +U 12 +L 15 +D 5 +U 16 +R 13 +D 14 +R 16 +U 13 +D 8 +L 6 +D 5 +R 14 +D 12 +U 1 +R 2 +D 9 +L 13 +R 6 +D 3 +R 12 +L 12 +U 9 +D 12 +R 15 +L 8 +R 12 +D 10 +U 2 +D 11 +L 4 +R 14 +L 7 +D 5 +R 11 +U 9 +D 2 +U 5 +D 8 +R 11 +L 15 +D 12 +U 14 +R 9 +L 11 +R 2 +D 7 +R 3 +U 6 +R 9 +U 6 +L 10 +R 16 +U 12 +R 14 +D 2 +R 7 +D 10 +L 6 +U 14 +R 15 +U 10 +L 2 +D 7 +U 6 +R 16 +D 15 +L 10 +D 6 +R 8 +D 4 +U 17 +D 10 +R 11 +U 2 +D 8 +R 14 +U 10 +L 7 +R 17 +L 4 +R 7 +U 16 +R 5 +U 1 +D 11 +L 11 +R 9 +U 9 +R 5 +U 3 +D 8 +L 3 +R 3 +U 3 +D 8 +R 9 +U 12 +L 14 +R 15 +U 5 +D 1 +U 14 +D 11 +L 4 +U 17 +R 16 +L 12 +D 16 +U 10 +R 13 +L 7 +U 5 +D 4 +R 3 +U 11 +L 5 +R 1 +L 7 +D 10 +L 17 +R 2 +L 1 +R 7 +U 11 +R 14 +D 13 +U 4 +D 7 +R 4 +U 1 +R 9 +D 16 +R 1 +U 5 +D 4 +R 7 +D 8 +L 14 +D 16 +R 11 +L 12 +D 14 +U 8 +D 9 +U 5 +R 11 +L 8 +D 15 +U 2 +L 6 +D 11 +U 1 +R 12 +L 6 +D 6 +U 14 +D 15 +U 13 +D 2 +U 16 +R 10 +U 10 +D 2 +L 1 +U 13 +R 18 +U 2 +R 7 +L 1 +D 13 +R 10 +L 8 +U 8 +R 5 +U 18 +R 9 +U 12 +R 5 +U 5 +D 8 +L 5 +U 4 +L 15 +R 12 +D 14 +R 13 +D 5 +L 14 +D 16 +U 12 +D 13 +U 2 +D 9 +U 4 +D 13 +U 8 +D 10 +R 10 +L 2 +D 18 +L 9 +R 14 +U 6 +L 15 +U 5 +D 14 +R 4 +U 3 +R 8 +U 17 +L 16 +U 4 +D 12 +R 1 +U 1 +L 1 +U 16 +D 17 +U 3 +L 12 +R 9 +U 10 +R 12 +D 15 +U 16 +D 2 +L 17 +D 9 +L 7 +U 10 +L 6 +R 8 +D 7 +R 4 +L 16 +D 1 +L 16 +R 6 +D 3 +R 11 +U 3 +L 14 +D 7 +L 1 +D 13 +U 16 +R 15 +L 4 +U 3 +L 4 +U 7 +R 5 +D 4 +R 3 +D 9 +U 18 +L 8 +R 2 +D 2 +L 14 +U 9 +R 1 +L 19 +R 1 +L 16 +U 9 +R 11 +U 15 +L 14 +U 5 +D 19 +R 2 +D 8 +L 14 +D 7 +L 17 +U 19 +R 19 +U 4 +R 6 +L 5 +D 9 +L 19 +D 13 +R 19 +L 5 +U 13 +L 13 +U 6 +D 7 +R 1 +U 7 +D 15 +U 9 +R 15 +U 6 +L 2 +D 19 +U 7 +R 6 +U 12 +D 4 +U 13 +L 17 +U 14 +L 13 +U 2 +R 10 +L 6 +U 6 +D 9 +R 9 +L 8 +R 10 +D 4 +L 8 +R 10 +D 5 +L 11 +R 16 +U 10 +L 2 +R 13 +D 15 +U 2 +R 13 +L 17 +U 6 +L 1 +D 9 +U 2 +L 2 +R 14 +U 15 +D 15 +U 18 +R 16 +U 5 +L 18 +R 7 +U 14 +D 9 +U 2 +D 2 +U 17 +D 6 +U 1 +L 3 +R 3 +L 10 +R 2 +L 2 +D 8 +U 2 +L 16 +U 2 +D 11 +U 3 +L 18 +D 12 +R 19 +D 11 +U 1 +D 17 +U 6 + diff --git a/src/aoc2022/day09/mod.rs b/src/aoc2022/day09/mod.rs new file mode 100644 index 0000000..fe3ffc8 --- /dev/null +++ b/src/aoc2022/day09/mod.rs @@ -0,0 +1,168 @@ +use std::collections::HashMap; + +fn move_tail(head: &(isize, isize), mut tail: (isize, isize)) -> (isize, isize) { + if head.0 == tail.0 && head.1 == tail.1 { + // same spot, wich is fine + } else if head.1 == tail.1 { + // x coords are different -> horizontal movement + if tail.0 + 2 == head.0 { + tail.0 = tail.0 + 1; + } else if tail.0 - 2 == head.0 { + tail.0 = tail.0 - 1; + } + } else if head.0 == tail.0 { + // y coords are different -> vertical movement + if tail.1 + 2 == head.1 { + tail.1 = tail.1 + 1; + } else if tail.1 - 2 == head.1 { + tail.1 = tail.1 - 1; + } + } else { + // both coords are different -> horizontal and vertical movement + if head.0 == tail.0 + 1 { + if head.1 == tail.1 + 2 { + tail.0 = tail.0 + 1; + tail.1 = tail.1 + 1; + } else if head.1 == tail.1 - 2 { + tail.0 = tail.0 + 1; + tail.1 = tail.1 - 1; + } + } else if head.0 == tail.0 - 1 { + if head.1 == tail.1 + 2 { + tail.0 = tail.0 - 1; + tail.1 = tail.1 + 1; + } else if head.1 == tail.1 - 2 { + tail.0 = tail.0 - 1; + tail.1 = tail.1 - 1; + } + } else if head.0 == tail.0 + 2 { + if head.1 == tail.1 + 1 { + tail.0 = tail.0 + 1; + tail.1 = tail.1 + 1; + } else if head.1 == tail.1 - 1 { + tail.0 = tail.0 + 1; + tail.1 = tail.1 - 1; + } + } else if head.0 == tail.0 - 2 { + if head.1 == tail.1 + 1 { + tail.0 = tail.0 - 1; + tail.1 = tail.1 + 1; + } else if head.1 == tail.1 - 1 { + tail.0 = tail.0 - 1; + tail.1 = tail.1 - 1; + } + } + } + + tail +} +pub fn task_one(input: &str) -> String { + let mut visited_places: HashMap<(isize, isize), u8> = HashMap::new(); + let mut head = (0, 0); + let mut tail = (0, 0); + + visited_places.insert(tail, 0); + + for line in input.trim().lines() { + match line.split_once(" ").unwrap() { + ("U", count) => { + for _ in 1..=count.parse::().unwrap() { + head.1 = head.1 + 1; + + tail = move_tail(&head, tail); + + visited_places.insert(tail, 0); + } + } + ("R", count) => { + for _ in 1..=count.parse::().unwrap() { + head.0 = head.0 + 1; + + tail = move_tail(&head, tail); + + visited_places.insert(tail, 0); + } + } + ("D", count) => { + for _ in 1..=count.parse::().unwrap() { + head.1 = head.1 - 1; + + tail = move_tail(&head, tail); + + visited_places.insert(tail, 0); + } + } + ("L", count) => { + for _ in 1..=count.parse::().unwrap() { + head.0 = head.0 - 1; + + tail = move_tail(&head, tail); + + visited_places.insert(tail, 0); + } + } + (_, _) => panic!(), + } + } + + visited_places.len().to_string() +} + +pub fn task_two(input: &str) -> String { + let mut visited_places: HashMap<(isize, isize), u8> = HashMap::new(); + let mut knots: [(isize, isize); 10] = [(0, 0); 10]; + + visited_places.insert(knots[9], 0); + + for line in input.trim().lines() { + match line.split_once(" ").unwrap() { + ("U", count) => { + for _ in 1..=count.parse::().unwrap() { + knots[0].1 = knots[0].1 + 1; + + for i in 1..10 { + knots[i] = move_tail(&knots[i - 1], knots[i]); + } + + visited_places.insert(knots[9], 0); + } + } + ("R", count) => { + for _ in 1..=count.parse::().unwrap() { + knots[0].0 = knots[0].0 + 1; + + for i in 1..10 { + knots[i] = move_tail(&knots[i - 1], knots[i]); + } + + visited_places.insert(knots[9], 0); + } + } + ("D", count) => { + for _ in 1..=count.parse::().unwrap() { + knots[0].1 = knots[0].1 - 1; + + for i in 1..10 { + knots[i] = move_tail(&knots[i - 1], knots[i]); + } + + visited_places.insert(knots[9], 0); + } + } + ("L", count) => { + for _ in 1..=count.parse::().unwrap() { + knots[0].0 = knots[0].0 - 1; + + for i in 1..10 { + knots[i] = move_tail(&knots[i - 1], knots[i]); + } + + visited_places.insert(knots[9], 0); + } + } + (_, _) => panic!(), + } + } + + visited_places.len().to_string() +} diff --git a/src/aoc2022/mod.rs b/src/aoc2022/mod.rs index 9ac735a..a8fc1a9 100644 --- a/src/aoc2022/mod.rs +++ b/src/aoc2022/mod.rs @@ -6,3 +6,4 @@ pub mod day05; pub mod day06; pub mod day07; pub mod day08; +pub mod day09; diff --git a/src/main.rs b/src/main.rs index 2bf83e8..188eebd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -60,4 +60,7 @@ fn main() { puzzle = Puzzle { day: 8, year: 2022, task_one: aoc2022::day08::task_one, task_two: aoc2022::day08::task_two }; puzzle.solve_and_print(); + + puzzle = Puzzle { day: 9, year: 2022, task_one: aoc2022::day09::task_one, task_two: aoc2022::day09::task_two }; + puzzle.solve_and_print(); }