diff --git a/day9-input.txt b/day9-input.txt new file mode 100644 index 0000000..73cfe58 --- /dev/null +++ b/day9-input.txt @@ -0,0 +1,2000 @@ +D 2 +U 2 +L 2 +D 2 +L 2 +D 2 +L 1 +D 2 +U 1 +L 1 +D 1 +R 1 +D 1 +L 2 +D 1 +U 2 +D 2 +R 2 +D 1 +U 2 +L 2 +D 1 +R 1 +D 1 +R 2 +U 2 +L 2 +U 2 +D 1 +U 2 +R 2 +L 2 +R 2 +D 2 +L 1 +R 2 +D 2 +R 2 +D 1 +R 2 +D 2 +R 2 +L 1 +R 1 +U 2 +D 2 +R 2 +D 1 +L 2 +D 1 +L 1 +U 2 +L 1 +U 2 +R 2 +D 1 +L 1 +D 2 +L 1 +D 1 +R 1 +D 2 +R 2 +D 2 +L 2 +D 2 +U 2 +L 1 +R 2 +L 1 +D 2 +L 2 +D 2 +U 2 +L 1 +R 2 +U 2 +D 2 +R 1 +L 2 +D 1 +R 2 +D 2 +L 1 +R 1 +L 2 +D 1 +R 1 +D 1 +L 1 +U 2 +R 1 +U 1 +L 1 +U 1 +L 2 +U 2 +L 2 +U 2 +R 1 +L 2 +D 2 +R 1 +D 1 +U 2 +D 1 +U 1 +L 1 +R 1 +D 2 +R 1 +D 2 +U 1 +D 2 +L 1 +R 2 +U 2 +D 3 +U 1 +R 1 +U 1 +D 1 +R 1 +L 2 +D 3 +U 3 +L 3 +U 2 +R 2 +U 1 +D 2 +U 1 +R 3 +D 1 +R 2 +U 1 +D 2 +U 2 +L 2 +U 1 +D 1 +L 2 +U 3 +R 3 +D 3 +R 1 +U 1 +L 3 +R 1 +D 1 +L 1 +U 1 +R 3 +U 2 +D 1 +U 1 +L 2 +U 3 +L 2 +D 3 +L 2 +R 3 +D 3 +R 3 +L 2 +R 3 +U 3 +D 1 +U 2 +L 3 +U 2 +L 1 +U 1 +D 1 +L 1 +D 2 +U 2 +L 1 +U 1 +L 3 +U 2 +D 3 +R 1 +U 1 +R 3 +L 3 +R 2 +U 1 +L 3 +D 2 +U 1 +D 3 +R 2 +U 3 +L 1 +R 2 +D 2 +L 1 +R 3 +L 3 +D 3 +R 3 +L 2 +U 2 +R 3 +D 2 +L 2 +U 1 +R 2 +U 2 +R 3 +L 2 +D 1 +R 1 +D 3 +L 3 +U 1 +R 2 +L 3 +D 1 +R 3 +U 2 +D 4 +L 2 +D 2 +L 2 +R 3 +U 2 +D 1 +R 3 +L 2 +U 3 +R 3 +U 3 +L 4 +R 3 +D 3 +U 1 +D 2 +R 1 +U 1 +L 2 +D 1 +R 2 +U 4 +R 3 +U 3 +L 4 +U 3 +R 2 +L 1 +R 4 +L 2 +U 4 +L 1 +D 1 +L 1 +U 2 +L 1 +U 3 +L 1 +U 1 +R 1 +U 1 +R 2 +L 4 +D 3 +R 4 +D 2 +U 2 +L 2 +D 1 +R 2 +L 4 +U 4 +R 3 +D 3 +L 2 +R 3 +L 2 +D 4 +R 4 +L 1 +R 3 +U 3 +R 4 +L 4 +U 3 +R 2 +D 3 +L 3 +D 1 +U 2 +D 1 +L 4 +D 3 +R 4 +L 4 +U 3 +R 2 +U 1 +D 3 +R 3 +D 4 +U 3 +L 3 +D 4 +L 2 +U 2 +L 2 +D 2 +U 2 +L 2 +D 3 +R 4 +U 2 +D 3 +R 2 +D 4 +U 2 +R 2 +D 3 +L 2 +U 1 +L 4 +R 2 +L 4 +D 3 +L 1 +D 1 +U 2 +L 1 +R 4 +L 4 +R 2 +L 3 +R 5 +D 5 +L 4 +U 2 +R 2 +U 3 +D 4 +L 2 +U 3 +D 2 +R 2 +D 1 +R 5 +D 1 +R 2 +U 5 +R 3 +D 5 +L 2 +R 5 +L 4 +R 2 +U 3 +L 3 +D 2 +L 1 +D 5 +L 1 +R 1 +U 2 +R 4 +L 5 +R 2 +D 2 +U 1 +L 3 +D 2 +R 2 +U 4 +D 5 +R 4 +U 3 +R 1 +D 2 +R 4 +L 3 +D 4 +L 4 +R 4 +D 4 +L 5 +R 5 +D 2 +R 2 +L 1 +D 5 +L 3 +R 3 +U 4 +R 1 +U 3 +L 4 +D 5 +R 3 +D 4 +U 5 +L 5 +R 5 +U 3 +L 2 +D 4 +U 1 +R 4 +U 2 +D 2 +U 2 +L 1 +U 2 +D 1 +U 4 +R 3 +U 1 +R 2 +L 5 +D 3 +R 1 +U 3 +L 2 +U 5 +D 5 +U 3 +D 4 +R 1 +U 5 +L 4 +U 5 +R 3 +D 5 +U 1 +D 1 +L 1 +U 2 +L 3 +R 1 +U 2 +D 5 +R 5 +U 1 +L 1 +R 6 +D 1 +L 6 +D 2 +U 6 +R 4 +D 3 +R 1 +U 1 +L 3 +U 6 +D 4 +R 4 +D 4 +R 5 +D 6 +L 5 +U 3 +R 6 +U 6 +D 2 +U 4 +L 5 +D 3 +L 2 +R 6 +D 5 +R 2 +U 1 +R 6 +L 3 +R 4 +U 5 +L 1 +D 2 +U 5 +R 4 +D 6 +R 6 +D 1 +U 2 +R 5 +D 6 +R 3 +U 3 +L 3 +R 1 +L 4 +R 1 +D 5 +U 5 +L 6 +U 3 +D 3 +R 6 +D 6 +R 1 +D 4 +L 2 +D 5 +R 4 +U 2 +R 5 +L 1 +D 6 +U 6 +R 5 +U 4 +D 4 +U 6 +L 6 +D 1 +L 6 +R 1 +D 3 +R 4 +L 5 +D 2 +L 5 +R 2 +U 5 +D 3 +R 6 +U 1 +D 1 +R 6 +U 6 +D 1 +L 4 +D 4 +L 1 +U 5 +R 2 +L 3 +U 5 +R 4 +L 6 +R 5 +D 5 +L 4 +R 6 +U 3 +R 3 +D 3 +R 5 +U 3 +R 4 +U 3 +L 4 +U 4 +L 5 +R 6 +U 5 +D 1 +U 4 +L 7 +D 7 +U 5 +R 3 +D 4 +R 4 +D 3 +L 1 +U 4 +L 2 +D 4 +R 4 +U 7 +L 7 +U 4 +D 7 +U 6 +D 3 +U 6 +L 6 +R 1 +D 1 +R 3 +D 5 +U 1 +L 5 +R 5 +U 3 +L 7 +R 6 +D 7 +U 3 +L 2 +U 1 +R 3 +L 2 +U 1 +R 7 +U 1 +D 7 +U 4 +R 6 +U 2 +R 3 +U 6 +D 2 +L 4 +D 2 +L 2 +U 2 +L 2 +D 6 +R 2 +D 1 +U 4 +D 4 +U 4 +R 2 +U 3 +R 2 +D 1 +R 1 +L 7 +R 2 +D 6 +L 6 +D 2 +L 6 +R 3 +L 5 +D 7 +U 3 +R 5 +D 1 +U 7 +D 7 +U 4 +R 5 +D 1 +U 7 +L 6 +D 7 +U 5 +L 5 +U 4 +R 4 +U 7 +D 3 +R 7 +U 2 +R 2 +L 4 +R 6 +U 5 +R 6 +L 5 +U 1 +D 7 +U 1 +D 1 +L 6 +D 6 +U 2 +L 3 +U 6 +L 6 +R 6 +U 5 +L 4 +R 1 +L 1 +D 4 +L 5 +D 3 +L 4 +R 6 +L 6 +D 6 +U 5 +D 1 +R 2 +D 6 +R 6 +U 8 +L 8 +U 7 +D 7 +R 3 +U 4 +R 4 +U 8 +D 4 +R 6 +D 1 +L 6 +D 6 +R 8 +U 1 +D 2 +R 3 +D 8 +U 4 +R 3 +U 7 +R 3 +D 6 +L 8 +D 3 +L 7 +R 1 +L 7 +D 5 +U 3 +D 7 +U 4 +D 7 +L 7 +D 2 +U 7 +R 5 +U 5 +L 4 +D 3 +R 6 +U 1 +L 3 +D 3 +R 2 +U 3 +D 2 +R 3 +D 3 +R 3 +L 3 +D 6 +U 2 +L 2 +R 5 +U 4 +D 2 +U 5 +L 3 +R 1 +U 5 +D 1 +U 5 +L 3 +D 6 +R 6 +D 1 +U 4 +L 2 +D 5 +U 2 +L 8 +U 6 +D 6 +R 7 +L 3 +D 3 +L 1 +R 2 +D 5 +L 1 +D 3 +L 3 +R 8 +L 3 +D 7 +R 4 +U 3 +R 1 +L 7 +D 1 +U 1 +R 4 +L 2 +U 2 +L 5 +D 4 +R 8 +U 3 +R 7 +L 9 +R 5 +U 8 +R 9 +U 1 +D 2 +U 5 +L 5 +R 5 +U 3 +R 1 +U 7 +D 2 +R 2 +L 4 +D 7 +U 4 +R 3 +D 6 +R 9 +L 1 +D 1 +U 2 +R 8 +D 4 +L 2 +U 7 +D 9 +U 8 +D 4 +R 1 +L 3 +R 6 +D 6 +R 1 +L 2 +R 9 +U 7 +R 4 +U 2 +D 6 +L 5 +U 5 +R 2 +L 5 +R 1 +D 6 +R 1 +D 5 +L 4 +U 1 +D 8 +L 9 +R 1 +U 6 +D 3 +L 7 +U 7 +R 5 +D 8 +U 2 +D 8 +U 4 +L 2 +R 4 +D 4 +L 6 +R 4 +L 5 +U 7 +R 8 +L 6 +D 9 +L 2 +R 4 +L 6 +U 3 +L 6 +R 9 +U 7 +D 3 +R 1 +D 1 +R 6 +D 8 +L 5 +R 8 +U 9 +D 9 +U 2 +R 7 +U 9 +R 4 +L 6 +U 9 +R 2 +D 9 +U 7 +R 2 +U 9 +R 2 +L 2 +R 8 +L 9 +R 3 +D 4 +R 10 +U 10 +D 7 +R 7 +D 4 +R 8 +D 9 +U 7 +L 8 +D 10 +U 10 +R 4 +U 6 +D 4 +L 9 +R 9 +L 10 +D 3 +L 6 +D 2 +L 5 +U 1 +R 4 +D 3 +U 7 +L 1 +R 6 +L 10 +U 2 +R 4 +D 5 +U 7 +R 2 +U 3 +R 3 +L 2 +R 9 +U 8 +D 8 +R 10 +U 9 +R 6 +U 5 +L 2 +D 10 +U 4 +R 4 +L 5 +U 10 +R 6 +L 1 +R 10 +D 9 +L 7 +D 3 +L 3 +R 5 +D 3 +L 2 +R 1 +L 3 +R 2 +D 2 +U 4 +L 3 +D 5 +R 6 +D 1 +U 8 +L 6 +D 10 +R 6 +U 5 +L 1 +D 8 +U 1 +R 2 +D 6 +U 8 +D 10 +L 2 +D 1 +R 7 +L 2 +D 4 +U 10 +L 7 +D 10 +U 2 +D 7 +U 1 +R 5 +D 8 +R 4 +D 9 +R 6 +L 6 +R 7 +L 2 +R 5 +D 6 +L 2 +D 1 +L 9 +U 4 +D 10 +R 10 +U 7 +D 10 +U 7 +L 8 +U 9 +L 2 +D 7 +R 4 +D 10 +R 1 +L 5 +U 11 +L 2 +R 9 +L 6 +U 10 +D 1 +L 8 +U 4 +R 3 +U 1 +R 6 +D 6 +L 1 +R 9 +L 5 +R 8 +U 6 +D 2 +U 10 +D 2 +L 4 +U 7 +D 10 +L 7 +D 8 +L 8 +D 5 +L 8 +U 10 +D 7 +U 1 +L 9 +R 2 +U 6 +L 5 +R 2 +D 5 +L 3 +D 6 +L 2 +D 6 +L 2 +R 9 +D 7 +R 1 +L 7 +R 9 +D 11 +R 8 +U 1 +L 7 +R 3 +L 2 +U 4 +R 1 +D 10 +L 3 +R 9 +U 10 +R 1 +D 7 +R 6 +D 11 +U 2 +L 9 +R 10 +L 4 +R 6 +U 5 +L 1 +U 10 +D 6 +U 2 +L 11 +U 4 +R 3 +D 9 +U 1 +D 9 +L 9 +D 9 +U 5 +D 4 +U 2 +D 3 +L 8 +R 5 +D 7 +R 8 +D 4 +L 2 +U 4 +D 1 +L 9 +D 3 +R 7 +U 4 +L 2 +R 8 +L 2 +U 10 +D 9 +R 7 +U 8 +D 4 +U 3 +D 10 +L 3 +R 4 +L 5 +R 9 +L 8 +R 10 +U 5 +D 10 +R 3 +U 8 +R 2 +U 4 +D 1 +R 9 +L 2 +U 6 +L 1 +R 6 +D 9 +L 8 +U 8 +D 6 +L 7 +U 6 +D 1 +R 3 +D 6 +R 2 +D 7 +R 2 +D 11 +L 7 +U 9 +R 8 +L 10 +U 1 +R 11 +L 5 +D 1 +R 4 +D 9 +L 12 +U 2 +R 10 +D 2 +L 8 +R 2 +L 4 +R 1 +U 5 +R 8 +U 3 +D 12 +U 12 +L 11 +R 6 +L 1 +R 3 +L 9 +D 6 +L 10 +D 6 +U 4 +L 9 +U 5 +D 9 +R 9 +D 12 +R 4 +D 9 +L 4 +R 2 +L 9 +R 4 +D 3 +U 10 +L 8 +U 11 +D 12 +L 4 +D 2 +U 11 +L 9 +R 3 +U 6 +D 3 +L 12 +U 9 +D 2 +L 6 +R 3 +U 2 +D 3 +R 5 +L 10 +U 5 +D 2 +L 12 +R 8 +U 9 +R 4 +D 8 +R 3 +D 9 +L 11 +D 8 +U 10 +L 12 +R 4 +L 8 +R 7 +U 7 +L 9 +R 1 +D 5 +R 11 +U 2 +D 8 +L 11 +U 5 +R 2 +U 1 +L 5 +U 10 +D 2 +L 3 +U 5 +L 11 +U 3 +D 3 +U 11 +L 13 +D 7 +U 4 +L 12 +U 10 +L 13 +R 4 +L 12 +U 12 +D 4 +U 6 +D 5 +R 5 +U 13 +R 7 +D 2 +U 9 +L 7 +R 7 +D 2 +U 12 +D 5 +L 11 +D 13 +L 10 +D 10 +U 7 +D 13 +U 7 +R 9 +L 7 +R 1 +L 6 +R 9 +D 8 +U 7 +L 12 +D 9 +U 4 +D 13 +R 2 +L 8 +R 10 +D 8 +L 2 +D 5 +R 8 +D 2 +R 8 +D 4 +L 9 +R 4 +U 4 +L 13 +D 2 +L 3 +R 6 +U 5 +L 9 +U 9 +R 10 +L 11 +U 11 +D 13 +U 4 +L 2 +D 13 +R 9 +L 13 +D 9 +U 9 +D 5 +U 11 +L 8 +R 7 +U 11 +D 3 +L 5 +R 12 +D 2 +R 5 +L 10 +U 10 +D 10 +R 8 +L 2 +R 3 +U 9 +D 7 +U 14 +L 6 +D 11 +R 12 +L 13 +U 2 +L 11 +R 13 +D 13 +L 3 +R 3 +L 10 +R 11 +D 12 +R 8 +U 14 +D 4 +U 4 +L 12 +R 8 +L 10 +R 4 +U 12 +D 5 +L 3 +U 1 +D 7 +R 12 +L 4 +R 9 +U 5 +R 11 +D 12 +R 14 +L 7 +U 2 +L 7 +U 1 +D 8 +R 3 +U 7 +R 2 +L 2 +R 7 +D 3 +U 3 +R 5 +L 11 +U 13 +D 14 +L 7 +D 5 +R 11 +L 1 +U 5 +D 11 +U 2 +D 8 +L 10 +D 8 +R 5 +L 2 +U 11 +L 4 +R 7 +D 2 +L 4 +R 5 +L 6 +U 12 +L 9 +D 4 +R 8 +U 4 +L 2 +R 12 +D 11 +R 12 +U 10 +R 12 +U 9 +L 1 +U 4 +L 9 +U 13 +R 10 +L 9 +U 11 +R 6 +D 9 +L 1 +D 14 +R 1 +D 12 +U 5 +D 3 +U 13 +R 2 +L 9 +R 8 +D 7 +L 13 +R 11 +D 12 +L 6 +R 11 +L 8 +U 9 +D 5 +U 10 +R 8 +L 12 +D 6 +R 8 +U 5 +D 13 +R 3 +U 12 +L 1 +U 13 +D 4 +L 10 +U 7 +L 10 +U 13 +D 4 +R 13 +D 5 +R 15 +D 8 +U 13 +L 6 +U 14 +L 4 +R 11 +U 13 +D 8 +U 11 +D 2 +R 13 +L 14 +R 6 +L 3 +R 13 +L 11 +R 14 +L 6 +U 14 +D 2 +R 1 +L 6 +U 5 +D 13 +L 7 +R 6 +U 11 +R 10 +D 5 +U 11 +D 2 +L 3 +U 4 +L 2 +U 5 +R 14 +U 9 +D 9 +U 12 +R 15 +L 11 +R 15 +L 9 +R 14 +U 7 +D 11 +R 14 +D 14 +L 4 +U 4 +D 10 +R 10 +D 9 +L 14 +R 14 +D 11 +L 7 +R 9 +L 14 +U 11 +D 12 +L 13 +D 11 +U 4 +D 10 +U 14 +D 8 +U 12 +R 15 +U 1 +D 1 +U 11 +D 10 +L 6 +D 11 +U 11 +R 10 +L 7 +U 5 +L 13 +R 8 +U 9 +L 8 +U 12 +D 2 +R 11 +U 6 +R 5 +L 2 +U 9 +L 3 +R 3 +D 6 +L 15 +U 15 +L 10 +D 4 +U 13 +R 4 +U 7 +R 14 +U 13 +L 8 +R 14 +U 5 +L 7 +R 5 +D 4 +L 4 +U 12 +L 10 +D 9 +R 10 +U 9 +L 5 +D 16 +R 10 +D 7 +U 4 +R 14 +D 13 +R 10 +L 15 +D 16 +R 15 +L 4 +D 2 +L 6 +R 16 +U 5 +R 9 +U 16 +R 4 +U 11 +D 5 +U 2 +D 3 +L 11 +D 4 +L 4 +U 1 +L 7 +U 12 +R 15 +U 16 +R 12 +D 8 +R 3 +U 16 +L 4 +R 4 +D 12 +L 5 +R 6 +D 16 +L 13 +D 3 +L 13 +R 4 +L 6 +D 12 +U 12 +L 9 +D 2 +U 16 +D 10 +L 1 +U 3 +D 1 +L 8 +D 3 +L 7 +R 7 +L 3 +D 11 +U 13 +R 13 +U 12 +L 16 +D 1 +R 14 +L 11 +R 3 +D 13 +U 10 +R 14 +U 2 +L 1 +D 1 +U 9 +D 5 +U 9 +L 7 +U 7 +L 6 +D 16 +U 16 +L 7 +U 11 +D 16 +U 7 +D 15 +R 7 +L 15 +D 4 +R 14 +D 10 +U 16 +L 10 +U 10 +D 16 +L 12 +U 10 +R 6 +L 1 +U 7 +D 3 +L 1 +R 6 +D 1 +R 12 +U 1 +D 3 +U 10 +R 17 +L 2 +R 13 +L 4 +D 3 +U 9 +R 8 +U 3 +D 4 +L 17 +R 4 +L 9 +U 5 +D 16 +R 9 +U 17 +D 17 +U 5 +L 7 +U 9 +D 10 +R 14 +D 2 +U 2 +D 16 +L 2 +D 16 +U 17 +D 13 +U 4 +R 16 +D 12 +L 17 +R 10 +L 13 +R 17 +U 4 +D 17 +U 10 +R 12 +U 16 +D 6 +U 1 +L 1 +U 17 +R 6 +D 11 +L 3 +U 7 +L 12 +R 8 +U 16 +D 2 +U 12 +D 7 +U 9 +R 6 +U 7 +D 17 +U 6 +L 3 +U 7 +R 12 +L 16 +U 3 +R 12 +U 2 +D 3 +R 16 +L 4 +U 5 +L 8 +D 3 +R 9 +D 13 +R 2 +L 14 +R 2 +U 13 +R 14 +D 2 +U 16 +L 16 +D 11 +U 4 +L 3 +R 9 +U 12 +L 15 +U 8 +R 11 +L 16 +R 5 +U 6 +R 8 +U 16 +D 16 +L 3 +U 11 +R 9 +U 12 +D 18 +L 13 +D 3 +R 4 +L 10 +R 15 +U 13 +D 15 +U 12 +D 3 +L 1 +U 16 +L 3 +U 17 +L 10 +D 11 +R 16 +L 13 +R 18 +U 18 +R 7 +D 13 +R 15 +U 12 +R 1 +L 9 +U 16 +R 11 +L 11 +U 7 +R 14 +L 16 +U 3 +D 11 +U 17 +D 14 +U 14 +R 7 +U 4 +R 13 +U 4 +D 18 +U 14 +L 4 +R 5 +L 3 +R 14 +U 12 +D 17 +U 13 +D 8 +U 9 +L 1 +R 15 +U 3 +L 11 +R 5 +L 1 +D 14 +R 10 +U 16 +R 2 +U 17 +D 1 +L 5 +U 15 +R 4 +D 13 +R 5 +D 7 +L 3 +U 14 +R 7 +D 9 +L 9 +R 4 +U 6 +L 8 +U 3 +L 5 +D 4 +R 14 +L 13 +D 4 +U 13 +R 17 +L 14 +D 16 +R 1 +L 2 +D 8 +R 11 +L 10 +U 12 +R 4 +U 9 +L 4 +D 13 +L 10 +R 8 +L 1 +U 12 +L 16 +U 12 +D 9 +R 13 +L 2 +R 5 +L 1 +D 18 +U 6 +D 13 +U 17 +R 7 +U 5 +R 5 +L 12 +R 2 +U 4 +L 7 +U 11 +D 17 +L 7 +U 9 +D 1 +U 8 +L 15 +U 2 +D 9 +U 9 +D 10 +U 12 +R 19 +D 16 +L 10 +U 14 +L 18 +R 5 +U 6 +L 4 +U 18 +L 14 +R 2 +U 13 +D 18 +L 2 +U 6 +L 10 +D 9 +L 3 +D 1 +R 6 +U 7 +D 12 +U 1 +R 15 +U 7 +L 8 +R 8 +L 16 +U 8 +R 8 +U 11 +R 19 +U 2 +L 6 +R 1 +D 16 +U 3 +L 7 +D 10 +R 14 +D 11 +R 8 +U 14 +L 6 +D 14 +R 7 +U 18 +D 19 +R 4 +U 10 +R 14 +U 3 +L 12 +D 7 +U 18 +D 10 +L 8 +D 9 +L 6 +U 12 +R 1 +L 16 +R 2 +U 15 +R 14 +U 7 +L 6 +R 10 +D 18 +R 14 +U 3 +R 4 +D 17 +L 10 +U 19 +R 4 +D 12 +U 2 +D 18 +R 4 diff --git a/day9-rope-bridge.lisp b/day9-rope-bridge.lisp new file mode 100644 index 0000000..d67df26 --- /dev/null +++ b/day9-rope-bridge.lisp @@ -0,0 +1,209 @@ +;; https://adventofcode.com/2022/day/9 + +;; i have been thinking about this in a car on a way home. +;; first check - if any movement of Tail is needed - if any coord is more than 2 away +;; +;; then - if movement is needed - it's always done in 1 step into direction of Head. +;; - if difference is 0, no movement, otherwise (HeadX - TailX) / Abs(HeadX - TailX) +;; +;; and what's left is reading in changes to Head position, update of head position, +;; and calling generation of new Tail position from newHead and prevTail +;; +;; no need to worry about the borders, as Head is always closer to border? + +;; so, the field should be considered unbounded. and no coordinates for the starting point are given. +;; we are also to consider that in the beginning Head is on top of Tail. +;; ok. would my math work with negative coordinates? it really should +;; so, let's consider starting coordinates as (0,0) and also keep a set of all preivously visited coordinates by the Tail +;; and return its size +(defmacro get-x (pointCoords) + `(car ,pointCoords)) +(defmacro get-y (pointCoords) + `(cadr ,pointCoords)) + +(setf (get-x '(1 2)) 3) +(defparameter *test-list* (list 1 2)) +(setf (get-x *test-list*) 2) +(setf (get-y *test-list*) 7) + +(setf (first *test-list*) 3) +(get-y '(1 2)) + +(abs -1) + + +(defun tail-move-needed (headCoords tailCoords) + (flet ((diff-more-than-two (num1 num2) + (>= (abs (- num1 num2)) 2))) + (or (diff-more-than-two (get-x headcoords) (get-x tailcoords)) + (diff-more-than-two (get-y headcoords) (get-y tailcoords))))) + +(>= 2 2) +(tail-move-needed '(1 1) '(1 1)) +(tail-move-needed '(1 1) '(1 2)) +(tail-move-needed '(1 1) '(1 3)) +(tail-move-needed '(1 1) '(2 3)) +(tail-move-needed '(1 1) '(0 0)) + +(defun update-big-distance-coord (headcoord tailcoord) + (let* ((diff (- headcoord tailcoord)) + (change (if (eq diff 0) 0 (/ diff (abs diff))))) + (+ tailcoord change))) + +(defun update-big-distance-coords (headcoords tailcoords) + (let ((new-x (update-big-distance-coord (get-x headcoords) (get-x tailcoords))) + (new-y (update-big-distance-coord (get-y headcoords) (get-y tailcoords)))) + (list new-x new-y))) + +(update-big-distance-coords '(2 1) '(0 0)) +(update-big-distance-coords '(-2 0) '(0 0)) +(update-big-distance-coords '(0 -2) '(0 0)) + +(defun get-new-tail-coords (headcoords tailcoords) + (if (tail-move-needed headcoords tailcoords) + (update-big-distance-coords headcoords tailcoords) + tailcoords)) + +(get-new-tail-coords '(1 1) '(0 0)) +(get-new-tail-coords '(-1 0) '(0 0)) +(get-new-tail-coords '(1 -1) '(0 0)) + +;; ok, now i need to translate commands of type +;; R 4 +(defparameter *test-line* "R 4") +(require 'cl-ppcre) +(let ((split (cl-ppcre:split " " *test-line*))) + (setf (first split) (intern (first split))) + (setf (second split) (parse-integer (second split))) + split) + +(defun read-comman (line) + (let ((split (cl-ppcre:split " " line))) + (setf (first split) + (intern (first split))) + (setf (second split) + (parse-integer (second split))) + split)) + +(read-comman "U 5") + +(defun modify-head-coords (headcoords direction) + (case direction + (R (incf (get-x headcoords) 1)) + (L (incf (get-x headcoords) -1)) + (U (incf (get-y headcoords) 1)) + (D (incf (get-y headcoords) -1)))) + +(defparameter *test-coords* (list 0 0)) +(modify-head-coords *test-coords* 'L) +(modify-head-coords *test-coords* 'R) +(modify-head-coords *test-coords* 'U) +(modify-head-coords *test-coords* 'D) + +;; seems to work. +;; now loop and addint tail coords into set +(ql:quickload 'fset) +(defparameter *test-set* (fset:set '(0 0) '(1 1))) +(fset:with *test-set* '(3 1)) +(fset:with *test-set* '(1 1)) +;; yes, with equal, that's cool + +(loop + for i from 1 to 4 + do (print i)) +;; got I forgot most of what there is about input attribute +;; modification, when will that modification become visible on top? +;; when I've defined the value as parameter, so it's dynamic binding, +;; instead of lexical binding? +;; ((tail-coords-set (fset:empty-set)) +;; (headcoords (list 0 0)) +;; (tailcoords (list 0 0))) +(progn + (defvar tail-coords-set ) + (setq tail-coords-set (fset:empty-set)) + (defvar headcoords ) + (setq headcoords (list 0 0)) + (defvar tailcoords ) + (setq tailcoords (list 0 0))) + +(defun run-step (direction) + (modify-head-coords headcoords direction) + (setf tailcoords (get-new-tail-coords headcoords tailcoords)) + (setf tail-coords-set (fset:with tail-coords-set tailcoords)) + ;; (print (format t "~S ~S ~S~%" headcoords tailcoords direction)) + ) + +(defun run-command (repetitions direction) + (loop for i from 1 to repetitions + do (progn (run-step direction) + ;; (format t "~S ~S ~S ~S~%" headcoords tailcoords direction tail-coords-set) + ))) +(progn + (defvar tail-coords-set ) + (setq tail-coords-set (fset:empty-set)) + (defvar headcoords ) + (setq headcoords (list 0 0)) + (defvar tailcoords ) + (setq tailcoords (list 0 0)) + (with-open-file (in "day9-input.txt") + (loop + for line = (read-line in nil nil) + while line + do (let* + ((command (read-comman line)) + (direction (first command)) + (repetition (second command))) + (run-command repetition direction))) + (fset:size tail-coords-set))) + +;;; PART 2 +;; i kind of predicted that they'd want to generalize to longer rope. +;; ugh. but it still kind of works? +;; just have list of rope points? +;; and each step would be applying same step to some particular point +;; - logging is not much less useful +;; the points are H1234..9 +;; so, array of length 10 +(progn + (defvar *string-joints*) + ;; (setq *string-joints* (make-array 10 :initial-element '(0 0))) + ;; wow, here's example of code being AST directly from text + ;; now, it's problem with "initial-element" cool + (defvar *9-tail-coords-set*) + (loop + for i from 0 to 9 + do (setf (aref *string-joints* i) (list 0 0))) + (setq *9-tail-coords-set* (fset:empty-set))) + +(defun run-step-2 (direction) + (modify-head-coords (aref *string-joints* 0) direction) + (loop + for cur-joint-step from 1 to 9 + do (setf (aref *string-joints* cur-joint-step) + (get-new-tail-coords + (aref *string-joints* (1- cur-joint-step)) + (aref *string-joints* cur-joint-step)))) + (setf *9-tail-coords-set* + (fset:with *9-tail-coords-set* (aref *string-joints* 9)))) + +(defun run-command-2 (repetitions direction) + (loop for i from 1 to repetitions + do (progn (run-step-2 direction) + ;; (format t "~S ~S ~S ~S~%" headcoords tailcoords direction tail-coords-set) + ))) + +(progn + (loop + for i from 0 to 9 + do (setf (aref *string-joints* i) (list 0 0))) + (setq *9-tail-coords-set* (fset:empty-set)) + (with-open-file (in "day9-input.txt") + (loop + for line = (read-line in nil nil) + while line + do (let* + ((command (read-comman line)) + (direction (first command)) + (repetition (second command))) + (run-command-2 repetition direction))) + (fset:size *9-tail-coords-set*))) diff --git a/day9-test-bigger.txt b/day9-test-bigger.txt new file mode 100644 index 0000000..60bd43b --- /dev/null +++ b/day9-test-bigger.txt @@ -0,0 +1,8 @@ +R 5 +U 8 +L 8 +D 3 +R 17 +D 10 +L 25 +U 20 diff --git a/day9-test.txt b/day9-test.txt new file mode 100644 index 0000000..9874df2 --- /dev/null +++ b/day9-test.txt @@ -0,0 +1,8 @@ +R 4 +U 4 +L 3 +D 1 +R 4 +D 1 +L 5 +R 2