diff --git a/2022/09/input b/2022/09/input new file mode 100644 index 0000000..376a293 --- /dev/null +++ b/2022/09/input @@ -0,0 +1,2000 @@ +L 2 +D 2 +U 1 +R 1 +U 2 +D 1 +L 1 +D 1 +R 2 +D 2 +U 1 +R 2 +U 2 +R 2 +U 2 +L 2 +U 2 +L 2 +U 1 +D 1 +L 1 +R 1 +U 2 +R 2 +D 1 +U 2 +L 1 +U 2 +L 2 +D 2 +R 1 +U 2 +R 2 +U 1 +D 1 +L 1 +U 2 +L 2 +D 1 +U 1 +R 2 +D 2 +R 1 +D 1 +L 1 +R 2 +U 1 +L 1 +D 2 +U 2 +D 1 +L 1 +R 1 +U 1 +D 1 +R 2 +D 2 +R 1 +D 2 +L 1 +D 2 +L 1 +U 2 +R 1 +L 1 +U 2 +L 2 +D 2 +R 2 +L 1 +U 2 +R 1 +U 2 +R 2 +L 2 +D 2 +R 1 +L 1 +D 1 +L 1 +U 2 +L 2 +D 2 +L 2 +U 1 +R 2 +U 1 +R 2 +D 2 +U 1 +R 1 +U 2 +R 2 +L 1 +U 2 +L 1 +U 2 +L 1 +U 1 +R 2 +U 2 +L 1 +D 2 +U 1 +L 2 +U 2 +D 2 +U 1 +D 1 +R 1 +D 2 +U 2 +R 2 +L 2 +R 2 +U 1 +L 2 +R 3 +D 2 +L 1 +R 1 +D 3 +U 3 +R 2 +L 3 +U 1 +L 3 +U 2 +L 2 +U 3 +D 2 +R 1 +U 1 +R 3 +U 2 +D 2 +U 3 +D 3 +L 2 +U 2 +L 3 +U 1 +R 1 +D 3 +L 1 +R 2 +U 1 +L 2 +D 1 +U 2 +L 2 +U 1 +D 1 +U 1 +R 3 +U 3 +R 2 +U 1 +D 1 +U 2 +D 1 +R 1 +U 3 +R 1 +U 3 +R 1 +U 2 +D 1 +L 1 +D 1 +L 1 +D 1 +U 1 +L 2 +R 2 +U 2 +L 3 +U 1 +D 1 +R 3 +U 1 +L 2 +R 1 +D 1 +R 3 +D 2 +U 2 +D 1 +R 1 +U 1 +D 1 +U 1 +D 3 +U 1 +L 3 +D 1 +R 2 +U 2 +R 2 +U 1 +R 2 +D 2 +L 3 +U 1 +D 1 +L 3 +U 3 +R 1 +U 3 +D 3 +L 3 +D 3 +L 2 +R 2 +U 2 +R 1 +U 2 +D 2 +U 2 +L 2 +R 1 +U 3 +R 4 +L 2 +R 4 +D 2 +R 2 +L 2 +R 2 +D 1 +U 2 +D 3 +R 1 +U 1 +D 4 +R 4 +L 1 +U 1 +D 2 +L 2 +R 3 +U 2 +L 3 +R 4 +U 3 +L 3 +D 4 +R 3 +L 2 +U 3 +D 1 +L 2 +U 3 +L 1 +D 2 +R 1 +D 4 +L 2 +R 4 +U 4 +L 2 +R 2 +D 4 +L 3 +U 3 +L 2 +U 2 +L 4 +D 2 +R 4 +D 1 +L 4 +U 4 +R 1 +U 4 +D 2 +R 2 +U 3 +L 1 +R 4 +U 3 +R 3 +U 4 +L 2 +D 3 +L 4 +R 2 +L 4 +D 4 +U 1 +L 2 +D 4 +R 1 +U 3 +R 1 +U 4 +L 1 +D 4 +U 2 +L 4 +U 1 +R 2 +U 4 +L 2 +D 3 +L 2 +U 4 +D 2 +L 3 +D 1 +U 4 +D 1 +L 4 +U 3 +R 3 +L 2 +R 2 +U 2 +D 2 +L 1 +U 4 +R 2 +L 3 +R 1 +U 4 +L 2 +U 4 +L 2 +U 3 +L 2 +R 3 +U 3 +L 2 +D 4 +R 3 +U 2 +L 3 +D 3 +R 4 +U 1 +R 3 +D 5 +U 1 +L 1 +R 5 +D 2 +L 3 +U 5 +D 3 +L 3 +D 1 +U 3 +R 2 +U 5 +L 2 +D 2 +L 5 +U 2 +D 5 +R 1 +U 1 +R 5 +L 4 +D 4 +R 2 +U 5 +D 5 +L 1 +R 2 +U 4 +L 2 +D 1 +L 5 +D 1 +R 3 +L 2 +R 4 +D 1 +R 4 +U 4 +L 1 +U 2 +D 5 +U 4 +L 3 +D 3 +R 3 +D 5 +L 2 +U 5 +R 3 +L 5 +R 4 +U 4 +R 3 +L 2 +D 4 +L 2 +U 1 +R 3 +L 2 +R 3 +L 5 +U 1 +L 2 +R 1 +D 3 +R 4 +L 2 +D 2 +R 4 +D 3 +L 5 +D 2 +L 4 +R 3 +L 3 +D 2 +R 5 +U 4 +R 4 +U 3 +L 4 +U 1 +R 4 +D 4 +U 1 +L 3 +U 1 +L 1 +R 4 +D 1 +U 3 +D 2 +R 3 +L 3 +U 2 +R 4 +D 4 +L 1 +R 5 +U 1 +L 2 +U 2 +R 4 +U 4 +R 2 +D 2 +U 3 +L 5 +D 4 +L 5 +D 1 +L 2 +D 4 +R 6 +L 3 +D 5 +R 3 +L 5 +R 5 +D 1 +R 3 +L 5 +R 5 +L 6 +R 4 +L 2 +R 5 +D 3 +U 1 +R 4 +D 2 +R 2 +L 6 +U 2 +R 5 +U 5 +L 3 +R 6 +L 6 +D 3 +L 1 +R 1 +L 1 +D 5 +L 4 +U 3 +D 5 +L 1 +U 6 +R 5 +D 6 +U 1 +D 5 +L 3 +D 5 +R 6 +U 2 +D 1 +L 4 +D 5 +R 2 +U 5 +R 4 +L 1 +R 2 +L 1 +R 2 +L 6 +U 2 +D 3 +R 5 +D 3 +L 4 +R 4 +D 1 +R 6 +D 1 +R 4 +L 3 +D 6 +L 5 +D 2 +R 1 +L 3 +R 2 +L 6 +D 4 +U 5 +R 6 +U 3 +D 2 +R 4 +L 6 +U 4 +L 2 +U 2 +L 1 +U 5 +D 1 +L 2 +U 1 +D 2 +L 1 +R 4 +U 4 +L 4 +D 4 +R 3 +D 6 +L 2 +U 4 +R 1 +L 2 +U 3 +L 6 +U 6 +R 3 +D 7 +U 4 +R 6 +L 6 +D 7 +L 5 +U 1 +R 2 +U 7 +D 5 +L 7 +R 2 +U 3 +R 7 +D 5 +L 2 +U 2 +R 3 +U 5 +R 3 +D 4 +R 4 +U 3 +L 6 +R 2 +D 7 +U 6 +D 1 +U 3 +R 3 +D 4 +R 6 +U 4 +L 3 +D 3 +R 4 +L 2 +D 1 +R 3 +U 6 +R 5 +U 3 +L 5 +R 5 +D 4 +U 3 +L 7 +U 7 +D 3 +U 1 +D 1 +U 1 +D 3 +L 5 +R 4 +U 6 +R 7 +D 2 +L 3 +R 2 +U 3 +D 2 +L 5 +D 7 +R 6 +D 1 +U 5 +D 7 +U 6 +D 4 +L 6 +D 4 +L 2 +D 7 +R 6 +L 3 +D 2 +L 3 +D 2 +U 6 +L 1 +R 2 +U 5 +L 5 +R 2 +U 6 +R 3 +L 7 +R 4 +D 7 +L 7 +D 6 +L 4 +D 2 +R 6 +L 1 +D 3 +U 6 +D 7 +U 1 +L 5 +D 7 +U 3 +R 3 +L 7 +D 2 +L 7 +U 5 +D 4 +R 3 +D 8 +R 7 +U 1 +R 8 +U 4 +D 5 +R 6 +L 5 +D 5 +L 7 +R 7 +U 4 +D 2 +L 7 +U 8 +D 6 +L 5 +D 2 +L 6 +U 6 +R 5 +U 5 +L 6 +U 5 +L 3 +U 4 +D 7 +R 3 +L 4 +R 7 +D 1 +R 5 +D 2 +R 8 +L 8 +U 8 +L 6 +U 5 +L 1 +U 6 +R 2 +U 4 +L 5 +R 2 +D 8 +L 1 +U 4 +R 6 +U 1 +L 4 +R 7 +L 8 +R 5 +U 5 +R 3 +L 3 +U 2 +D 8 +L 8 +R 4 +U 3 +D 3 +L 1 +R 8 +U 3 +L 8 +D 8 +U 7 +D 8 +L 3 +U 5 +D 7 +L 7 +U 5 +L 3 +R 6 +D 7 +R 1 +D 7 +L 5 +U 3 +D 5 +U 1 +L 2 +D 4 +U 5 +R 1 +L 6 +U 3 +L 1 +D 6 +R 1 +L 1 +R 3 +L 4 +U 6 +R 3 +U 8 +L 2 +U 3 +R 1 +D 5 +R 2 +U 2 +D 8 +L 3 +D 2 +R 8 +D 1 +L 3 +U 1 +D 8 +U 1 +L 2 +D 4 +R 3 +L 4 +D 3 +L 2 +D 4 +L 6 +U 6 +D 9 +U 5 +R 9 +D 1 +R 8 +L 9 +R 7 +D 5 +U 1 +L 1 +R 8 +U 3 +R 4 +L 2 +R 1 +D 6 +U 5 +D 6 +L 9 +R 2 +D 2 +R 8 +D 2 +R 3 +U 1 +L 1 +U 1 +L 1 +U 3 +D 9 +R 2 +U 1 +D 1 +R 6 +D 7 +L 9 +U 4 +L 7 +U 8 +D 8 +L 3 +D 9 +L 4 +D 8 +U 9 +L 9 +D 7 +U 7 +D 2 +L 4 +D 5 +L 5 +U 6 +D 8 +L 5 +U 9 +L 4 +U 3 +D 4 +R 9 +U 4 +D 7 +L 6 +R 7 +L 5 +U 5 +L 8 +D 3 +L 5 +U 7 +D 6 +U 3 +R 1 +D 8 +U 3 +L 8 +U 9 +R 1 +U 1 +L 3 +R 6 +U 5 +R 7 +U 4 +R 4 +L 8 +U 4 +L 9 +R 7 +D 6 +R 8 +U 9 +D 8 +L 3 +R 7 +U 1 +L 9 +R 2 +L 3 +D 6 +R 9 +D 1 +L 3 +D 4 +U 2 +D 9 +R 9 +U 3 +R 2 +D 3 +U 7 +L 4 +D 6 +R 3 +D 8 +U 4 +R 8 +U 6 +R 5 +L 5 +U 2 +D 1 +R 5 +U 9 +D 3 +L 5 +R 8 +U 2 +D 9 +R 5 +U 4 +L 7 +U 4 +D 6 +U 7 +D 1 +L 6 +U 7 +D 6 +L 3 +D 8 +U 1 +L 1 +U 9 +L 2 +U 4 +D 2 +R 8 +U 3 +R 8 +L 4 +U 3 +L 7 +U 7 +D 7 +R 7 +L 2 +U 6 +R 1 +U 7 +D 6 +L 1 +R 5 +L 7 +R 1 +D 7 +U 9 +D 9 +L 1 +D 10 +U 10 +L 2 +R 9 +L 1 +R 3 +U 8 +L 1 +R 2 +L 2 +U 2 +D 1 +U 5 +R 5 +D 7 +L 6 +D 2 +L 10 +U 10 +D 4 +L 10 +R 10 +U 5 +L 7 +R 10 +D 1 +L 8 +D 3 +U 7 +R 2 +D 7 +U 4 +L 3 +R 4 +L 10 +U 3 +L 5 +R 4 +D 3 +R 9 +L 9 +R 6 +U 5 +L 5 +R 11 +U 6 +L 11 +R 9 +D 5 +U 7 +L 8 +R 5 +U 11 +D 6 +L 9 +D 5 +L 2 +D 2 +R 4 +L 1 +D 10 +L 9 +R 6 +D 2 +L 11 +D 4 +R 5 +D 2 +R 8 +D 3 +L 1 +R 11 +D 1 +L 11 +D 7 +L 5 +U 7 +D 4 +L 7 +U 11 +L 3 +U 7 +L 2 +D 6 +R 1 +D 3 +R 1 +L 1 +D 11 +L 6 +U 1 +R 9 +U 8 +D 8 +L 2 +R 6 +U 10 +R 7 +L 5 +U 1 +R 4 +L 2 +D 11 +L 10 +U 7 +L 10 +D 1 +R 6 +U 2 +D 7 +R 7 +D 2 +R 10 +U 8 +D 5 +U 2 +L 11 +R 9 +D 7 +U 3 +R 6 +U 6 +D 7 +U 6 +L 2 +R 11 +L 10 +D 7 +U 10 +D 3 +R 10 +L 4 +D 8 +R 5 +L 5 +D 9 +U 8 +R 3 +D 10 +R 11 +U 5 +D 11 +L 2 +D 8 +L 7 +U 4 +D 5 +U 9 +D 3 +U 11 +D 4 +L 1 +U 4 +L 3 +R 7 +L 12 +D 10 +U 8 +L 6 +D 11 +U 5 +L 2 +D 6 +L 5 +U 8 +L 4 +U 6 +R 9 +D 2 +L 6 +U 12 +R 2 +L 10 +R 7 +U 7 +L 5 +R 6 +U 5 +R 7 +D 6 +R 4 +U 6 +L 4 +U 4 +L 4 +U 3 +D 3 +L 9 +D 12 +R 10 +U 3 +L 1 +U 4 +L 8 +R 4 +D 6 +L 2 +D 7 +L 9 +U 3 +L 11 +R 9 +D 8 +L 1 +D 11 +R 8 +L 6 +U 7 +R 5 +U 3 +D 4 +R 4 +U 5 +L 6 +U 10 +D 2 +R 8 +U 7 +D 4 +L 11 +R 9 +U 9 +D 12 +U 8 +R 4 +U 5 +D 11 +L 5 +R 5 +D 2 +L 12 +U 4 +L 1 +R 9 +L 5 +D 1 +R 2 +L 2 +D 7 +L 12 +D 2 +R 7 +U 10 +L 1 +U 2 +L 8 +D 5 +L 7 +U 8 +L 8 +U 10 +D 7 +R 8 +D 7 +R 9 +L 7 +D 1 +R 3 +D 4 +R 11 +D 3 +L 5 +D 7 +U 8 +L 2 +D 10 +L 12 +R 7 +U 13 +R 4 +U 10 +L 10 +D 6 +U 7 +D 12 +U 2 +D 8 +L 1 +R 5 +D 9 +L 1 +R 11 +L 2 +D 7 +L 13 +U 1 +L 8 +D 2 +U 12 +L 6 +R 10 +L 10 +R 9 +U 3 +R 1 +L 10 +D 2 +L 4 +D 8 +U 7 +L 11 +D 8 +U 1 +D 1 +L 2 +D 2 +L 5 +U 6 +D 1 +U 6 +R 2 +L 2 +D 5 +U 2 +R 10 +L 4 +D 3 +L 11 +D 11 +U 4 +D 4 +R 12 +D 11 +U 2 +R 11 +U 3 +R 8 +U 8 +L 5 +R 12 +U 1 +L 10 +R 11 +L 3 +U 6 +D 2 +R 7 +D 13 +L 11 +R 8 +L 8 +R 1 +L 5 +D 13 +R 8 +L 12 +D 13 +R 10 +U 5 +D 13 +U 6 +L 2 +D 2 +U 7 +D 4 +L 4 +R 5 +L 12 +U 6 +D 8 +U 7 +D 12 +R 11 +L 11 +D 9 +R 4 +D 3 +L 5 +R 6 +D 9 +R 3 +U 10 +R 10 +U 3 +D 11 +L 3 +D 5 +R 14 +U 7 +R 3 +D 1 +L 4 +U 6 +D 6 +R 10 +L 12 +R 10 +L 4 +U 10 +R 8 +D 14 +L 6 +U 7 +D 4 +L 9 +R 10 +D 10 +L 4 +R 6 +U 8 +D 10 +L 12 +U 11 +L 7 +R 1 +U 1 +R 12 +U 7 +D 3 +U 4 +R 3 +D 6 +U 2 +R 2 +U 14 +D 10 +R 5 +L 12 +U 5 +D 6 +R 7 +L 13 +D 11 +R 6 +D 11 +R 6 +D 6 +U 10 +L 14 +D 4 +R 14 +D 7 +U 12 +L 3 +U 2 +D 3 +R 1 +D 3 +U 2 +D 13 +L 14 +R 13 +U 3 +D 12 +L 14 +U 12 +D 6 +R 2 +U 6 +L 11 +D 3 +L 7 +D 7 +R 11 +D 11 +R 10 +L 2 +U 12 +L 14 +U 11 +R 12 +L 4 +D 2 +R 13 +L 1 +U 7 +L 2 +D 7 +L 14 +R 11 +U 1 +L 7 +U 11 +L 6 +U 1 +D 11 +L 14 +R 4 +L 1 +D 14 +U 7 +L 6 +R 3 +L 2 +U 10 +D 3 +R 4 +U 7 +R 11 +U 7 +R 13 +U 2 +L 12 +R 9 +L 15 +R 4 +U 5 +D 7 +L 10 +R 9 +D 5 +L 14 +U 9 +R 3 +L 15 +R 5 +L 10 +D 5 +U 3 +D 9 +U 13 +D 15 +R 10 +L 9 +R 9 +U 4 +D 2 +L 3 +R 5 +L 11 +R 7 +L 15 +D 12 +L 13 +D 4 +R 2 +U 14 +D 9 +L 1 +D 1 +L 6 +U 9 +D 14 +U 2 +L 1 +R 10 +U 14 +R 4 +D 11 +R 6 +D 11 +U 9 +R 2 +L 6 +R 10 +L 4 +D 7 +R 11 +U 5 +L 2 +D 5 +U 6 +R 8 +U 4 +R 9 +D 15 +R 8 +L 10 +U 5 +L 4 +U 7 +L 3 +U 5 +R 2 +U 13 +L 9 +U 4 +D 13 +R 1 +D 15 +U 4 +L 7 +D 12 +L 8 +U 6 +L 10 +U 13 +R 12 +D 13 +U 6 +D 13 +U 2 +L 13 +U 7 +L 8 +U 6 +D 2 +U 13 +L 2 +D 13 +R 3 +D 2 +L 11 +D 13 +U 1 +D 12 +L 9 +U 2 +R 9 +U 16 +D 6 +L 16 +D 15 +R 7 +U 3 +D 11 +L 8 +U 3 +L 15 +R 7 +D 14 +L 8 +R 7 +U 12 +R 11 +U 2 +R 13 +D 9 +L 4 +U 14 +L 6 +D 7 +L 10 +U 14 +D 8 +L 6 +D 3 +L 6 +D 12 +U 13 +R 9 +L 6 +U 9 +R 9 +D 13 +R 13 +U 13 +L 4 +D 1 +R 8 +L 1 +R 15 +U 15 +R 14 +D 9 +L 5 +D 2 +L 14 +U 14 +L 15 +R 10 +U 11 +L 7 +R 12 +U 7 +L 7 +D 9 +U 1 +L 11 +R 11 +D 13 +U 7 +R 7 +U 7 +R 8 +D 12 +U 11 +D 14 +U 16 +L 5 +R 8 +D 2 +L 10 +D 14 +R 16 +D 13 +U 14 +L 6 +R 11 +D 4 +R 15 +D 2 +R 3 +L 2 +U 8 +L 4 +D 5 +U 3 +L 11 +U 7 +R 14 +U 4 +L 5 +D 10 +U 16 +L 1 +U 5 +R 11 +D 16 +U 5 +D 11 +R 5 +D 9 +R 3 +U 13 +D 6 +L 10 +D 2 +U 4 +D 7 +U 1 +R 10 +D 6 +U 12 +L 2 +D 8 +U 5 +L 5 +U 7 +L 3 +U 16 +D 12 +L 12 +R 16 +L 5 +R 17 +L 7 +U 17 +D 15 +R 14 +L 7 +U 16 +R 7 +D 7 +R 14 +D 6 +L 7 +U 6 +R 5 +D 14 +L 8 +R 3 +L 1 +U 12 +L 8 +D 11 +R 3 +D 11 +L 16 +R 4 +U 2 +R 17 +U 10 +R 3 +U 13 +R 6 +D 16 +U 15 +R 3 +U 7 +D 6 +U 2 +L 12 +D 11 +L 6 +D 9 +R 7 +U 10 +R 14 +D 10 +R 10 +D 17 +R 9 +L 11 +R 7 +D 14 +L 10 +U 17 +R 5 +D 12 +U 11 +D 11 +R 7 +D 12 +U 10 +D 10 +U 8 +D 11 +R 8 +U 9 +L 17 +D 15 +R 2 +D 14 +L 10 +U 2 +L 9 +R 15 +L 8 +D 9 +L 7 +R 10 +D 6 +L 15 +U 1 +L 11 +R 14 +L 7 +R 17 +U 17 +L 8 +U 16 +D 4 +R 9 +L 13 +R 5 +L 1 +D 14 +U 7 +L 8 +R 10 +U 10 +D 16 +U 6 +R 13 +D 12 +U 10 +L 3 +U 2 +R 7 +D 12 +R 16 +D 1 +L 14 +R 9 +D 18 +R 1 +L 17 +R 9 +U 16 +L 5 +U 12 +R 7 +D 6 +L 17 +U 3 +R 5 +U 13 +D 9 +U 12 +L 13 +D 5 +R 1 +U 7 +L 4 +R 13 +D 1 +L 15 +U 11 +L 5 +D 2 +R 12 +D 12 +U 5 +L 1 +R 5 +U 3 +R 5 +L 9 +R 15 +U 3 +D 18 +L 10 +R 2 +D 7 +R 13 +L 8 +R 5 +L 2 +R 15 +D 12 +L 14 +U 15 +L 8 +U 13 +R 13 +L 15 +R 16 +D 10 +L 15 +U 1 +R 1 +D 3 +U 17 +D 2 +L 5 +R 17 +U 6 +R 10 +L 3 +D 11 +R 13 +D 5 +U 3 +D 9 +U 10 +R 12 +D 10 +R 15 +U 11 +L 6 +R 3 +U 4 +D 7 +R 12 +L 5 +R 7 +D 17 +L 14 +U 9 +D 7 +U 2 +R 1 +D 13 +R 3 +D 12 +L 3 +U 17 +D 1 +U 6 +L 8 +U 17 +D 1 +R 6 +L 8 +R 8 +U 5 +L 12 +D 8 +R 5 +L 11 +U 17 +L 3 +U 11 +L 1 +R 15 +D 15 +L 10 +D 10 +L 19 +R 11 +L 4 +D 11 +L 13 +U 4 +D 6 +L 3 +U 11 +R 3 +L 9 +D 4 +U 10 +L 14 +D 10 +R 11 +L 1 +R 1 +D 8 +R 19 +D 6 +L 16 +D 1 +U 13 +R 19 +U 19 +D 3 +R 8 +D 16 +R 2 +D 2 +L 19 +D 7 +R 2 +U 4 +L 5 +R 2 +U 9 +L 5 +D 13 +L 5 +R 14 +L 13 +D 5 +U 10 +R 12 +L 11 +D 18 +U 7 +L 12 +R 11 +D 16 +U 15 +L 12 +R 12 +D 1 +R 2 +D 6 +L 15 +D 8 +R 19 +U 9 +R 12 +L 10 +R 3 +D 19 +R 15 +U 12 +R 6 +L 3 +D 17 +R 2 +U 11 +D 12 +L 15 +D 16 +R 18 +D 16 +U 12 +R 16 +U 17 +R 15 +L 10 +R 4 +D 12 +L 5 +R 11 +L 1 +U 11 +R 3 +D 5 diff --git a/2022/09/part1 b/2022/09/part1 new file mode 100755 index 0000000..aff9073 --- /dev/null +++ b/2022/09/part1 @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +import math + +MOVES = { + 'U': ( 0, -1), + 'D': ( 0, +1), + 'L': (-1, 0), + 'R': (+1, 0), +} + +TAIL_POSITIONS = set([]) +HEAD = (0, 0) +TAIL = (0, 0) + +def point_add(a, b): + return tuple(map(lambda i, j: i + j, a, b)) + +def move(delta): + global TAIL_POSITIONS, HEAD, TAIL + + last_head = HEAD + HEAD = point_add(HEAD, delta) + + if ed := math.dist(HEAD, TAIL) < 2.0: + _ # do nothing + elif ed == 2.0: + TAIL = point_add(TAIL, delta) + else: + TAIL = last_head + + TAIL_POSITIONS.add(TAIL) + +with open('input') as f: + for line in f: + direction, count = line.rstrip().split(" ") + for _ in range(int(count)): + move(MOVES[direction]) + +print(len(TAIL_POSITIONS)) diff --git a/2022/09/part2 b/2022/09/part2 new file mode 100755 index 0000000..a634866 --- /dev/null +++ b/2022/09/part2 @@ -0,0 +1,60 @@ +#!/usr/bin/env python + +import math + +MOVES = { + 'U': ( 0, -1), + 'D': ( 0, +1), + 'L': (-1, 0), + 'R': (+1, 0), +} + +TAIL_POSITIONS = set([]) +HEAD = (0, 0) +TAILS = [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)] + +def point_add(a, b): + return tuple(map(lambda i, j: i + j, a, b)) + +def move(delta): + global TAIL_POSITIONS, HEAD, TAIL + + HEAD = point_add(HEAD, delta) + + leader = HEAD + for idx, tail in enumerate(TAILS): + ed = math.dist(leader, tail); + if ed < 2.0: + _ # do nothing + elif ed == 2.0: # follow the leader: linear + x, y = 0,0 + if leader[0] < tail[0]: + x = -1 + elif leader[0] > tail[0]: + x = 1 + if leader[1] < tail[1]: + y = -1 + elif leader[1] > tail[1]: + y = 1 + TAILS[idx] = point_add(tail, (x,y)) + else: # follow the leader: diagonal + x, y = 1, 1 + if leader[0] < tail[0]: + x = -1 + if leader[1] < tail[1]: + y = -1 + TAILS[idx] = point_add(tail, (x,y)) + + leader = TAILS[idx] + + TAIL_POSITIONS.add(TAILS[-1]) + + + +with open('input') as f: + for line in f: + direction, count = line.rstrip().split(" ") + for _ in range(int(count)): + move(MOVES[direction]) + +print(len(TAIL_POSITIONS)) diff --git a/README.md b/README.md index 8d0df54..bc7085c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ a programming language I'm interested in learning more about. 2018, 2019, and 2020 were in their own separate repositories, but have been `git subtree`'d into this one - no point creating a new repository every year. -* [2022](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2022) 🌟 `16` - Python +* [2022](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2022) 🌟 `18` - Python * [2021](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2021) 🌟 ` 5` - Python * [2020](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2020) 🌟 `20` - Javascript * [2019](https://code.ur.gs/lupine/advent-of-code/src/branch/main/2019) 🌟 `22` - Zig @@ -18,6 +18,6 @@ a programming language I'm interested in learning more about. * 2016 🌟 `16` - LISP? * 2015 🌟 ` 9` - Ruby? -Total: 🌟 `94` +Total: 🌟 `96` Maybe I'll backfill some of the old years one day.