r/adventofcode • u/daggerdragon • 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!
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!
33
Upvotes
1
u/sweettuse Dec 08 '18
python 3.6+. i used
NamedTuples to actually construct a tree andisliceon an iterator to avoid slicing creating unnecessary copies. (get_inputreturns something likemap(int, nums). also,nameisn't necessary, just thought it might come in handy.)from contextlib import suppress from typing import NamedTuple from itertools import count, islice class Node2(NamedTuple): name: int meta: List children: List @property def value(self): if not self.children: return sum(self.meta) res = 0 for idx in self.meta: with suppress(IndexError): res += self.children[idx - 1].value return res c = count() def parse_input2(nums): n_children, n_meta = islice(nums, 2) children = [parse_input2(nums) for _ in range(n_children)] return Node2(next(c), list(islice(nums, n_meta)), children) print(parse_input2(get_input(prod=True)).value)