src/2019/days/day-06.lisp @ e41337e3b59b

Accessors
author Steve Losh <steve@stevelosh.com>
date Wed, 15 Dec 2021 23:10:57 -0500
parents 182bdd87fd9e
children (none)
(advent:defpackage* :advent/2019/06)
(in-package :advent/2019/06)

(define-problem (2019 6) (data read-lines) (301100 547)
  (let ((graph (digraph:make-digraph :test #'equal)))
    (iterate
      (for line :in data)
      (for (mass orbiter) = (str:split ")" line))
      (digraph:insert-vertex graph mass)
      (digraph:insert-vertex graph orbiter)
      (digraph:insert-edge graph mass orbiter))
    (values
      (recursively ((n 0)
                    (node "COM"))
        (summation (digraph:successors graph node)
                   :initial-value n
                   :key (curry #'recur (1+ n))))
      (- (length
           (astar :start "YOU"
                  :neighbors (curry #'digraph:neighbors graph)
                  :goalp (curry #'equal "SAN")
                  :cost (constantly 1)
                  :heuristic (constantly 0)
                  :test #'equal))
         3))))