day19: lean on the solution for p2 and split the checks in two (much!) smaller lists -> from 1.1s down to 8ms

This commit is contained in:
Stefan Harmuth 2020-12-19 09:44:25 +01:00
parent 80a918cd69
commit 5accf0f63b

View File

@ -51,10 +51,24 @@ def part1(test_mode=False):
my_input = aoclib.getMultiLineInputAsArray(day=DAY, test=test_mode)
populate_rule_dict(my_input[0])
valid_messages = set(get_valid_messages("0"))
# split rule 0 to save time
# rule 0 == 8 11
valid_messages_8 = get_valid_messages("8")
valid_messages_11 = get_valid_messages("11")
len_8 = len(valid_messages_8[0])
len_11 = len(valid_messages_11[0])
valid_messages_8 = set(valid_messages_8)
valid_messages_11 = set(valid_messages_11)
counter = 0
for message in my_input[1]:
if message in valid_messages:
if message[:len_8] in valid_messages_8:
message = message[len_8:]
if message[:len_11] in valid_messages_11:
message = message[len_11:]
if len(message) == 0:
counter += 1
return counter