From c427a1fcacfe4e05275acc02971bb00eb7037058 Mon Sep 17 00:00:00 2001
From: Oscar Najera <hi@oscarnajera.com>
Date: Thu, 14 Dec 2023 10:47:00 +0100
Subject: part 2, off by one error

---
 AoC2023/day11/solver.lisp | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

(limited to 'AoC2023')

diff --git a/AoC2023/day11/solver.lisp b/AoC2023/day11/solver.lisp
index e7feabf..666b71c 100644
--- a/AoC2023/day11/solver.lisp
+++ b/AoC2023/day11/solver.lisp
@@ -1,6 +1,7 @@
 ;; 9:59
 ;; 10:31 part1
-;;
+;; 10:47 part2
+
 (ql:quickload '(fiveam))
 (defparameter eg-input "...#......
 .......#..
@@ -20,16 +21,16 @@
 (defun shift (coord spacers)
   (count-if (lambda (idx) (< idx coord)) spacers))
 
-(defun expanded (point free-rows free-cols)
+(defun expanded (point free-rows free-cols multiplier)
   (destructuring-bind (y x) point
-    (list (+ y (shift y free-rows))
-          (+ x (shift x free-cols)))))
+    (list (+ y (* multiplier (shift y free-rows)))
+          (+ x (* multiplier (shift x free-cols))))))
 
 (fiveam:test parts
   (fiveam:is (= 1 (shift 5 '(3 6))))
-  (fiveam:is (equal '(7 4) (expanded '(5 3) '(1 2) '(2)))))
+  (fiveam:is (equal '(7 4) (expanded '(5 3) '(1 2) '(2) 1))))
 
-(defun expanded-galaxies (rows)
+(defun expanded-galaxies (rows &optional (multiplier 1))
   (let* ((free-rows (make-array (length rows) :initial-element t))
          (free-cols (make-array (length (car rows)) :initial-element t))
          (galaxies (loop for row in rows
@@ -45,7 +46,8 @@
          (lambda (galaxie)
            (expanded galaxie
                      (indexes free-rows)
-                     (indexes free-cols)))
+                     (indexes free-cols)
+                     multiplier))
          galaxies)))
 
 
@@ -54,13 +56,16 @@
     (+ (abs (- bx sx)) (abs (- by sy)))))
 
 
-(defun solver1 (rows)
-  (loop with gals = (expanded-galaxies rows)
+(defun solver (rows &optional (multiplier 1))
+  (loop with gals = (expanded-galaxies rows multiplier)
         for g across gals
         for i from 0 sum
                      (loop for j from (1+ i) below (length gals)
                            sum (manhattan-dist g (aref gals j)))))
 
 (fiveam:test solutions
-  (fiveam:is (= 374 (solver1 (uiop:split-string eg-input :separator '(#\Newline)))))
-  (fiveam:is (= 10154062 (solver1 (uiop:read-file-lines "input")))))
+  (fiveam:is (= 374 (solver (uiop:split-string eg-input :separator '(#\Newline)))))
+  (fiveam:is (= 1030 (solver (uiop:split-string eg-input :separator '(#\Newline)) 9)))
+  (fiveam:is (= 8410 (solver (uiop:split-string eg-input :separator '(#\Newline)) 99)))
+  (fiveam:is (= 10154062 (solver (uiop:read-file-lines "input"))))
+  (fiveam:is (= 553083047914 (solver (uiop:read-file-lines "input") 999999))))
-- 
cgit v1.2.3