X-Git-Url: https://git.sommitrealweird.co.uk/advent-of-code-2020.git/blobdiff_plain/b1754ed665fed108a29cd4f9f5d6bee7c38f0258..74eb6cebd0b3532d96275e3e2aa8d41657f00cbf:/day19/monstermessages.py?ds=inline diff --git a/day19/monstermessages.py b/day19/monstermessages.py new file mode 100755 index 0000000..0dc8d16 --- /dev/null +++ b/day19/monstermessages.py @@ -0,0 +1,59 @@ +#!/usr/bin/python3 + +import sys +import re + +filename="p1_2.txt" +if len(sys.argv) > 1: + filename=sys.argv[1] + +in_rules=True +rules={} +data=[] + +for line in open(filename, "r"): + line = line.rstrip() + if line == "": + in_rules=False + continue + + if in_rules: + (rule_number,rule) = line.split(":") + rule_number=int(rule_number) + rule=rule.strip() + rules[rule_number] = [s.strip() for s in rule.split("|")] + else: + data.append(line) + +def get_rule_regex(rulenumber): + regex="" + first=False + for rule in rules[rulenumber]: + if rule[0] != '"': + # not a character, so we're going to go down the wishing well + for number in rule.split(" "): + number=int(number) + regex+=get_rule_regex(number) + regex+="|" + else: + regex+=rule[1:-1] + if regex[-1] == "|": + regex=regex[0:-1] + regex="("+regex+")" + + return regex + +# ok - so all the rules are in, lets build a huge regex that gets all the rules +for rule_number in rules: + print(str(rule_number) + ": " + "| ".join(rules[rule_number])) + +pattern="^"+get_rule_regex(0)+"$" + +match_count=0 + +for line in data: + if re.search(pattern, line): + print("Line: {} matches".format(line)) + match_count+=1 + +print("There were {} matches in total".format(match_count))