src/2018/days/day-08.lisp @ 05b1bb7b9bf5
2021/15
| author | Steve Losh <steve@stevelosh.com> | 
|---|---|
| date | Wed, 15 Dec 2021 19:09:20 -0500 | 
| parents | 182bdd87fd9e | 
| children | (none) | 
(advent:defpackage* :advent/2018/08) (in-package :advent/2018/08) (named-readtables:in-readtable :interpol-syntax) (defstruct (node (:conc-name nil)) children metadata) (defun read-node (stream) (let ((children-count (read stream)) (metadata-count (read stream))) (make-node :children (iterate (repeat children-count) (collect (read-node stream) :result-type vector)) :metadata (iterate (repeat metadata-count) (collect (read stream)))))) (defun node-value (node &aux (children (children node))) (if (emptyp children) (summation (metadata node)) (iterate (for meta :in (metadata node)) (for index = (1- meta)) (when (array-in-bounds-p children index) (summing (node-value (aref children index))))))) (define-problem (2018 8) (data) (37905 33891) (let ((root (read-node data))) (values (recursively ((node root)) (+ (summation (metadata node)) (summation (children node) :key #'recur))) (node-value root))))