Added 2018 day 8
This commit is contained in:
1 parent
506b86a7a8
commit
bb20993482
2 files changed
+71
No files matched your search
@@ -0,0 +1,70 @@
|
|||||||
|
""" https://adventofcode.com/2018/day/8 """
|
||||||
|
|
||||||
|
def readFile():
|
||||||
|
import os.path as p
|
||||||
|
dName = p.dirname(__file__)
|
||||||
|
fName = p.basename(__file__).split(".")[0]
|
||||||
|
|
||||||
|
with open(p.join(dName, "input", f"{fName}.txt"), "r") as f:
|
||||||
|
data = f.read()
|
||||||
|
return [int(val) for val in data.split(" ")]
|
||||||
|
|
||||||
|
class Node:
|
||||||
|
def __init__(self, numChildren, numMeta):
|
||||||
|
self.numChildren = numChildren
|
||||||
|
self.children = []
|
||||||
|
self.numMeta = numMeta
|
||||||
|
self.meta = []
|
||||||
|
|
||||||
|
def parse(vals, i):
|
||||||
|
nodes = []
|
||||||
|
size = len(vals)
|
||||||
|
while i < len(vals):
|
||||||
|
node = Node(vals[i], vals[i+1])
|
||||||
|
i += 2
|
||||||
|
if not node.numChildren:
|
||||||
|
for m in range(node.numMeta):
|
||||||
|
node.meta.append(vals[i + m])
|
||||||
|
nodes.append(node)
|
||||||
|
i += node.numMeta
|
||||||
|
return nodes, i
|
||||||
|
else:
|
||||||
|
for c in range(node.numChildren):
|
||||||
|
temp, i = parse(vals, i)
|
||||||
|
node.children += temp
|
||||||
|
for m in range(node.numMeta):
|
||||||
|
node.meta.append(vals[i + m])
|
||||||
|
nodes.append(node)
|
||||||
|
i += node.numMeta
|
||||||
|
if i >= size:
|
||||||
|
return nodes[0]
|
||||||
|
else:
|
||||||
|
return nodes, i
|
||||||
|
|
||||||
|
def part1(node):
|
||||||
|
metadata = 0
|
||||||
|
for child in node.children:
|
||||||
|
metadata += part1(child)
|
||||||
|
for meta in node.meta:
|
||||||
|
metadata += meta
|
||||||
|
return metadata
|
||||||
|
|
||||||
|
def part2(node):
|
||||||
|
value = 0
|
||||||
|
if not node.numChildren:
|
||||||
|
for meta in node.meta:
|
||||||
|
value += meta
|
||||||
|
else:
|
||||||
|
for meta in node.meta:
|
||||||
|
try:
|
||||||
|
value += part2(node.children[meta - 1])
|
||||||
|
except IndexError:
|
||||||
|
pass
|
||||||
|
return value
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
vals = readFile()
|
||||||
|
#vals = [int(val) for val in "2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2".split(" ")]
|
||||||
|
node = parse(vals, 0)
|
||||||
|
print(f"Part 1: {part1(node)}")
|
||||||
|
print(f"Part 2: {part2(node)}")
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
8 11 6 3 5 5 3 4 1 9 0 7 1 2 1 6 9 1 9 1 1 2 1 2 1 1 2 3 1 6 0 9 1 4 3 8 8 3 6 1 1 2 1 1 2 2 3 1 7 0 10 4 1 1 3 9 8 5 6 2 6 1 3 2 3 3 1 3 3 2 1 2 3 7 1 6 0 6 3 1 1 9 9 4 1 3 1 3 2 3 1 9 0 10 9 5 5 2 5 9 1 5 4 2 2 1 3 2 1 1 2 1 2 1 7 0 9 9 1 3 4 5 9 7 6 8 2 2 3 1 1 1 3 1 4 2 3 2 1 3 3 7 1 6 0 10 8 6 1 7 3 3 4 1 1 8 3 2 1 3 1 1 1 8 0 11 3 5 9 3 8 1 2 9 4 1 6 3 3 2 1 2 1 2 1 1 6 0 6 3 1 7 4 6 7 2 1 3 1 1 1 1 5 2 2 1 5 1 3 5 1 5 0 8 4 9 8 8 4 6 2 1 1 3 3 1 1 1 6 0 11 2 8 7 5 1 5 9 2 8 1 2 1 2 3 3 3 3 1 9 0 11 6 9 2 3 1 5 7 3 2 4 1 2 1 1 2 3 3 2 1 1 2 3 1 1 4 3 7 1 7 0 7 8 2 8 9 3 1 2 1 1 3 3 3 3 1 1 5 0 11 9 1 5 8 1 6 8 4 8 3 2 2 1 1 1 1 1 5 0 11 4 4 1 5 2 8 7 9 2 9 2 2 2 1 1 2 3 3 1 5 5 5 1 4 1 3 6 5 5 3 3 6 1 5 0 10 5 6 2 4 7 1 2 1 3 2 1 1 2 2 3 1 9 0 8 2 4 5 6 1 7 2 1 3 1 2 3 2 2 3 2 3 1 9 0 11 9 6 8 1 9 6 1 2 1 2 4 2 1 2 3 1 3 3 3 1 2 5 3 1 4 2 3 7 1 5 0 9 3 1 2 8 2 5 2 9 4 3 1 3 3 1 1 8 0 6 1 5 5 1 4 6 1 3 2 2 1 1 1 3 1 5 0 7 8 4 2 4 1 4 8 3 2 1 1 2 5 4 2 1 5 2 1 3 4 1 9 0 8 3 3 1 1 8 5 1 7 2 3 2 3 2 3 1 2 1 1 5 0 6 1 4 7 5 6 1 1 2 2 1 2 1 6 0 7 1 2 1 6 8 1 9 1 3 1 2 1 3 3 2 5 4 3 4 1 5 0 8 1 4 5 3 1 1 1 7 1 1 1 3 2 1 7 0 7 8 7 5 1 7 8 1 2 1 3 1 3 3 1 1 7 0 7 5 3 1 5 6 7 9 2 3 2 2 3 2 1 3 4 1 5 3 5 1 8 0 10 7 9 1 9 9 7 2 3 4 9 1 3 1 1 2 1 2 1 1 6 0 11 9 1 4 1 5 8 3 6 3 1 3 1 2 2 1 3 2 1 5 0 9 5 4 2 1 9 1 6 7 4 3 3 1 2 1 2 1 5 1 3 6 2 5 5 4 3 4 1 9 0 6 4 4 2 5 5 1 1 3 1 2 1 3 3 3 2 1 5 0 10 1 7 1 2 3 8 6 1 3 7 2 3 1 3 1 1 5 0 7 1 7 6 8 8 1 9 1 1 1 1 3 1 2 4 3 3 4 1 6 0 7 5 4 5 4 2 1 3 3 1 2 3 2 3 1 9 0 8 1 2 2 3 3 5 5 9 3 2 2 1 1 1 3 2 3 1 9 0 6 2 2 7 6 4 1 3 3 2 1 2 2 1 1 3 3 4 2 4 3 5 1 7 0 11 4 3 7 1 5 7 3 3 1 2 1 1 2 1 1 2 3 2 1 9 0 10 5 6 9 9 9 6 1 4 2 1 1 3 3 1 2 2 3 1 2 1 6 0 8 5 3 6 3 8 1 4 3 3 1 1 2 3 1 5 5 5 3 4 3 4 1 5 0 7 4 1 1 1 4 2 8 3 1 1 2 1 1 8 0 6 3 9 6 1 7 5 3 2 3 3 3 3 1 2 1 7 0 11 7 2 1 5 8 8 1 5 6 1 3 3 3 1 2 2 3 1 1 5 5 2 3 7 1 6 0 10 7 3 1 7 8 2 5 7 6 1 1 3 1 2 1 2 1 9 0 9 6 3 6 9 4 2 1 8 7 3 2 1 3 2 3 1 3 1 1 6 0 9 6 3 5 7 5 6 1 5 8 3 3 1 1 3 1 4 4 4 4 2 2 4 7 3 4 4 4 5 3 7 1 9 0 7 4 1 2 6 5 3 5 1 2 2 2 2 1 3 2 3 1 7 0 8 3 7 1 8 9 1 9 7 3 2 1 1 1 1 2 1 8 0 6 4 1 1 8 1 1 3 1 3 3 1 1 2 3 1 2 1 1 1 2 4 3 5 1 7 0 6 4 4 1 9 2 1 3 2 3 1 1 1 2 1 7 0 9 8 9 1 4 6 7 4 2 1 2 2 1 2 1 3 1 1 6 0 6 1 3 9 1 4 7 1 1 1 3 2 1 3 2 1 1 5 3 4 1 6 0 11 8 7 1 4 7 9 1 1 8 1 7 3 1 3 1 1 3 1 5 0 10 2 2 2 6 6 2 2 3 4 1 1 1 1 1 2 1 7 0 9 6 3 3 1 2 2 8 3 7 1 2 3 1 2 3 1 5 1 1 3 3 4 1 8 0 10 5 8 1 1 6 7 3 1 3 6 1 2 1 3 3 2 1 2 1 5 0 10 1 5 1 3 2 2 7 9 1 6 3 1 1 3 2 1 9 0 8 1 7 6 1 5 6 7 7 1 1 3 1 1 1 1 1 2 1 1 1 5 5 2 5 3 4 4 5 3 5 1 9 0 9 5 8 2 4 1 7 3 1 1 3 2 3 2 2 1 1 2 3 1 7 0 7 8 6 8 1 6 9 8 2 3 1 1 3 1 1 1 5 0 11 8 4 1 7 5 8 2 2 2 2 7 3 1 3 1 1 2 3 3 4 3 3 4 1 9 0 7 8 7 4 8 1 4 1 1 1 3 2 1 1 3 3 3 1 9 0 7 5 7 3 9 8 9 1 2 2 3 2 1 3 3 1 2 1 6 0 6 1 3 6 1 4 1 1 2 1 2 2 3 2 1 4 4 3 4 1 9 0 10 7 7 1 8 8 9 1 9 4 4 1 3 2 1 1 1 1 3 3 1 7 0 8 2 1 1 4 4 4 7 2 2 1 1 2 1 2 2 1 8 0 8 4 2 4 2 3 6 5 1 3 2 3 1 1 1 1 1 4 1 1 5 3 5 1 5 0 11 8 1 1 4 4 4 7 9 5 9 3 1 1 1 3 1 1 6 0 8 1 6 7 3 9 3 6 5 2 2 1 2 2 1 1 9 0 11 1 1 7 2 5 1 1 8 7 1 2 2 2 2 2 2 2 2 1 2 1 5 5 1 3 5 1 5 6 6 5 4 3 7 1 8 0 8 6 1 1 2 1 7 9 6 1 3 1 2 3 3 1 3 1 6 0 8 5 9 1 7 3 4 4 1 2 1 3 1 2 1 1 8 0 8 1 6 5 4 4 7 7 1 2 3 3 2 2 2 1 2 5 5 4 3 2 3 1 3 7 1 8 0 6 8 1 1 1 5 1 3 1 1 2 2 3 1 2 1 7 0 8 1 4 7 1 9 2 1 7 2 2 2 1 2 2 1 1 8 0 11 1 2 7 8 4 6 7 4 1 8 6 1 1 1 1 1 1 3 1 1 1 1 3 5 1 2 3 4 1 5 0 6 4 5 9 9 1 5 1 1 1 3 3 1 9 0 8 1 2 5 3 7 7 2 1 3 1 3 3 3 3 2 3 3 1 7 0 10 8 2 5 3 1 6 4 1 2 6 1 2 2 1 2 3 3 2 3 3 3 3 7 1 5 0 10 1 3 5 8 6 4 7 7 2 4 3 1 3 1 1 1 7 0 8 5 4 1 4 4 9 4 3 1 1 2 3 1 1 2 1 7 0 10 7 9 7 8 7 2 1 3 2 4 2 3 3 1 2 2 1 4 1 5 4 3 4 2 3 4 1 8 0 9 1 7 9 7 8 1 4 8 9 2 2 3 2 1 3 1 2 1 5 0 7 4 2 3 3 1 2 8 1 2 1 3 1 1 8 0 7 7 1 1 1 4 5 8 1 2 3 1 1 3 3 2 5 1 5 3 2 4 4 2 1 5 6 6 3 5 3 3 5 1 7 0 10 4 7 3 5 1 7 3 9 3 1 2 1 2 1 2 2 2 1 5 0 10 6 2 1 5 5 7 2 6 2 9 1 3 1 1 3 1 9 0 10 7 2 3 8 8 2 1 6 4 5 1 2 2 2 2 3 2 3 2 5 3 4 2 3 3 6 1 8 0 9 3 1 4 9 5 3 5 6 7 1 2 2 1 3 3 3 2 1 6 0 11 2 9 5 1 4 7 3 3 1 8 7 2 2 2 2 1 1 1 9 0 10 3 3 7 5 1 1 6 3 7 2 3 2 2 1 1 1 1 3 2 2 2 2 5 2 1 3 5 1 7 0 11 2 2 1 5 1 6 5 6 7 4 7 3 2 1 3 2 1 1 1 8 0 6 4 1 1 6 1 1 1 2 1 3 1 3 1 1 1 7 0 10 2 1 5 2 7 6 5 9 2 2 3 1 3 1 2 2 3 1 4 5 2 4 3 5 1 7 0 6 3 8 4 4 7 1 1 1 3 3 1 2 1 1 8 0 6 9 2 9 5 7 1 3 1 3 3 3 1 2 3 1 5 0 7 9 6 2 1 1 4 8 1 1 1 1 2 4 3 3 3 2 3 5 1 5 0 8 1 1 1 8 1 2 1 8 1 2 1 2 1 1 8 0 9 5 1 8 2 8 5 2 1 1 1 2 1 1 3 2 3 1 1 8 0 8 7 1 6 8 9 1 2 1 3 2 1 1 3 1 3 2 1 2 2 4 2 4 7 5 5 3 3 5 1 5 0 7 8 1 6 1 8 3 4 3 1 2 3 1 1 9 0 6 1 8 5 5 7 7 1 3 1 1 1 1 1 2 1 1 9 0 6 1 7 6 7 9 7 1 2 2 3 1 3 2 1 3 5 5 3 1 3 3 6 1 7 0 6 1 4 9 7 1 1 1 2 3 1 2 3 3 1 8 0 10 9 4 1 5 3 3 4 1 1 4 1 2 1 2 2 1 1 3 1 7 0 11 1 9 3 8 3 6 9 2 6 4 7 1 3 1 1 2 3 2 4 3 5 4 2 4 3 5 1 9 0 8 4 9 8 3 1 1 1 5 2 3 3 1 1 1 2 1 1 1 8 0 10 6 7 6 9 4 1 8 7 1 4 2 3 3 1 2 1 1 1 1 7 0 6 3 1 5 6 9 6 3 3 1 3 2 3 2 2 2 1 1 4 3 6 1 8 0 9 1 9 2 1 8 2 3 3 2 1 2 2 3 3 2 2 2 1 7 0 10 6 3 5 6 1 2 3 4 2 3 3 1 1 2 3 3 3 1 8 0 9 7 5 6 2 2 2 7 9 1 Line truncated
|
||||||
Reference in new issue
Block a user