diff --git a/2022/input/day_9.txt b/2022/input/day_9.txt new file mode 100644 index 0000000..de3f33c --- /dev/null +++ b/2022/input/day_9.txt @@ -0,0 +1,2000 @@ +U 2 +D 2 +R 2 +U 2 +D 1 +L 2 +R 2 +D 1 +R 2 +D 1 +R 2 +L 1 +U 1 +L 2 +R 2 +L 2 +U 2 +R 2 +L 1 +U 1 +R 2 +U 1 +D 2 +L 1 +U 2 +D 1 +L 1 +R 1 +L 1 +D 1 +R 1 +D 2 +L 1 +U 2 +L 1 +U 1 +D 2 +U 1 +R 2 +U 1 +R 2 +D 1 +U 1 +D 2 +L 2 +U 2 +L 2 +R 1 +L 1 +U 2 +D 2 +U 1 +R 2 +L 2 +U 1 +R 1 +L 2 +D 1 +L 1 +U 2 +D 1 +R 1 +U 2 +R 2 +U 2 +R 2 +D 1 +L 2 +R 2 +U 2 +D 2 +U 2 +L 1 +U 1 +L 2 +U 1 +D 1 +L 1 +D 1 +L 1 +R 1 +L 1 +R 2 +D 1 +L 1 +D 2 +R 2 +L 1 +U 2 +L 1 +U 2 +L 1 +U 1 +D 2 +U 1 +L 1 +R 1 +D 1 +L 2 +U 1 +L 1 +R 2 +D 1 +L 2 +U 1 +L 2 +D 2 +R 2 +D 2 +U 1 +D 2 +R 3 +U 2 +L 2 +R 3 +L 2 +U 3 +L 3 +D 1 +R 2 +L 1 +R 2 +U 3 +R 3 +L 1 +D 2 +R 3 +L 2 +D 3 +L 3 +U 1 +R 1 +D 2 +R 2 +D 3 +L 3 +U 3 +R 3 +D 2 +U 1 +D 3 +L 2 +R 1 +D 3 +L 3 +D 3 +L 2 +D 3 +L 1 +D 2 +R 2 +L 3 +U 2 +R 2 +L 1 +U 1 +D 3 +R 3 +U 2 +R 3 +D 1 +R 1 +U 3 +D 2 +L 2 +D 2 +L 3 +U 2 +R 3 +D 1 +L 3 +U 1 +R 3 +U 1 +D 1 +U 2 +D 1 +R 2 +L 2 +D 1 +R 1 +D 2 +L 1 +U 1 +D 1 +R 2 +D 1 +L 2 +R 1 +D 3 +U 1 +D 3 +U 2 +L 1 +U 3 +D 2 +L 3 +U 2 +D 3 +R 3 +D 3 +U 3 +R 1 +U 2 +L 3 +D 1 +R 3 +D 2 +U 2 +D 2 +L 3 +U 3 +D 3 +R 3 +L 2 +D 3 +U 3 +D 3 +U 2 +R 2 +L 3 +R 3 +U 1 +D 1 +U 2 +L 4 +D 1 +U 1 +L 2 +D 4 +U 3 +L 1 +U 1 +D 1 +L 4 +R 4 +L 4 +R 2 +U 4 +L 2 +R 1 +L 3 +U 3 +D 2 +L 3 +U 4 +R 3 +L 4 +D 2 +U 3 +D 2 +U 2 +L 4 +D 2 +L 1 +R 4 +U 4 +D 2 +U 4 +L 4 +D 2 +L 3 +U 3 +D 1 +R 1 +U 1 +D 4 +U 3 +L 4 +D 1 +L 4 +U 1 +L 2 +U 3 +D 2 +L 3 +U 4 +D 2 +U 1 +D 1 +U 1 +R 2 +L 2 +D 3 +U 2 +R 1 +U 1 +L 4 +U 1 +R 2 +D 3 +R 1 +D 1 +R 3 +D 3 +L 1 +U 3 +L 3 +D 4 +L 3 +D 4 +L 1 +D 1 +R 1 +D 1 +U 4 +L 2 +U 3 +D 4 +R 4 +D 1 +U 2 +D 4 +U 1 +R 4 +L 2 +D 3 +U 4 +R 3 +D 1 +L 3 +D 4 +R 4 +L 3 +D 2 +L 3 +U 3 +R 3 +D 1 +R 1 +L 2 +D 2 +U 4 +R 1 +L 1 +D 2 +U 3 +D 3 +L 3 +D 5 +L 1 +U 2 +L 5 +U 3 +R 3 +L 2 +U 2 +L 1 +U 5 +L 4 +D 1 +L 3 +D 5 +U 3 +R 5 +D 1 +L 5 +R 5 +L 5 +D 4 +U 4 +L 5 +U 5 +R 5 +U 2 +D 5 +L 5 +U 3 +L 3 +U 4 +L 5 +U 3 +D 4 +R 3 +U 1 +L 2 +U 5 +L 1 +U 2 +D 1 +U 1 +D 1 +R 4 +L 1 +R 2 +D 2 +R 3 +L 5 +R 2 +D 5 +U 4 +R 5 +D 3 +L 1 +D 3 +R 3 +L 1 +R 4 +D 3 +L 5 +D 1 +R 1 +U 4 +D 2 +R 3 +U 4 +D 3 +U 1 +D 1 +R 1 +D 4 +U 1 +L 5 +R 1 +U 5 +L 4 +R 1 +L 1 +R 4 +D 3 +U 3 +D 3 +U 4 +L 2 +U 1 +R 2 +U 1 +D 4 +U 4 +R 1 +U 4 +R 3 +L 4 +R 2 +L 4 +D 5 +R 3 +U 1 +D 1 +L 3 +R 2 +U 1 +D 3 +U 1 +D 1 +R 3 +U 2 +L 6 +R 1 +D 1 +R 5 +L 5 +U 4 +D 1 +L 6 +D 5 +L 3 +D 6 +R 1 +U 3 +D 3 +R 5 +U 1 +R 5 +D 1 +L 1 +D 4 +L 1 +D 4 +R 1 +D 5 +U 6 +L 5 +R 2 +U 2 +D 6 +R 3 +U 6 +L 2 +D 5 +U 3 +R 1 +D 3 +L 1 +D 3 +U 1 +D 3 +U 4 +R 2 +D 3 +R 2 +D 2 +L 3 +U 2 +R 6 +D 4 +R 4 +D 1 +U 3 +D 1 +L 3 +U 6 +R 4 +D 3 +R 3 +L 4 +R 2 +U 5 +D 6 +L 5 +U 3 +L 4 +D 2 +R 2 +D 3 +L 6 +D 1 +U 1 +R 4 +L 5 +D 3 +U 4 +L 2 +U 5 +L 2 +U 5 +D 1 +L 4 +U 1 +R 2 +L 3 +D 1 +U 4 +D 2 +U 2 +L 1 +D 4 +R 2 +L 3 +R 2 +D 6 +R 2 +D 3 +R 3 +D 2 +U 6 +D 4 +R 4 +U 4 +L 5 +R 3 +L 4 +D 3 +L 2 +R 2 +D 1 +L 6 +R 7 +L 3 +U 3 +D 6 +U 4 +R 4 +D 7 +L 4 +U 1 +L 5 +R 5 +L 5 +U 7 +R 1 +D 2 +R 6 +D 6 +U 2 +R 1 +U 2 +L 5 +D 7 +U 5 +L 3 +U 4 +L 5 +U 4 +L 2 +D 1 +U 3 +R 4 +L 5 +R 5 +L 4 +R 3 +L 7 +R 4 +U 1 +L 4 +R 4 +U 7 +D 3 +U 4 +L 7 +D 5 +L 1 +D 5 +L 7 +U 5 +L 5 +D 3 +U 5 +D 3 +U 7 +R 5 +D 1 +U 2 +L 1 +U 1 +D 1 +L 1 +U 6 +D 2 +L 7 +U 5 +R 4 +L 3 +U 2 +L 1 +R 1 +L 2 +D 3 +L 3 +U 4 +D 4 +U 7 +D 7 +U 6 +D 7 +R 5 +U 7 +D 4 +U 3 +R 3 +D 3 +U 6 +L 6 +U 1 +R 1 +U 7 +R 2 +U 1 +D 1 +R 1 +D 1 +L 6 +U 6 +D 7 +R 4 +D 1 +L 2 +U 6 +L 2 +D 2 +R 2 +D 3 +L 3 +R 5 +D 1 +R 4 +L 1 +U 1 +R 3 +L 8 +U 3 +L 3 +R 5 +L 8 +D 1 +R 1 +D 8 +L 4 +D 2 +L 4 +U 3 +D 6 +R 2 +U 4 +D 6 +R 8 +D 4 +L 7 +R 6 +U 2 +R 1 +U 3 +R 2 +L 1 +R 8 +L 2 +D 6 +R 6 +D 6 +U 2 +D 6 +R 7 +D 4 +U 6 +R 5 +D 8 +L 3 +R 6 +D 4 +R 4 +U 2 +D 8 +L 8 +U 6 +D 2 +R 3 +L 2 +D 6 +U 8 +R 3 +D 3 +L 5 +D 5 +L 4 +R 8 +D 3 +U 3 +D 2 +R 8 +U 4 +L 8 +U 2 +R 1 +L 4 +D 5 +L 5 +R 5 +D 3 +L 7 +D 4 +L 6 +D 2 +U 3 +D 2 +L 2 +D 6 +R 2 +U 6 +R 7 +L 8 +U 3 +D 8 +L 1 +U 8 +L 8 +D 2 +R 6 +U 4 +D 8 +U 3 +L 7 +D 7 +L 8 +U 8 +L 4 +U 6 +L 1 +U 4 +D 7 +U 3 +R 2 +D 4 +L 5 +U 8 +R 4 +U 1 +R 2 +U 4 +D 7 +U 7 +R 7 +D 7 +U 9 +L 4 +D 8 +U 6 +L 3 +D 1 +U 8 +L 9 +U 8 +D 8 +U 2 +L 1 +U 5 +L 9 +U 4 +D 7 +L 5 +U 4 +R 5 +D 2 +L 3 +D 5 +R 3 +L 2 +D 9 +U 5 +L 6 +U 7 +D 2 +R 2 +D 3 +R 5 +U 7 +L 1 +U 9 +R 3 +D 8 +R 6 +D 5 +U 9 +R 9 +D 3 +U 8 +D 3 +R 6 +D 4 +U 8 +L 4 +D 8 +R 2 +U 2 +R 3 +D 9 +L 9 +U 7 +R 4 +D 4 +L 5 +U 1 +D 3 +R 6 +L 4 +R 1 +D 6 +R 4 +L 4 +U 6 +D 2 +L 2 +D 3 +R 8 +D 3 +U 4 +L 4 +D 2 +U 2 +L 4 +D 9 +R 9 +D 6 +U 7 +L 8 +U 6 +D 5 +R 2 +D 5 +U 9 +R 5 +D 7 +U 2 +L 3 +R 2 +U 5 +L 4 +D 5 +U 2 +L 9 +U 3 +R 2 +D 9 +R 5 +D 9 +U 2 +R 2 +L 6 +U 3 +L 6 +R 8 +U 5 +D 8 +R 9 +L 2 +R 2 +U 1 +D 10 +R 8 +L 6 +D 9 +R 5 +L 10 +R 2 +L 3 +R 9 +D 7 +U 10 +D 9 +L 7 +U 8 +D 7 +U 2 +D 1 +U 5 +R 9 +U 9 +R 6 +D 4 +L 3 +D 6 +R 10 +D 2 +L 4 +U 8 +R 6 +L 3 +U 1 +D 8 +R 6 +D 4 +L 1 +R 3 +L 10 +U 4 +D 5 +U 1 +R 3 +U 5 +R 5 +D 9 +R 1 +L 4 +U 4 +R 4 +D 7 +L 1 +U 6 +R 6 +U 1 +D 4 +R 2 +L 3 +D 6 +L 3 +R 1 +L 10 +D 1 +L 1 +U 6 +R 7 +L 8 +U 2 +D 10 +R 4 +D 9 +R 2 +U 9 +L 2 +U 7 +D 4 +U 4 +R 9 +U 9 +R 6 +D 7 +L 8 +U 1 +D 6 +L 6 +U 8 +D 3 +R 4 +L 4 +D 1 +L 2 +D 3 +L 2 +U 1 +L 5 +D 2 +U 8 +L 1 +U 5 +L 3 +U 3 +R 3 +U 1 +L 7 +D 9 +R 3 +D 10 +R 8 +L 5 +D 3 +U 6 +R 4 +U 4 +D 2 +L 5 +U 11 +L 3 +U 1 +L 6 +D 1 +L 2 +U 8 +R 6 +L 4 +R 2 +U 3 +L 3 +D 4 +L 2 +R 5 +U 4 +D 5 +U 10 +R 1 +D 6 +L 4 +U 9 +D 3 +U 5 +D 9 +L 1 +U 8 +D 11 +L 4 +D 4 +L 5 +D 7 +L 7 +R 10 +U 5 +R 1 +D 10 +R 3 +D 11 +R 7 +L 6 +U 7 +D 4 +L 7 +U 8 +R 6 +L 4 +U 5 +L 7 +R 2 +D 10 +L 8 +R 4 +U 1 +R 5 +L 2 +R 4 +L 6 +R 4 +U 10 +R 6 +U 9 +R 9 +D 6 +L 7 +D 1 +U 1 +L 8 +U 1 +D 8 +L 10 +R 6 +D 4 +R 9 +D 4 +R 3 +D 4 +U 8 +L 3 +D 7 +L 2 +R 10 +U 5 +R 4 +L 3 +D 6 +U 7 +R 8 +D 5 +R 6 +L 7 +R 4 +U 6 +L 8 +D 8 +R 6 +L 6 +U 8 +R 10 +U 4 +R 2 +D 2 +L 11 +R 10 +L 5 +U 10 +L 5 +D 12 +L 7 +D 8 +L 2 +U 1 +L 11 +R 3 +D 8 +U 7 +L 6 +D 9 +L 12 +U 7 +L 11 +R 7 +U 8 +L 4 +D 9 +U 6 +D 9 +R 7 +L 4 +R 12 +U 8 +D 6 +U 8 +D 6 +U 5 +L 2 +U 2 +L 9 +D 10 +L 11 +U 10 +R 4 +L 12 +U 6 +L 11 +R 10 +U 9 +L 2 +D 11 +L 11 +D 10 +U 8 +R 10 +L 7 +R 6 +L 6 +U 5 +L 8 +D 5 +U 7 +L 5 +D 8 +R 5 +L 7 +D 10 +L 10 +D 12 +L 8 +R 11 +U 6 +L 12 +D 9 +U 5 +R 2 +U 6 +D 11 +U 5 +R 1 +L 2 +R 3 +U 8 +R 4 +L 10 +R 6 +D 9 +L 3 +U 11 +L 4 +U 1 +R 5 +L 8 +D 8 +U 2 +D 7 +U 5 +R 10 +L 4 +D 4 +U 2 +L 7 +D 12 +U 12 +D 5 +U 12 +R 3 +L 4 +U 10 +L 1 +R 2 +L 9 +R 9 +L 5 +U 5 +L 10 +U 12 +L 3 +D 5 +U 12 +L 10 +D 11 +U 12 +L 2 +U 11 +R 6 +D 10 +U 6 +L 5 +D 10 +U 10 +D 12 +U 3 +L 10 +U 9 +R 4 +U 4 +L 12 +R 12 +L 4 +D 5 +L 9 +U 5 +L 11 +R 12 +D 8 +L 6 +U 10 +D 2 +U 11 +D 6 +R 10 +D 1 +L 5 +U 1 +D 10 +U 1 +L 13 +U 11 +L 6 +R 1 +U 11 +D 10 +R 11 +L 3 +U 6 +R 13 +U 13 +L 6 +R 4 +D 3 +L 10 +U 2 +R 9 +D 6 +L 12 +U 11 +D 9 +R 2 +L 2 +D 4 +R 13 +L 7 +R 7 +L 9 +R 11 +U 4 +D 2 +L 4 +R 12 +L 3 +D 8 +U 9 +D 3 +R 11 +U 11 +D 13 +U 1 +D 6 +U 2 +R 13 +L 5 +U 6 +L 5 +U 13 +L 12 +D 7 +L 12 +R 4 +U 4 +D 3 +L 5 +D 10 +U 10 +L 2 +U 11 +L 9 +U 11 +R 7 +D 4 +U 9 +D 7 +R 6 +L 2 +D 2 +L 1 +U 10 +R 5 +U 5 +R 1 +L 10 +D 11 +U 5 +D 13 +R 9 +D 6 +R 2 +D 13 +R 12 +L 11 +D 6 +R 9 +U 12 +R 11 +U 6 +R 12 +D 4 +R 11 +L 5 +D 1 +U 5 +R 8 +D 1 +R 12 +L 9 +U 6 +L 9 +U 3 +L 6 +R 3 +U 2 +R 3 +U 14 +L 7 +R 7 +L 12 +U 7 +R 5 +D 7 +L 10 +U 14 +D 8 +L 5 +U 11 +D 4 +U 10 +R 9 +U 4 +R 1 +L 11 +U 13 +D 8 +R 10 +L 3 +U 11 +L 5 +U 2 +R 6 +U 3 +R 10 +L 4 +R 3 +D 8 +U 11 +L 11 +U 6 +R 6 +U 8 +R 4 +L 10 +R 2 +U 4 +L 2 +D 12 +R 12 +D 4 +U 14 +R 6 +U 1 +R 9 +L 5 +U 9 +D 5 +R 13 +U 11 +L 8 +R 11 +D 9 +L 8 +D 8 +U 5 +R 2 +L 3 +D 6 +U 9 +D 1 +L 8 +U 6 +L 6 +R 8 +D 13 +R 12 +L 5 +U 8 +R 11 +D 4 +U 13 +D 10 +U 4 +D 3 +L 14 +R 14 +D 5 +R 2 +D 7 +L 13 +U 1 +L 14 +U 15 +D 11 +R 2 +U 15 +R 11 +L 8 +U 11 +D 4 +R 2 +U 8 +L 8 +R 11 +U 9 +L 11 +D 4 +L 8 +U 9 +L 9 +D 15 +U 1 +L 8 +U 7 +L 12 +U 13 +R 7 +L 6 +D 13 +U 1 +L 9 +D 11 +R 8 +D 3 +R 11 +L 8 +R 9 +U 2 +L 1 +U 5 +D 14 +R 3 +U 12 +R 4 +U 15 +D 1 +R 11 +L 11 +U 11 +L 1 +D 12 +U 7 +L 13 +R 4 +U 5 +D 15 +L 14 +R 10 +U 9 +R 7 +D 13 +L 15 +R 10 +L 2 +R 5 +D 12 +U 13 +R 6 +L 15 +R 14 +D 1 +U 1 +L 2 +U 11 +R 15 +U 8 +R 9 +U 5 +L 9 +D 14 +R 9 +D 9 +U 8 +R 8 +U 3 +R 7 +D 11 +R 4 +U 9 +R 9 +U 11 +D 4 +U 12 +L 9 +R 3 +D 7 +L 6 +R 1 +D 9 +R 1 +D 4 +R 16 +U 12 +R 8 +D 7 +L 7 +R 9 +U 16 +R 15 +U 14 +L 14 +D 3 +R 4 +U 4 +D 1 +L 2 +D 11 +R 2 +U 2 +D 16 +U 4 +D 5 +R 14 +D 3 +R 5 +D 10 +R 2 +L 4 +U 6 +R 9 +D 16 +R 12 +U 2 +L 16 +R 7 +L 8 +R 5 +L 5 +U 14 +D 16 +U 7 +R 2 +U 15 +L 3 +R 7 +L 5 +U 8 +R 11 +D 3 +L 5 +U 7 +L 8 +R 3 +U 3 +D 5 +U 13 +L 8 +U 1 +D 13 +R 11 +L 2 +U 14 +R 15 +U 2 +D 7 +R 15 +L 5 +D 9 +U 8 +R 5 +L 15 +D 3 +R 10 +D 10 +U 7 +D 7 +U 14 +R 2 +U 8 +R 14 +L 11 +R 16 +U 11 +D 16 +U 2 +L 10 +U 5 +D 6 +L 7 +U 8 +D 10 +R 11 +L 7 +D 5 +U 6 +L 5 +D 5 +R 1 +L 7 +U 9 +L 5 +U 3 +D 7 +R 14 +U 9 +D 6 +L 13 +U 8 +L 5 +D 5 +R 3 +U 7 +D 6 +U 8 +R 16 +U 17 +L 5 +R 8 +L 8 +U 8 +L 10 +D 17 +R 5 +D 3 +L 17 +R 17 +D 4 +R 15 +D 6 +L 3 +R 17 +D 9 +L 13 +U 4 +D 2 +L 17 +R 1 +L 14 +D 17 +L 9 +R 12 +U 14 +D 12 +U 3 +R 7 +D 1 +L 13 +R 13 +U 16 +D 13 +U 15 +R 15 +U 4 +D 11 +L 7 +U 1 +D 14 +U 8 +L 11 +D 13 +L 12 +U 17 +L 13 +U 2 +R 10 +L 12 +R 12 +U 1 +R 8 +U 10 +D 15 +R 3 +U 4 +R 12 +L 9 +D 15 +L 13 +D 15 +L 7 +D 8 +L 7 +U 6 +L 17 +R 4 +D 10 +U 11 +L 8 +R 14 +U 9 +R 9 +L 6 +U 1 +L 5 +D 11 +R 10 +L 16 +U 15 +L 12 +R 13 +D 5 +L 4 +D 12 +L 6 +R 3 +D 12 +L 4 +U 2 +L 16 +D 6 +R 15 +U 7 +D 2 +L 14 +D 6 +R 14 +D 7 +U 11 +R 4 +D 3 +R 6 +L 3 +D 11 +U 2 +R 5 +U 3 +L 1 +U 7 +R 13 +U 12 +D 12 +R 13 +D 7 +L 12 +D 10 +U 14 +R 12 +D 4 +R 2 +U 16 +D 9 +L 14 +U 14 +D 8 +L 7 +R 7 +D 18 +U 18 +R 8 +L 15 +U 12 +D 11 +L 16 +D 18 +R 14 +L 5 +R 12 +D 11 +R 13 +L 17 +D 4 +L 10 +U 1 +L 8 +U 10 +R 13 +D 2 +L 14 +D 1 +R 5 +L 4 +R 11 +L 7 +D 2 +R 8 +L 13 +R 5 +L 5 +R 11 +U 15 +D 3 +U 2 +R 6 +U 1 +R 8 +L 5 +U 1 +R 9 +D 13 +R 8 +U 17 +L 16 +U 3 +L 9 +D 9 +U 6 +L 8 +R 13 +L 7 +R 16 +U 6 +L 13 +U 18 +L 17 +D 15 +R 5 +U 6 +D 11 +U 15 +L 4 +R 14 +U 9 +R 11 +U 9 +L 11 +D 7 +U 9 +L 10 +D 4 +R 7 +U 7 +D 8 +R 1 +D 12 +R 16 +U 7 +R 9 +D 10 +R 1 +L 1 +U 16 +L 4 +U 11 +D 1 +U 3 +R 17 +U 17 +L 12 +R 9 +U 14 +D 4 +L 6 +R 4 +L 15 +U 1 +D 2 +U 9 +R 16 +L 1 +R 2 +L 12 +U 12 +D 7 +R 13 +D 6 +L 2 +D 3 +U 8 +L 7 +U 16 +L 15 +D 18 +L 19 +U 7 +R 17 +D 7 +U 3 +R 12 +D 1 +L 17 +U 19 +D 15 +R 3 +D 5 +U 17 +D 16 +U 2 +R 13 +D 7 +U 19 +L 5 +R 3 +D 15 +L 12 +D 19 +L 19 +U 1 +R 10 +D 14 +U 3 +R 1 +L 6 +U 14 +L 11 +R 10 +L 7 +R 14 +D 9 +U 14 +R 5 +L 19 +U 10 +L 12 +U 10 +L 3 +D 13 +U 12 +R 12 +D 6 +L 2 +U 1 +D 16 +U 9 +L 7 +R 14 +L 15 +U 9 +L 19 +U 14 +D 9 +U 15 +L 13 +U 12 +L 1 +D 7 +U 7 +L 7 +R 2 +U 16 +R 6 +D 11 +U 7 +D 11 +U 19 +R 13 +D 7 +R 7 +L 6 +R 14 +L 18 +D 2 +L 5 +D 8 +L 7 +U 17 +D 15 +U 19 diff --git a/2022/input/day_9_sample.txt b/2022/input/day_9_sample.txt new file mode 100644 index 0000000..60bd43b --- /dev/null +++ b/2022/input/day_9_sample.txt @@ -0,0 +1,8 @@ +R 5 +U 8 +L 8 +D 3 +R 17 +D 10 +L 25 +U 20 diff --git a/2022/src/day_9.rs b/2022/src/day_9.rs new file mode 100644 index 0000000..da7d8cd --- /dev/null +++ b/2022/src/day_9.rs @@ -0,0 +1,141 @@ +use std::collections::HashSet; +use Direction::*; + +#[derive(Debug)] +enum Direction { + L, + R, + U, + D, +} + +#[derive(Debug)] +struct Instruction { + direction: Direction, + steps: i32, +} + +#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)] +struct Location { + x: i32, + y: i32, +} + +type Data = Vec; +type Output = usize; +fn parse(input: &str) -> Data { + input + .lines() + .map(|line| { + let (direction, steps) = line.split_once(' ').unwrap(); + Instruction { + direction: match direction { + "L" => L, + "R" => R, + "D" => D, + "U" => U, + _ => panic!("expected L, R, D, or U. got {}", direction), + }, + steps: steps.parse().unwrap(), + } + }) + .collect() +} +fn part_one(data: Data) -> Output { + let mut locations = HashSet::::new(); + let mut head = Location { x: 0, y: 0 }; + let mut tail = head; + locations.insert(tail); + for instr in data { + for _ in 0..instr.steps { + // println!("{:?}", tail); + match instr.direction { + L => { + head.x -= 1; + if tail.x == head.x + 2 { + tail.x = head.x + 1; + tail.y = head.y; + } + } + R => { + head.x += 1; + if tail.x == head.x - 2 { + tail.x = head.x - 1; + tail.y = head.y; + } + } + U => { + head.y += 1; + if tail.y + 2 == head.y { + tail.x = head.x; + tail.y = head.y - 1; + } + } + D => { + head.y -= 1; + if tail.y == head.y + 2 { + tail.x = head.x; + tail.y = head.y + 1; + } + } + } + locations.insert(tail); + } + } + locations.len() +} +fn part_two(data: Data) -> Output { + let mut locations = HashSet::::new(); + let mut rope = [Location { x: 0, y: 0 }; 10]; + locations.insert(rope[9]); + for instr in data { + for _ in 0..instr.steps { + match instr.direction { + L => { + rope[0].x -= 1; + } + R => { + rope[0].x += 1; + } + U => { + rope[0].y += 1; + } + D => { + rope[0].y -= 1; + } + } + for i in 1..rope.len() { + if rope[i].x.abs_diff(rope[i - 1].x) == 2 && rope[i].y.abs_diff(rope[i - 1].y) == 2 + { + rope[i] = Location { + x: rope[i - 1].x + if rope[i - 1].x > rope[i].x { -1 } else { 1 }, + y: rope[i - 1].y + if rope[i - 1].y > rope[i].y { -1 } else { 1 }, + }; + } else if rope[i].x >= rope[i - 1].x + 2 { + rope[i].x = rope[i - 1].x + 1; + rope[i].y = rope[i - 1].y; + } else if rope[i].y >= rope[i - 1].y + 2 { + rope[i].x = rope[i - 1].x; + rope[i].y = rope[i - 1].y + 1; + } else if rope[i].y <= rope[i - 1].y - 2 { + rope[i].x = rope[i - 1].x; + rope[i].y = rope[i - 1].y - 1; + } else if rope[i].x <= rope[i - 1].x - 2 { + rope[i].x = rope[i - 1].x - 1; + rope[i].y = rope[i - 1].y; + } + } + locations.insert(rope[rope.len() - 1]); + } + } + locations.len() +} + +advent_of_code_macro::generate_tests!( + day 9, + parse, + part_one, + part_two, + sample tests [88, 36], + star tests [6337, 2455] +); diff --git a/2022/src/lib.rs b/2022/src/lib.rs index 008f558..282b3f3 100644 --- a/2022/src/lib.rs +++ b/2022/src/lib.rs @@ -7,3 +7,4 @@ mod day_5; mod day_6; mod day_7; mod day_8; +mod day_9;