aboutsummaryrefslogtreecommitdiffstats
path: root/AoC2022
diff options
context:
space:
mode:
Diffstat (limited to 'AoC2022')
-rw-r--r--AoC2022/09/input2000
-rw-r--r--AoC2022/09/solver.el78
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))))
+
+