From 5accf0f63ba72dccc80511d825c47c05a8d1729e Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Sat, 19 Dec 2020 09:44:25 +0100 Subject: [PATCH] day19: lean on the solution for p2 and split the checks in two (much!) smaller lists -> from 1.1s down to 8ms --- day19.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/day19.py b/day19.py index edb4e69..a417152 100644 --- a/day19.py +++ b/day19.py @@ -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