#!/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))
