aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AoC2022/14/solver.el41
1 files changed, 11 insertions, 30 deletions
diff --git a/AoC2022/14/solver.el b/AoC2022/14/solver.el
index c051f98..2b944b4 100644
--- a/AoC2022/14/solver.el
+++ b/AoC2022/14/solver.el
@@ -37,35 +37,29 @@
bounds
x-len
y-len
- stride
grid)
+(defun solver-grid-create (bounds x-len y-len)
+ (solver-grid--create :bounds bounds :x-len x-len :y-len y-len
+ :grid (make-vector (* x-len y-len) 0)))
(defun solver-abyss-grid (bounds)
- (let* ((x-len (1+ (- (car bounds) (cadr bounds))))
- (y-len (1+ (elt bounds 2)))
- (stride (* 8 (if (= 0 (mod x-len 8))
- (/ x-len 8)
- (1+ (/ x-len 8)))))
- (grid (make-vector (* stride y-len) 0)))
- (solver-grid--create :bounds bounds :x-len x-len :y-len y-len :stride stride :grid grid)))
+ (let ((x-len (1+ (- (car bounds) (cadr bounds))))
+ (y-len (1+ (elt bounds 2))))
+ (solver-grid-create bounds x-len y-len)))
(defun solver-finite-grid (bounds)
(let* ((y-len (+ 3 (elt bounds 2)))
- (x-len (* 2 y-len))
- (stride (* 8 (if (= 0 (mod x-len 8))
- (/ x-len 8)
- (1+ (/ x-len 8)))))
- (grid (make-vector (* stride y-len) 0)))
+ (x-len (* 2 y-len)))
(setcar bounds (+ 500 y-len))
(setf (elt bounds 1) (- 500 y-len))
- (solver-grid--create :bounds bounds :x-len x-len :y-len y-len :stride stride :grid grid)))
+ (solver-grid-create bounds x-len y-len)))
(defun solver-point (x y grid)
(let ((x (- x (cadr (grid-bounds grid)))))
(when (and (< -1 x (grid-x-len grid))
(< -1 y (grid-y-len grid)))
- (+ x (* y (grid-stride grid))))))
+ (+ x (* y (grid-x-len grid))))))
(defun solver--wall-line (grid)
(let (startx starty)
@@ -91,25 +85,13 @@
(solver--wall-line grid)
(forward-line)))
(when finite-grid
- (cl-loop with yrow = (* (grid-stride grid) (1- (grid-y-len grid)))
+ (cl-loop with yrow = (* (grid-x-len grid) (1- (grid-y-len grid)))
for x from 0 below (grid-x-len grid)
do (aset (grid-grid grid) (+ x yrow) 1)))
grid)
-(defun solver-draw-wall (grid)
- (let ((array (copy-sequence (grid-grid grid)))
- (stride (grid-stride grid)))
- (create-image array
- 'xbm t
- :scale 20
- :stride stride
- :width (grid-x-len grid)
- :height (grid-y-len grid)
- :foreground "#ffffff"
- :background "#000000")))
-
(defun solver-draw-grid (grid)
- (let ((stride (grid-stride grid)))
+ (let ((stride (grid-x-len grid)))
(seq-do-indexed
(lambda (elt idx)
(let ((slot (mod idx stride)))
@@ -153,4 +135,3 @@
(should (= 93 (solver "498,4 -> 498,6 -> 496,6
503,4 -> 502,4 -> 502,9 -> 494,9" #'solver-finite-grid)))
(should (= 25434 (solver (find-file-noselect "input") #'solver-finite-grid))))
-