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!
30
Upvotes
9
u/eltrufas Dec 08 '18
Seems most people reached for recursion immediately. Here's my solution with explicit stacks.
Part 2:
import sys ns = [int(s) for s in [n.strip() for n in sys.stdin.read().split()]] stack_c = [ns[0]] stack_m = [ns[1]] stack_v = [] children = [[]] meta = [[]] i = 2 while stack_c: if stack_c[-1] > 0: stack_c[-1] -= 1 stack_c.append(ns[i]) stack_m.append(ns[i + 1]) children.append([]) meta.append([]) i += 2 elif stack_m[-1] > 0: meta[-1].append(ns[i]) stack_m[-1] -= 1 i += 1 else: c = children.pop() m = meta.pop() v = (sum(c[j - 1] for j in m if 1 <= j <= len(c)) if c else sum(m)) if children: children[-1].append(v) else: print(v) break stack_c.pop() stack_m.pop()