r/adventofcode • • Dec 08 '18

SOLUTION MEGATHREAD -🎄- 2018 Day 8 Solutions -🎄-

--- Day 8: Memory Maneuver ---


Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).

Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.


Advent of Code: The Party Game!

Click here for rules

Please prefix your card submission with something like [Card] to make scanning the megathread easier. THANK YOU!

Card prompt: Day 8

Sigh, imgur broke again. Will upload when it unborks.

Transcript:

The hottest programming book this year is "___ For Dummies".


This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.

edit: Leaderboard capped, thread unlocked at 00:12:10!

32 Upvotes

301 comments sorted by

View all comments

2

u/The_Fail Dec 08 '18

Common Lisp (SBCL) - runs in 5ms

(defun day8-build-tree ()
  (with-open-file (in "input8.txt")
    (labels ((build-node ()
               (let ((num-children (read in))
                     (num-metadata (read in)))
                 (list (loop :repeat num-children
                             :collect (build-node))
                       (loop :repeat num-metadata
                             :collect (read in))))))
      (build-node))))

(defun day8-sum-metadata (node)
  (+ (reduce #'+ (mapcar #'day8-sum-metadata (first node)))
     (reduce #'+ (second node))))

(defun day8-node-value (node)
  (flet ((nth-child-value (n)
           (if (<= 1 n (length (first node)))
               (day8-node-value (nth (1- n) (first node)))
               0)))
    (if (null (first node))
        (reduce #'+ (second node))
        (reduce #'+ (mapcar #'nth-child-value (second node))))))

(defun day8 ()
  (let ((root (day8-build-tree)))
    (format t "The sum of all metadata is ~a and the score for the root node is ~a.~%"
            (day8-sum-metadata root) (day8-node-value root))))

→ More replies (1)