This commit is contained in:
Sebastian Seedorf
2020-12-19 13:04:32 +01:00
parent f6974a7ba3
commit 86be05b9f1
3 changed files with 577 additions and 0 deletions

39
day19/part1.py Normal file
View File

@@ -0,0 +1,39 @@
#!/usr/bin/env python3
import re
lines = (x.strip() for x in open("input.txt"))
rules = {}
def yield_rule(line, rule):
if len(rule) > 0:
elem, *tail = rule
for rest in check(line, elem):
yield from yield_rule(rest, tail)
else:
yield line
def check(line, idx):
rs = rules[idx]
if isinstance(rs, str):
if line.startswith(rs):
yield line[len(rs):]
else:
for rule in rules[idx]:
yield from yield_rule(line, rule)
sum = 0
for line in lines:
if ":" in line:
idx, r = line.split(": ")
idx = int(idx)
r = r[1:len(r)-1] if r.startswith('"') else [[int(num) for num in x.split()] for x in r.split(" | ")]
rules[idx] = r
elif line != "":
for rest in check(line, 0):
if rest == "":
sum += 1
print(sum)
exit(0)