diff options
Diffstat (limited to 'AoC2022')
-rw-r--r-- | AoC2022/09/input | 2000 | ||||
-rw-r--r-- | AoC2022/09/solver.el | 78 |
2 files changed, 2078 insertions, 0 deletions
diff --git a/AoC2022/09/input b/AoC2022/09/input new file mode 100644 index 0000000..b429d1b --- /dev/null +++ b/AoC2022/09/input @@ -0,0 +1,2000 @@ +R 1 +U 1 +D 1 +U 1 +R 2 +D 2 +R 2 +D 2 +R 1 +U 1 +L 1 +U 2 +D 2 +R 1 +D 1 +R 2 +U 2 +R 2 +L 2 +D 2 +L 2 +U 2 +D 2 +L 2 +R 2 +D 1 +U 2 +D 2 +U 1 +L 2 +D 2 +R 1 +U 2 +D 2 +L 1 +D 2 +L 2 +R 2 +U 2 +D 2 +U 1 +R 1 +U 1 +D 1 +R 2 +L 2 +D 1 +U 1 +R 1 +L 1 +U 1 +D 1 +L 1 +U 1 +D 1 +U 2 +D 2 +U 1 +D 1 +U 1 +L 1 +R 2 +L 1 +D 1 +U 1 +R 1 +L 2 +U 2 +L 2 +U 2 +D 1 +R 2 +D 2 +L 2 +R 1 +U 2 +R 1 +D 2 +L 1 +D 1 +L 1 +D 2 +R 1 +U 1 +L 1 +U 2 +D 2 +L 1 +U 2 +D 2 +R 1 +U 1 +R 1 +L 2 +D 1 +L 2 +U 2 +L 2 +D 2 +L 2 +D 2 +U 1 +L 1 +U 2 +R 1 +D 1 +R 1 +D 1 +R 1 +D 2 +U 1 +R 1 +U 1 +R 1 +D 1 +U 3 +L 2 +R 2 +L 3 +R 1 +L 1 +U 2 +L 1 +U 3 +D 3 +L 3 +D 2 +L 3 +U 1 +L 1 +R 2 +D 3 +L 1 +R 1 +U 2 +L 2 +D 3 +U 2 +D 3 +R 3 +U 1 +D 3 +L 3 +R 2 +U 3 +D 1 +U 1 +R 1 +L 2 +R 1 +L 2 +D 3 +L 1 +D 3 +R 2 +U 1 +D 1 +R 3 +D 1 +L 1 +U 2 +D 1 +L 3 +U 3 +R 1 +D 1 +U 3 +D 2 +L 3 +R 2 +L 1 +D 2 +U 1 +R 2 +L 1 +U 2 +R 2 +L 2 +U 2 +L 2 +U 2 +R 1 +U 2 +D 3 +U 1 +D 1 +L 2 +U 1 +L 2 +R 3 +L 2 +R 3 +L 1 +R 2 +L 2 +R 1 +D 3 +L 3 +D 2 +R 1 +D 1 +U 1 +D 2 +R 3 +U 3 +D 3 +R 3 +L 1 +U 1 +R 3 +U 2 +L 1 +R 1 +L 3 +D 3 +R 2 +U 1 +L 2 +D 2 +R 1 +U 3 +D 2 +R 1 +L 4 +D 3 +R 3 +L 1 +D 1 +R 3 +U 3 +L 2 +D 4 +U 3 +D 2 +L 4 +D 2 +R 1 +D 3 +R 3 +D 1 +U 4 +R 1 +U 4 +D 2 +U 4 +L 1 +R 1 +L 2 +R 1 +D 1 +L 4 +U 1 +R 4 +D 3 +R 1 +U 3 +R 3 +U 2 +L 3 +U 2 +L 2 +R 4 +U 2 +D 3 +R 4 +D 1 +U 4 +D 3 +R 2 +D 3 +R 1 +D 1 +U 1 +R 3 +L 1 +U 3 +L 1 +D 3 +L 3 +D 3 +R 3 +D 3 +U 1 +R 4 +D 2 +R 2 +U 1 +R 1 +D 1 +L 4 +D 2 +L 1 +U 4 +D 1 +L 2 +U 4 +D 3 +U 3 +L 2 +R 2 +D 1 +L 4 +D 2 +R 3 +D 4 +R 4 +U 1 +D 1 +L 2 +R 1 +D 4 +R 2 +L 1 +D 4 +L 3 +R 3 +U 4 +R 3 +D 3 +L 2 +R 1 +D 3 +L 2 +R 3 +D 1 +L 2 +U 3 +R 4 +D 4 +U 3 +R 2 +D 3 +R 3 +D 1 +R 4 +U 3 +R 5 +U 1 +D 2 +R 5 +U 1 +R 3 +L 1 +U 1 +L 1 +D 1 +R 5 +U 2 +D 3 +R 4 +L 5 +R 2 +D 1 +L 2 +U 2 +D 3 +R 5 +D 2 +R 5 +D 5 +U 5 +D 1 +L 5 +U 3 +D 2 +R 1 +D 5 +R 2 +D 2 +R 5 +U 3 +L 2 +U 1 +L 4 +R 5 +L 3 +R 2 +U 2 +D 3 +L 1 +U 3 +L 4 +R 5 +L 1 +U 4 +L 1 +D 5 +R 3 +U 5 +R 3 +L 2 +U 4 +D 2 +U 4 +L 1 +U 1 +L 1 +R 4 +D 4 +U 4 +R 5 +D 2 +U 2 +L 3 +U 4 +D 3 +L 2 +R 4 +U 1 +L 3 +R 3 +D 1 +L 2 +R 5 +U 2 +L 2 +R 2 +L 4 +D 4 +L 2 +U 4 +R 2 +L 3 +U 4 +L 5 +D 5 +L 5 +U 3 +L 5 +R 2 +D 4 +L 5 +U 3 +D 2 +L 2 +D 2 +U 2 +D 4 +R 5 +U 5 +L 3 +R 5 +D 3 +L 1 +D 1 +L 1 +D 5 +R 2 +L 1 +U 2 +L 3 +U 2 +R 2 +L 5 +R 3 +U 2 +R 1 +L 4 +D 4 +U 3 +R 2 +L 2 +D 3 +L 2 +R 4 +L 1 +U 6 +R 2 +D 5 +L 4 +U 3 +R 6 +D 6 +L 4 +D 3 +R 2 +D 2 +L 2 +R 2 +D 4 +L 6 +D 3 +L 5 +R 4 +L 5 +U 3 +L 6 +U 5 +L 3 +R 2 +U 3 +L 1 +D 1 +L 3 +U 4 +L 5 +D 3 +L 2 +U 5 +D 4 +L 3 +R 1 +U 3 +D 4 +U 3 +D 3 +U 6 +D 4 +R 3 +U 6 +R 1 +U 3 +R 3 +U 3 +R 5 +U 6 +L 1 +R 2 +D 5 +U 3 +D 4 +U 4 +D 4 +L 1 +U 4 +D 3 +L 1 +U 5 +R 3 +U 3 +R 1 +U 1 +L 3 +R 3 +U 4 +R 1 +L 3 +U 2 +L 2 +D 2 +L 4 +U 4 +L 3 +U 4 +R 2 +U 1 +D 2 +U 2 +D 5 +L 5 +R 1 +D 3 +L 4 +R 3 +D 6 +U 7 +D 5 +L 7 +D 5 +U 3 +D 1 +L 2 +R 2 +D 7 +U 7 +D 3 +L 2 +U 1 +L 6 +D 5 +R 4 +U 3 +R 5 +U 6 +L 6 +U 6 +L 1 +R 5 +U 7 +R 5 +U 5 +R 4 +U 5 +D 6 +R 4 +D 7 +L 7 +U 5 +R 2 +U 7 +R 3 +D 5 +R 5 +D 4 +U 1 +L 6 +R 4 +D 6 +L 6 +R 2 +U 7 +L 3 +D 5 +L 4 +R 3 +L 1 +U 3 +D 3 +R 5 +U 1 +L 6 +U 7 +R 7 +D 4 +L 4 +U 6 +R 7 +U 4 +R 1 +L 1 +R 4 +U 7 +D 1 +U 5 +D 3 +R 7 +L 1 +D 4 +U 6 +D 2 +L 3 +U 1 +D 6 +L 1 +D 5 +R 3 +U 3 +L 6 +D 5 +R 4 +U 5 +L 4 +R 4 +U 7 +R 1 +L 7 +U 2 +R 4 +L 1 +D 5 +U 4 +L 6 +D 2 +R 3 +L 2 +D 5 +R 5 +U 7 +R 4 +D 7 +U 6 +R 6 +L 6 +R 6 +U 1 +D 1 +R 3 +D 2 +U 3 +R 3 +D 8 +U 1 +R 5 +L 8 +D 8 +L 7 +D 3 +U 6 +R 6 +U 8 +D 3 +U 2 +R 2 +D 7 +U 8 +D 5 +L 2 +R 8 +U 3 +L 2 +R 5 +U 3 +R 6 +L 8 +U 8 +R 8 +L 2 +U 1 +D 1 +U 4 +L 1 +U 2 +L 4 +D 2 +U 4 +D 3 +L 8 +D 3 +R 3 +L 2 +D 7 +L 5 +R 5 +L 3 +R 4 +L 7 +D 6 +U 3 +L 3 +D 4 +R 4 +L 3 +D 5 +U 2 +R 4 +U 6 +L 7 +D 2 +R 6 +L 3 +D 8 +L 8 +R 2 +U 7 +D 7 +U 3 +R 7 +U 8 +L 5 +D 6 +R 6 +U 8 +R 1 +U 3 +R 5 +L 4 +D 7 +U 6 +R 8 +L 2 +R 6 +U 1 +L 4 +D 1 +L 2 +U 4 +R 2 +U 4 +R 5 +L 3 +R 1 +L 4 +R 7 +D 7 +R 1 +U 5 +L 6 +D 4 +R 4 +D 5 +U 8 +L 3 +D 8 +L 6 +U 5 +D 1 +R 7 +L 2 +D 1 +R 7 +L 5 +D 8 +U 6 +D 1 +L 8 +U 8 +L 1 +R 1 +U 2 +D 9 +L 5 +D 9 +L 4 +U 8 +D 3 +R 6 +L 1 +R 8 +D 7 +L 6 +U 7 +R 6 +U 2 +L 3 +D 6 +L 5 +U 3 +R 1 +U 6 +D 1 +U 2 +L 9 +R 2 +L 2 +R 9 +D 1 +R 2 +U 7 +D 7 +U 5 +R 4 +U 9 +L 5 +U 9 +D 5 +L 1 +R 3 +L 1 +U 1 +D 7 +L 8 +D 2 +L 7 +D 1 +L 6 +R 2 +D 1 +U 9 +D 4 +U 8 +L 8 +U 1 +L 8 +D 6 +U 1 +R 2 +U 3 +R 4 +D 4 +U 4 +L 9 +D 5 +L 2 +U 6 +D 8 +U 6 +R 1 +L 6 +D 5 +R 3 +L 4 +R 6 +L 5 +R 4 +L 6 +D 5 +R 8 +D 6 +L 1 +U 8 +R 8 +U 8 +R 3 +U 2 +D 9 +L 9 +U 3 +D 5 +L 2 +D 2 +R 3 +L 2 +D 8 +R 6 +D 9 +R 5 +L 9 +R 2 +L 9 +U 5 +R 9 +D 3 +R 1 +U 1 +L 6 +R 7 +D 7 +U 3 +R 2 +L 5 +D 2 +L 8 +U 8 +R 9 +U 5 +R 1 +U 9 +D 8 +R 10 +U 9 +D 5 +R 4 +D 8 +U 4 +L 7 +U 10 +L 8 +R 10 +L 9 +D 9 +L 4 +R 7 +U 4 +D 3 +U 10 +R 6 +D 9 +L 5 +R 3 +D 7 +R 9 +D 4 +L 9 +D 3 +R 7 +U 6 +L 6 +R 6 +L 7 +D 8 +L 7 +U 5 +D 8 +L 8 +U 9 +L 5 +D 9 +U 9 +R 3 +D 1 +U 9 +L 9 +U 6 +R 4 +U 6 +D 10 +U 4 +R 9 +D 9 +R 2 +D 10 +L 9 +U 8 +L 2 +D 7 +L 10 +R 2 +L 9 +R 9 +L 10 +U 6 +D 7 +R 1 +D 9 +R 5 +L 7 +D 4 +U 7 +L 3 +D 3 +R 4 +L 8 +U 1 +L 1 +D 10 +U 2 +D 9 +L 2 +D 8 +U 2 +D 3 +R 6 +U 3 +R 5 +U 4 +L 6 +R 10 +L 1 +D 2 +L 3 +U 11 +R 5 +U 11 +D 11 +U 10 +D 2 +L 10 +U 8 +R 4 +D 11 +U 11 +R 11 +U 5 +D 3 +R 7 +D 9 +U 9 +R 5 +U 8 +D 7 +U 9 +D 2 +U 11 +L 7 +D 1 +R 9 +D 2 +R 5 +U 4 +R 11 +D 1 +L 2 +R 1 +U 5 +D 4 +L 10 +R 11 +U 6 +L 3 +U 11 +R 1 +D 1 +L 2 +U 5 +R 6 +U 9 +R 11 +D 9 +L 11 +U 6 +R 5 +L 7 +D 6 +U 9 +D 5 +U 6 +R 10 +D 11 +R 4 +U 7 +L 5 +U 7 +L 2 +R 6 +L 10 +D 3 +R 6 +L 9 +D 8 +L 1 +R 1 +L 1 +R 3 +D 8 +L 10 +D 2 +U 1 +D 1 +L 3 +R 10 +L 3 +U 1 +D 2 +U 2 +D 3 +U 1 +R 8 +U 8 +D 10 +U 6 +L 5 +U 6 +D 4 +R 9 +D 9 +R 9 +D 11 +L 3 +D 7 +R 9 +L 7 +U 7 +D 7 +R 4 +L 3 +R 5 +U 3 +L 9 +D 10 +L 1 +R 9 +L 6 +D 5 +L 6 +D 4 +U 7 +L 8 +R 7 +L 5 +U 9 +R 1 +L 1 +D 12 +R 5 +U 1 +L 8 +D 11 +U 5 +D 5 +R 4 +D 10 +R 2 +U 6 +D 2 +L 12 +D 1 +R 10 +U 4 +D 8 +L 7 +D 9 +R 7 +D 1 +R 10 +D 5 +U 7 +D 12 +R 9 +U 2 +D 3 +U 5 +D 2 +U 6 +D 3 +U 7 +D 4 +R 11 +D 2 +L 3 +R 9 +L 2 +R 12 +L 3 +D 5 +U 7 +D 6 +R 9 +D 12 +R 11 +D 5 +U 5 +D 2 +R 1 +U 6 +R 6 +D 5 +L 9 +U 10 +D 4 +U 1 +R 3 +D 10 +U 1 +R 9 +D 8 +L 1 +D 12 +U 11 +D 12 +L 2 +R 9 +U 12 +D 6 +L 1 +R 4 +L 8 +D 8 +L 6 +R 10 +L 8 +D 4 +U 11 +L 1 +R 5 +L 6 +R 10 +D 12 +R 3 +L 9 +D 10 +U 6 +D 9 +R 7 +U 9 +R 10 +U 10 +L 10 +U 1 +L 3 +D 7 +L 12 +U 4 +R 3 +U 1 +L 8 +R 5 +U 4 +L 4 +D 5 +R 4 +D 11 +L 9 +D 5 +L 7 +U 6 +R 8 +U 7 +D 3 +U 1 +L 6 +U 8 +D 2 +R 7 +D 2 +U 1 +L 9 +U 8 +L 10 +U 4 +D 12 +L 12 +D 5 +R 3 +U 1 +D 1 +R 11 +L 10 +R 11 +L 6 +R 3 +L 13 +R 6 +L 4 +R 10 +D 9 +R 13 +U 8 +L 7 +R 7 +L 10 +R 9 +U 4 +L 1 +D 1 +L 12 +D 6 +L 3 +R 4 +U 6 +L 12 +D 2 +U 5 +R 11 +L 2 +U 8 +R 10 +D 2 +U 6 +L 4 +D 2 +U 9 +L 7 +D 5 +L 6 +U 9 +R 6 +L 9 +R 1 +U 3 +L 6 +R 6 +U 8 +D 1 +R 5 +U 12 +D 9 +U 10 +D 13 +L 10 +R 4 +L 13 +R 9 +L 9 +D 6 +U 8 +D 6 +U 8 +D 10 +R 3 +L 11 +R 8 +D 4 +R 2 +U 10 +D 9 +U 8 +R 5 +D 10 +L 11 +R 7 +D 9 +U 7 +L 6 +U 3 +L 5 +U 6 +D 1 +U 3 +R 8 +L 5 +U 3 +R 13 +L 8 +D 1 +U 8 +L 6 +D 11 +U 4 +D 1 +R 9 +D 11 +R 1 +D 2 +R 10 +U 2 +D 12 +U 6 +R 13 +U 6 +D 4 +R 11 +U 6 +R 9 +U 10 +D 3 +R 2 +L 13 +U 14 +D 14 +R 6 +D 9 +U 5 +D 2 +L 5 +R 10 +L 3 +R 8 +D 9 +U 10 +R 11 +U 8 +L 8 +R 12 +D 13 +U 7 +R 14 +D 9 +L 12 +R 13 +L 10 +D 11 +L 7 +U 6 +D 14 +L 14 +D 13 +U 11 +R 11 +U 9 +L 8 +D 2 +L 9 +R 12 +U 5 +D 9 +U 10 +R 1 +L 2 +D 8 +L 8 +R 4 +U 2 +L 13 +R 9 +L 12 +D 7 +L 14 +D 13 +R 12 +D 10 +L 5 +U 12 +R 6 +L 3 +U 14 +R 8 +U 10 +R 5 +U 3 +D 1 +R 6 +U 9 +R 4 +L 9 +U 7 +R 6 +U 8 +R 10 +U 9 +R 9 +U 12 +L 14 +R 2 +U 11 +L 12 +D 5 +R 15 +L 10 +U 8 +R 6 +U 8 +R 6 +D 2 +U 9 +L 15 +D 13 +L 14 +U 1 +D 9 +U 6 +R 8 +L 6 +D 3 +L 13 +R 7 +U 1 +L 8 +U 7 +D 8 +R 1 +D 6 +L 8 +R 14 +D 14 +U 9 +L 14 +R 15 +U 11 +L 14 +D 14 +L 1 +U 5 +L 3 +R 4 +L 13 +R 5 +D 14 +R 4 +U 7 +D 9 +R 4 +U 6 +D 11 +R 12 +D 13 +U 15 +D 10 +R 1 +D 1 +U 10 +L 14 +R 13 +U 6 +D 10 +U 15 +D 3 +U 8 +D 2 +U 15 +R 6 +U 12 +L 9 +R 2 +D 6 +R 15 +D 13 +R 2 +D 5 +R 8 +U 3 +R 10 +D 6 +L 7 +D 6 +R 11 +U 13 +D 1 +L 7 +U 7 +L 4 +U 10 +D 4 +R 10 +U 2 +L 2 +U 4 +R 7 +D 15 +R 15 +D 7 +R 14 +U 3 +D 8 +L 2 +U 11 +D 11 +U 9 +R 5 +L 3 +D 9 +R 12 +L 2 +R 10 +D 6 +R 6 +U 15 +R 10 +D 16 +R 5 +U 14 +R 16 +U 5 +L 10 +R 14 +L 15 +R 13 +L 15 +R 12 +L 9 +D 16 +U 13 +D 16 +R 2 +U 1 +D 15 +L 7 +D 5 +R 9 +U 8 +R 12 +U 3 +D 16 +R 11 +D 1 +U 3 +D 4 +U 10 +L 8 +R 4 +L 8 +R 8 +U 8 +L 9 +D 16 +U 7 +D 6 +R 1 +D 3 +L 15 +U 9 +D 9 +U 1 +L 9 +D 7 +U 14 +R 1 +D 11 +L 16 +U 13 +L 3 +R 12 +L 9 +R 9 +L 9 +U 5 +R 10 +D 14 +L 8 +R 7 +L 12 +R 13 +D 5 +U 10 +R 12 +U 11 +L 7 +R 9 +D 7 +L 11 +D 1 +R 8 +D 7 +U 6 +D 10 +R 13 +L 16 +U 10 +L 5 +R 12 +L 16 +U 6 +D 10 +U 3 +D 7 +U 7 +D 15 +L 2 +R 9 +U 8 +D 11 +L 15 +U 10 +D 10 +L 6 +D 14 +L 5 +U 3 +D 9 +U 2 +D 16 +U 6 +D 3 +R 15 +D 12 +R 9 +L 16 +R 4 +U 9 +L 8 +R 11 +L 14 +D 6 +U 11 +L 6 +R 7 +U 8 +R 7 +U 8 +D 7 +U 6 +L 15 +U 3 +D 6 +U 3 +R 6 +D 3 +L 10 +R 14 +L 17 +D 12 +L 15 +D 5 +R 6 +D 4 +R 6 +D 5 +U 8 +D 10 +R 13 +D 6 +U 3 +L 5 +U 3 +R 11 +D 11 +U 8 +L 5 +U 11 +L 7 +R 16 +L 11 +D 3 +L 16 +D 14 +R 1 +U 10 +L 7 +U 4 +D 11 +L 9 +R 3 +D 1 +L 7 +R 17 +D 17 +R 11 +U 4 +R 15 +L 10 +R 13 +U 17 +D 16 +L 16 +U 14 +D 11 +U 10 +D 12 +L 11 +R 5 +D 17 +U 1 +R 5 +L 14 +D 14 +R 5 +L 6 +R 11 +U 13 +R 10 +U 15 +L 2 +R 8 +D 3 +R 11 +L 8 +R 11 +U 5 +L 12 +U 2 +L 16 +D 5 +L 17 +R 10 +D 15 +L 16 +U 1 +D 10 +R 13 +L 6 +D 5 +R 13 +U 2 +D 16 +L 9 +U 11 +D 13 +U 16 +L 6 +R 15 +D 10 +U 17 +L 15 +D 7 +R 6 +D 15 +R 11 +L 14 +U 12 +D 18 +R 6 +U 16 +L 1 +U 10 +R 15 +U 3 +L 12 +D 9 +L 11 +D 18 +R 11 +L 12 +U 5 +L 13 +D 2 +R 11 +D 10 +L 15 +R 5 +D 17 +R 6 +L 16 +R 11 +D 1 +R 5 +U 13 +R 11 +D 13 +L 12 +U 10 +D 9 +R 1 +D 15 +R 1 +D 17 +R 10 +U 11 +R 14 +L 17 +R 2 +L 1 +D 12 +R 6 +U 18 +R 3 +L 8 +R 11 +L 15 +U 8 +L 7 +D 2 +L 9 +D 9 +L 11 +U 5 +D 8 +U 16 +R 13 +L 7 +D 6 +U 16 +L 9 +U 3 +R 4 +L 12 +U 18 +D 7 +L 10 +R 16 +D 1 +R 4 +U 4 +R 13 +D 6 +L 5 +R 3 +D 10 +U 4 +L 17 +D 9 +R 8 +L 1 +D 8 +L 16 +D 3 +U 3 +R 1 +U 9 +R 13 +D 3 +L 4 +R 6 +D 10 +U 16 +L 9 +U 5 +L 14 +U 8 +D 17 +L 18 +D 5 +U 10 +R 14 +L 8 +U 6 +R 5 +U 19 +L 9 +U 2 +D 7 +U 14 +R 17 +L 16 +D 15 +U 11 +D 4 +L 16 +U 14 +D 6 +L 3 +R 18 +L 17 +D 6 +L 10 +U 7 +D 11 +L 15 +U 12 +L 6 +D 6 +L 14 +U 17 +L 7 +D 2 +L 7 +U 12 +L 17 +R 16 +U 19 +L 12 +U 10 +L 6 +U 3 +D 16 +L 5 +D 15 +L 7 +R 6 +D 2 +R 19 +L 4 +D 18 +R 19 +D 9 +R 11 +L 17 +R 1 +U 15 +R 3 +D 18 +L 13 +U 7 +D 7 +R 15 +U 4 +D 16 +R 6 +U 4 +R 10 +U 10 +R 1 +D 19 +R 13 +U 7 +L 13 +D 15 +U 2 +L 18 +D 5 +U 5 +D 10 +L 8 +D 13 +U 8 +L 15 +D 12 +U 11 +D 17 +L 14 +R 4 +D 19 +L 6 +D 5 +L 13 +D 16 +U 1 +R 14 +U 15 +L 18 +D 7 +L 14 +D 11 +L 7 +D 18 +U 16 +L 1 +R 18 +L 1 +U 19 +R 3 +D 1 diff --git a/AoC2022/09/solver.el b/AoC2022/09/solver.el new file mode 100644 index 0000000..d1eac37 --- /dev/null +++ b/AoC2022/09/solver.el @@ -0,0 +1,78 @@ +;;; solver.el --- Day 09 -*- lexical-binding: t; -*- +;; +;; Copyright (C) 2022 Óscar Nájera +;; +;; Author: Óscar Nájera <hi@oscarnajera.com> +;; Maintainer: Óscar Nájera <hi@oscarnajera.com> +;; Created: December 09, 2022 +;; Modified: December 09, 2022 +;; +;; This file is not part of GNU Emacs. +;; +;;; Commentary: +;; +;; Day 09 +;; +;;; Code: + +(defsubst solver-diff (head tail) + (cons (- (car head) (car tail)) (- (cdr head) (cdr tail)))) + +(defsubst solver-distance-1 (vec) + "Norm 1 distance." + (+ (abs (car vec)) (abs (cdr vec)))) + +(defsubst solver-diagonal (vec) + (and (= 1 (abs (car vec))) (= 1 (abs (cdr vec))))) + + +(defun solver-move (direction) + (cl-ecase direction + ('R (lambda (x) (cl-incf (car x)))) + ('L (lambda (x) (cl-decf (car x)))) + ('U (lambda (x) (cl-incf (cdr x)))) + ('D (lambda (x) (cl-decf (cdr x)))))) +;; WARN This need to be bytecompiled otherwise the lambda is not capturing diff-v in the closure +(defun solver-puller (diff-v) + (let ((distance (solver-distance-1 diff-v))) + (cond + ((or (<= distance 1) + (solver-diagonal diff-v)) #'identity) + ((= distance 2) + (pcase diff-v + (`(0 . ,d) (solver-move (if (= d 2) 'U 'D))) + (`(,d . 0) (solver-move (if (= d 2) 'R 'L))))) + ((= distance 3) + (lambda (x) + (funcall (solver-move (if (< 0 (car diff-v)) 'R 'L)) x) + (funcall (solver-move (if (< 0 (cdr diff-v)) 'U 'D)) x))) + (t (error "Head moved too far"))))) + +(with-temp-buffer + (insert-file-contents "input") +;; (insert "R 4 +;; U 4 +;; L 3 +;; D 1 +;; R 4 +;; D 1 +;; L 5 +;; R 2") + (let (path + (head (cons 0 0)) + (tail (cons 0 0)) + (moves + (thread-last + (split-string (buffer-string) "\n" t) + (mapcar (lambda (inst) (let ((move (split-string inst))) + (cons (intern (car move)) + (string-to-number (cadr move)))))) + ))) + (dolist (move moves) + (dotimes (_ (cdr move)) + (funcall (solver-move (car move)) head) + (funcall (solver-puller (solver-diff head tail)) tail) + (push (cons (car tail) (cdr tail)) path))) + (= 6384 (length (cl-remove-duplicates path :test #'equal)))) + + |