commit 3485ab4d7bc8df427f64ce0fdf79a9cdb55bccf5 from: Lukas Henkel date: Mon Dec 11 17:59:41 2023 UTC Refactor day 11 commit - abba33e8d2bac06e0a3f5057c7e164b078c2b7bb commit + 3485ab4d7bc8df427f64ce0fdf79a9cdb55bccf5 blob - bde12bd7cfb98deeee747a39bce04ed4bb24584c blob + 8fabdb84cfd88b54dc810c2db1d14760424f7f62 --- src/day-11.lisp +++ src/day-11.lisp @@ -3,8 +3,7 @@ (:export #:day-11)) (in-package #:aoc/day-11) -(defun find-galaxies (map &optional (expansion-factor 2)) - (decf expansion-factor) +(defun find-galaxies (map) (let (galaxies empty-rows empty-cols) @@ -20,26 +19,28 @@ unless (loop for x from 0 below (input-map-width map) thereis (char= (map-cell map (cons x y)) #\#)) do (push y empty-rows)) - (loop for galaxy in galaxies - collect (cons (+ (point-x galaxy) - (* (count-if (curry #'> (point-x galaxy)) empty-cols) - expansion-factor)) - (+ (point-y galaxy) - (* (count-if (curry #'> (point-y galaxy)) empty-rows) - expansion-factor)))))) + (values galaxies empty-rows empty-cols))) +(defun expand-universe (galaxies empty-rows empty-cols expansion-factor) + (decf expansion-factor) + (loop for galaxy in galaxies + collect (cons (+ (point-x galaxy) + (* (count-if (curry #'> (point-x galaxy)) empty-cols) + expansion-factor)) + (+ (point-y galaxy) + (* (count-if (curry #'> (point-y galaxy)) empty-rows) + expansion-factor))))) + +(defun sum-distances (galaxies) + (loop for (galaxy-1 . rest) on galaxies + while rest + sum (loop for galaxy-2 in rest + sum (manhattan-distance galaxy-1 galaxy-2)))) + (defun day-11 (input) - (let* ((map (make-map input)) - (galaxies-1 (find-galaxies map)) - (galaxies-2 (find-galaxies map 1000000)) - (task-1 0) - (task-2 0)) - (map-combinations (lambda (p) - (incf task-1 (apply #'manhattan-distance p))) - galaxies-1 - :length 2) - (map-combinations (lambda (p) - (incf task-2 (apply #'manhattan-distance p))) - galaxies-2 - :length 2) - (values task-1 task-2))) + (multiple-value-bind (galaxies empty-rows empty-cols) + (find-galaxies (make-map input)) + (let ((galaxies-1 (expand-universe galaxies empty-rows empty-cols 2)) + (galaxies-2 (expand-universe galaxies empty-rows empty-cols 1000000))) + (values (sum-distances galaxies-1) + (sum-distances galaxies-2)))))