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])