advent/2018/08.py

47 lines
949 B
Python
Raw Permalink Normal View History

2018-12-10 06:42:42 +00:00
with open('data/08.txt') as f:
data = [int(n) for n in f.read().split()]
all_meta = []
def parse(data):
(children, meta_count), data = data[:2], data[2:]
tree = {
'children': [],
'metadata': []
}
for i in range(children):
child, data = parse(data)
tree['children'].append(child)
for i in range(meta_count):
m = data.pop(0)
all_meta.append(m)
tree['metadata'].append(m)
return tree, data
tree, _ = parse(data)
print(f'Part 1: {sum(all_meta)}\n')
def value(node):
children, metadata, = node['children'], node['metadata']
if len(children) == 0:
return sum(metadata)
child_values = []
for i in metadata:
if i == 0:
continue
try:
child_values.append(value(children[i - 1]))
except IndexError:
pass
return sum(child_values)
print(f'Part 2: {value(tree)}\n')