adventOfCode/19-monsterMessages/python/partTwo.py
2020-12-19 20:29:34 +00:00

26 lines
801 B
Python

from common import *
import re
def partTwo(instr: str) -> int:
# patch input
instr = instr.replace(
"8: 42", "8: 42 | 42 8"
) # the new rule 8 can be expressed as 42 | 42+
instr = instr.replace("11: 42 31", "11: 42 31 | 42 11 31")
rules, messages = parse(instr)
# Since we have sections of our ruleset, we have markers in the regex returned by `make_ruleset_regex`
# that denote where we need to insert a copy of the rule 11 regular expression (which also happens to
# have one of those markers in it)
rr = make_ruleset_regex(rules)
eleven_regex = generate_rule_regex(rules, 11)
for _ in range(10):
rr = rr.replace(replace_marker, eleven_regex)
# run as usual
rule_regex = re.compile(rr)
return run(messages, rule_regex)