blob: 7317c4447c1fe37782781d82faf5eb39172e4744 (
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
|
import aoc20
import sys
from collections import defaultdict
import functools
import re
def pt1(_in):
rules = dict()
for rule in "".join(_in).split("\n\n")[0].split("\n"):
rule = rule.replace("\"", "").split(": ")
rules[rule[0]] = rule[1] if rule[1] in "ab" else "( {} )".format(rule[1])
@functools.cache
def format_rule(rule):
if rule not in rules:
return rule
return " ".join(format_rule(token) for token in rules[rule].split())
regex = re.compile(format_rule("0").replace(" ", ""))
return sum(1 for line in "".join(_in).split("\n\n")[1][:-1].split("\n") if regex.fullmatch(line))
def pt2(_in):
pass
if __name__ == "__main__":
_in = aoc20.read_input(sys.argv[1:], 19)
print(pt1(_in))
print(pt2(_in))
|