aboutsummaryrefslogtreecommitdiffstats
path: root/AoC2023/day21/solver.lisp
diff options
context:
space:
mode:
authorOscar Najera <hi@oscarnajera.com>2023-12-29 23:32:16 +0100
committerOscar Najera <hi@oscarnajera.com>2023-12-29 23:32:16 +0100
commit2c6a12bc996a47c8be27ac8fb4e18073841f3391 (patch)
treeab6951ae7abc0e1cd57abc0abef131d5452c1d78 /AoC2023/day21/solver.lisp
parentde2cfb93f12cf2b6e6b7575540c3061f210fb4e6 (diff)
downloadscratch-2c6a12bc996a47c8be27ac8fb4e18073841f3391.tar.gz
scratch-2c6a12bc996a47c8be27ac8fb4e18073841f3391.tar.bz2
scratch-2c6a12bc996a47c8be27ac8fb4e18073841f3391.zip
[AoC2023] day21 part 1 lisp
Diffstat (limited to 'AoC2023/day21/solver.lisp')
-rw-r--r--AoC2023/day21/solver.lisp43
1 files changed, 43 insertions, 0 deletions
diff --git a/AoC2023/day21/solver.lisp b/AoC2023/day21/solver.lisp
new file mode 100644
index 0000000..f901d54
--- /dev/null
+++ b/AoC2023/day21/solver.lisp
@@ -0,0 +1,43 @@
+(ql:quickload '(fiveam))
+(defpackage :day21
+ (:use :cl :fiveam))
+(in-package :day21)
+;;22:55
+;;23:32
+
+(defun find-start (field)
+ (destructuring-bind (rows cols)
+ (array-dimensions field)
+ (loop for row below rows do
+ (loop for col below cols do
+ (when (eq (aref field row col) #\S)
+ (return-from find-start (list row col)))))))
+
+(defun next-moves (field)
+ (destructuring-bind (rows cols)
+ (array-dimensions field)
+ (lambda (pos)
+ (destructuring-bind (row col) pos
+ (loop for (dr dc) in '((0 1) (0 -1) (1 0) (-1 0))
+ for nr = (+ row dr)
+ for nc = (+ col dc)
+ when (and (< -1 nr rows)
+ (< -1 nc cols)
+ (not (eq #\# (aref field nr nc))))
+ collect (list nr nc))))))
+
+(let* ((lines
+ (uiop:read-file-lines "input"))
+ (field (make-array (list (length lines) (length (car lines)))
+ :initial-contents lines))
+ (walker (next-moves field)))
+ (labels ((all-places (positions)
+ (delete-duplicates (mapcan walker positions) :test #'equal)))
+
+ (loop
+ repeat 64
+ for positions = (all-places (list (find-start field)))
+ then (all-places positions)
+ ;; do (print positions)
+ finally (return (length positions))))
+ )