aoc/2020/19/19.py
2020-12-19 01:13:16 -06:00

68 lines
1.6 KiB
Python

def read_file():
with open("input.txt","r") as f:
rules, messages = f.read().split('\n\n')
messages = messages.split('\n')
rules = rules.split('\n')
rules = {
int(r.split(':')[0]):
[[int(x) for x in sr.split()]
for sr in r.split(':')[1].split('|')]
if '"' not in r else r[-2] # a or b
for r in rules
}
return rules, messages
def consume(message, rule, rules):
if type(rules[rule]) == str:
if message and message[0] == rules[rule]:
return [message[1:]]
else:
to_be_consumed = []
for group in rules[rule]:
message_list = [message]
for rule in group:
message_list2 = []
for submessage in message_list:
message_list2 += consume(submessage, rule, rules)
message_list = message_list2
if not message_list:
break
if message_list:
to_be_consumed += message_list
return to_be_consumed
return []
"""
import re
def part1(rules,messages):
rule = rules["0"]
groups = re.findall(r'(\d)', rule)
groups = [rules[key] for key in groups]
while True:
for i in range(len(groups)):
m = re.findall(r'(\d)', groups[i])
for g in m:
groups[i] = groups[i].replace(g, rules[g])
print(groups)
test = re.findall(r'(\d)',groups[1])
if not test:
break
def part2(rules,messages):
pass
"""
def main():
rules, messages = read_file()
print(sum('' in consume(m, 0, rules) for m in messages))
rules[8] = [[42], [42, 8]]
rules[11] = [[42, 31], [42, 11, 31]]
print(sum('' in consume(m, 0, rules) for m in messages))
#print(part1(rules,messages), part2(rules,messages))
if __name__ == "__main__":
main()