blob: bc999d81161d51b9ac312acd96e3a278f1a6dba5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import sys
sys.path.append("../common")
import aoc
data = [int(v) for v in aoc.data.split(" ")]
def get_nodes(nsize, index):
nodes = list()
for i in range(nsize):
cnsize = data[index + 0]
mdsize = data[index + 1]
cnodes, index = get_nodes(cnsize, index + 2)
metadata = data[index:index + mdsize]
nodes.append([cnodes, metadata])
index = index + mdsize
return nodes, index
def node_sum(nodes):
metadata = 0
for n in nodes:
metadata += sum(n[1]) + node_sum(n[0])
return metadata
def nodeValue(n):
if len(n[0]) == 0:
return sum(n[1])
else:
value = 0
for i in range(len(n[1])):
ni = n[1][i]-1
if ni < len(n[0]):
value += nodeValue(n[0][ni])
return value
def solve1(args):
nodes, index = get_nodes(1, 0)
return node_sum(nodes)
def solve2(args):
nodes, index = get_nodes(1, 0)
return nodeValue(nodes[0])
aoc.run(solve1, solve2, sols=[36307, 25154])
|