commit - abba33e8d2bac06e0a3f5057c7e164b078c2b7bb
commit + 3485ab4d7bc8df427f64ce0fdf79a9cdb55bccf5
blob - bde12bd7cfb98deeee747a39bce04ed4bb24584c
blob + 8fabdb84cfd88b54dc810c2db1d14760424f7f62
--- src/day-11.lisp
+++ src/day-11.lisp
(: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)
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)))))