From 0a1fcb9ed96574dc823817926adf691b3daa036f Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Sat, 19 Dec 2020 09:02:46 +0100 Subject: [PATCH] day19: raw version --- day19.py | 97 +++++++++ inputs/19 | 530 +++++++++++++++++++++++++++++++++++++++++++++++++ inputs/19_test | 47 +++++ 3 files changed, 674 insertions(+) create mode 100644 day19.py create mode 100644 inputs/19 create mode 100644 inputs/19_test diff --git a/day19.py b/day19.py new file mode 100644 index 0000000..d363f18 --- /dev/null +++ b/day19.py @@ -0,0 +1,97 @@ +import aoclib + +DAY = 19 +TEST_SOLUTION_PART1 = 3 +TEST_SOLUTION_PART2 = 12 +rule_dict = {} +valid_message_cache = {} + + +def populate_rule_dict(raw_input): + for line in raw_input: + rule_id, rule = line.split(": ") + if "|" in rule: + rule_dict[rule_id] = rule.split(" | ") + else: + rule_dict[rule_id] = rule + + +def join_messages(msglist): + if len(msglist) == 1: + return msglist[0] + + if len(msglist) > 2: + msglist = [msglist[0], join_messages(msglist[1:])] + + answerlist = [] + for x in msglist[0]: + for y in msglist[1]: + answerlist.append("%s%s" % (x, y)) + + return answerlist + + +def get_valid_messages(rule_id="0"): + rule = rule_dict[rule_id] + if '"' in rule: + return [rule[1]] + + if not isinstance(rule, list): + submessages = [get_valid_messages(subrule) for subrule in rule.split(" ")] + submessages = join_messages(submessages) + else: + submessages = [] + for choice in rule: + choicemessages = [get_valid_messages(subrule) for subrule in choice.split(" ")] + submessages.extend(join_messages(choicemessages)) + + return submessages + + +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")) + counter = 0 + for message in my_input[1]: + if message in valid_messages: + counter += 1 + + return counter + + +def part2(test_mode=False): + my_input = aoclib.getMultiLineInputAsArray(day=DAY, test=test_mode) + + populate_rule_dict(my_input[0]) + valid_messages_42 = get_valid_messages("42") + valid_messages_31 = get_valid_messages("31") + + len_8 = len(valid_messages_42[0]) + len_31 = len(valid_messages_31[0]) + + # rule 0 == 8 11 + # rule 8 == 42 | 42 8 (so just a multiple of 42) + # rule 11 == 42 31 | 42 11 31 (so any multiple of 42 followed the same multiple of 31) + # so a valid message consists of a multiple of 42 followed by a multiple of 42 followed by a multiple of 31 + # just make sure you find at least one more 42 than 31 (to accomodate for the 8) and nothing else + counter = 0 + for message in my_input[1]: + count42 = 0 + while message[:len_8] in valid_messages_42: + message = message[len_8:] + count42 += 1 + + if len(message) == 0: + continue + + count31 = 0 + while message[:len_31] in valid_messages_31: + message = message[len_31:] + count31 += 1 + + if len(message) == 0 and count42 > count31: + counter += 1 + + return counter diff --git a/inputs/19 b/inputs/19 new file mode 100644 index 0000000..3f03965 --- /dev/null +++ b/inputs/19 @@ -0,0 +1,530 @@ +3: 97 29 | 2 104 +45: 97 10 | 2 73 +114: 44 97 | 90 2 +78: 2 95 | 97 32 +7: 97 64 | 2 119 +118: 97 81 | 2 58 +64: 97 29 | 2 14 +106: 53 121 +4: 2 103 | 97 55 +54: 2 53 | 97 44 +58: 33 97 | 130 2 +91: 104 97 +102: 104 97 | 83 2 +128: 2 59 | 97 3 +79: 98 2 | 124 97 +117: 2 65 | 97 92 +1: 75 2 | 115 97 +40: 2 96 | 97 119 +8: 42 +92: 102 97 | 57 2 +97: "a" +93: 2 66 | 97 103 +36: 2 104 | 97 32 +2: "b" +108: 43 2 | 68 97 +46: 44 2 | 90 97 +31: 97 5 | 2 132 +110: 14 2 | 90 97 +61: 38 2 | 9 97 +10: 63 2 | 34 97 +32: 2 2 | 97 121 +11: 42 31 +103: 121 121 +131: 75 97 | 60 2 +74: 2 112 | 97 47 +20: 93 2 | 69 97 +53: 97 2 | 97 97 +23: 125 121 +9: 97 66 | 2 25 +101: 83 97 | 95 2 +35: 25 2 | 104 97 +76: 97 55 | 2 104 +125: 83 2 | 32 97 +22: 59 97 | 76 2 +127: 6 97 | 55 2 +126: 97 119 | 2 17 +113: 59 97 | 35 2 +81: 46 2 | 72 97 +104: 2 2 | 97 2 +100: 25 2 | 95 97 +95: 97 2 +132: 97 27 | 2 45 +107: 97 90 | 2 32 +34: 98 97 | 50 2 +33: 2 95 | 97 83 +119: 32 97 | 66 2 +90: 2 2 | 97 97 +77: 126 2 | 22 97 +6: 2 97 +14: 97 2 | 2 121 +94: 2 110 | 97 129 +21: 56 97 | 105 2 +65: 2 96 | 97 98 +122: 2 71 | 97 86 +87: 101 97 | 91 2 +15: 107 97 | 120 2 +120: 103 2 | 66 97 +56: 128 2 | 20 97 +129: 2 66 | 97 83 +41: 97 48 | 2 122 +13: 39 97 | 26 2 +30: 97 88 | 2 54 +84: 55 97 | 53 2 +86: 84 2 | 59 97 +96: 55 2 | 104 97 +83: 97 121 | 2 97 +50: 53 97 | 95 2 +19: 2 70 | 97 78 +121: 2 | 97 +57: 53 2 | 83 97 +37: 6 97 | 6 2 +68: 97 53 | 2 83 +112: 97 23 | 2 19 +66: 2 97 | 2 2 +49: 97 90 | 2 103 +80: 2 97 | 97 97 +85: 83 97 | 55 2 +12: 2 35 | 97 51 +116: 97 67 | 2 77 +123: 4 2 | 85 97 +82: 21 2 | 111 97 +105: 30 97 | 87 2 +72: 25 97 | 95 2 +115: 104 2 | 29 97 +63: 97 37 | 2 36 +42: 24 2 | 82 97 +0: 8 11 +70: 2 80 | 97 25 +5: 2 74 | 97 116 +52: 16 97 | 94 2 +62: 35 97 | 114 2 +18: 123 2 | 61 97 +25: 97 97 +88: 83 97 | 66 2 +124: 2 6 | 97 80 +89: 114 97 | 100 2 +44: 97 2 | 2 97 +71: 49 97 | 106 2 +38: 2 104 | 97 90 +75: 53 2 | 104 97 +98: 53 2 | 25 97 +69: 97 95 | 2 95 +73: 2 1 | 97 7 +24: 41 97 | 109 2 +48: 2 40 | 97 113 +39: 103 2 | 104 97 +67: 2 15 | 97 62 +55: 2 2 +47: 2 79 | 97 108 +51: 6 2 | 95 97 +17: 95 2 | 90 97 +59: 53 97 | 66 2 +28: 2 12 | 97 131 +27: 2 52 | 97 28 +29: 97 97 | 2 121 +16: 4 2 | 127 97 +109: 2 117 | 97 18 +43: 104 97 | 6 2 +99: 97 89 | 2 13 +130: 83 121 +111: 99 2 | 118 97 +60: 97 44 | 2 25 +26: 121 44 + +abbbbababababbaabbbbbbab +bababababaabbbaaaabaabaaaaabaabaaabbbbab +baaaabbbabbbbababbbbaabababaaababbaaaabbbbabbbbb +abbababaaabbabbaabaaaaaaaaaabaabaaabaabb +aabbaababaabbabbaaabaababaaaabab +baabaaaaabbabaabaaabaaabbaaabbabbaaabbbbbabbbaba +babaabaaabaabaababaabbab +bbbbbababbbaaaababaaaaabbaabaaba +bbaabaaaaaaabbabbababaabbabbaaaa +aabbababaaaabababbbbaabbaaabbaba +bbaaababbbbaababbbbabababbaaabaaaaababba +bbbbababaabbbabaabbaabbaaaaabbbabbbbbbbbbaaaabaabbbaaababbaaaaababbbabbabbabaaab +bbbabbbabbaaabaaabaababbbaabaabaaabbbbba +abbbbbabbaabbbbbbaaaabbbbaaaaabb +aabbababbabbababbbbbaaabaababbaabbaabbaa +bbbbbabaaabbaaaaabaaabbbabbaaaba +baaabbbbbaabbaaabbbaabaaaaaabbbbaabaaaab +bbabbbaaaabaabbaabbbabab +bbbbbabbbabbbababbabaabaabbbbaab +aaaabbabbbababbabbaabaaaaabbbaaaabbabbababbbaabbbbbbaaaa +bbaabbabbaaabbabababbbbbbbbbabbbaabaaaaaabbababbbbbaaaba +bbbaabbbaaabbaabbbbbbaaa +bbabbabbbababbbbababbbaa +baabbbabaabaaabaabbbbbbbaaabbaaaabbababa +aabbaabaabaabbbabbbbabaaabbabbbbabbabaabbbabbbaababbbbba +aaabababbbbaaabbbaaaaaabaaaaabaabaabababbbbabaaaabaaaaabbbbbbbba +babaaabaaabbbabaabaaabbbababbabbbabbabaaaaabbaba +aabbaaaabbbbbabbbbaaabbbaabaabbbbbaaabbbabaabbbbbbbababaabbaaabbabbaaaba +aaaabababbaabaaaaaaaaaba +babbbbaababaaaabbbabbbabaaababaaabababaaaaabbaababaaaaba +abbbabaababababbabbaaaab +babaabbbbabababaabaaaabbbababababbaaaabbaabbabba +bbabbababbbababbabbaaabb +bbabababbbbababbbbbbaaaa +bbaaababaaaababbbabbbaba +aabbbabababbababbababaaaababbaabbbabbaabaabbabbbbaaaaabb +bbbbbababbaabbababaabbbbababbbaabbbabbba +abbbbaabbbaaababaaababaaababbbbbbbaaaaaabbbaababaabababb +baaaaabbbaabaaabbbbbbaaaaabbaabaaabbaaaabbbbbbbbbbaaaaabbabbbababbabbbba +abaabbbaaabaabbbbaaabbababaabbab +abbbbababbbbaaababbbbbabbababbaaababbabaabbaabbb +babbababaabbbaaabaaabbabbbbaabaabaaaabbbabaabbaaabbbbbba +babbabaabaababbabbaabbbbbaabaaabbaabaabbbbaaabbaaabababb +babaaaaababbbaaabbabbabb +baabaaabbbbababbbabababbabbabaabbbaabababbbbbbabaabaaaab +aaaaabbbaababaababbbbababbbabbaaabbbabbbabbaaabbababaabbbaaabbaaaaaabbaa +bababaaaabbbbbbbababbbababbbbbaabaabbaab +baaabbbbaaaaabbabbababaaabbabbab +aaaaabbbaabbbaaabaaaaaabbabbbbbb +aababbaabbbabbaaabbbbabbaaaabbbb +aabbababbbbbbaabbaaaaaaaabbbbaabbbabaabb +bbbbbaabbbbbabaaabbbbbaa +babababaabaaaaaabbaaabbaaaaabbbaabbbbbababaaababbbabaaabbaabbabb +bababababbaaabbbababaabb +bbabaababbaaaaabbabbbaaabbbaaaababaaaaaaaabbbbab +bbabbbabbbbbabaabbbabaaa +aaabbbaabbaaaaabbbabbabababababbabbababb +aabbaaaabaabaabbbbbbaabaaaaabaaabaabbaab +aaaabbbabbbbaaababbabbab +abbaaaaabaabbbaaaaabbbbbbbababaabbbbaabbabbbababbaaaabaa +aaaabbbababababbbaaababaabbabbbabbabbbbb +baaaaaabbaababbbabbaabaa +aaaabbbaabaaabbbbaaaabbababaaabaaaabbaaabbababaa +bbaaaaabbabbaabbbabbbaba +aaaabbbababababbababbaababaabaabaaabbaab +baaaaaababaaabbabbabbaabaaaabbbb +bbbbaaabaaabaabaaabababaabbabaabbbbaaabb +aaabbababbbbaabbbbaababbaaababba +aabaabaaaaaababbbabbaaaabaaaaabaabbabaaabbabaaabaaabbbababaaabaa +aabaaabbabbabbbaaaabbbab +bbaaaaaabaabaaaababbaaaaaabaababbbbbbabbbabbbaaabbbabbbbbabbbaab +bbbbabaabbabbaaabaaaaaaabbbaaaabaaaabbababbaabbbbbabaabaaaabbbbaaaababaa +aaababaabaababbabbaabbbbbbbabaabaaaabaaabaaabbabaaaabaab +ababababbbbbbabaababbbabbbbaaabbabbababaaaabbbba +babbbbabbaabaababbabbbaabbbaabbbbaabbaab +aabaaababbbbaaabbabaabbaababaababbbabaab +aabaaabbbbaabbbbbbbaabbababbabaabbaaabaa +abbbbbbbaabbbaabbbabbbabbababbaabbababbb +aabababababaaaaabbbababbbaabbbba +aaaababbabaaaabbaabaabbaaaabaaaa +bbbbbabbababbaaaabbbbbabbaabaababbbbbaaa +aabbaaaababbbaaaaaaabbaa +aaaaaaabaabaaabbabbaaaaa +babaaababbaaabbabaabbbbbbaaaababbbaabaab +abbabbbaaaababbbababbbabaabaababbbababab +baabbbaabbabbbabaabbbaaabbaaaabbbbaaabaaabbaabbb +babaabaaaaababababbbbabbbabaabaaaabaaabaababababbbaabbbabbaaaaaababaaaab +aabaaabbaababbaaabbbbbaa +aaababaaaaaaabbabbbbbbba +ababbbabbabaabbabbabbbbababbaabbaabababb +baabaaabbaaaaaabababbaababaaabaaabbbbbbbbaabababbbbabbba +bbababbababbababbbaabbbbbbbababbabbaaabbbbbbaabbaababbba +ababbaaaaaabbbaaababbbaa +ababbaabababbaabbaabbaba +aaaaabbabbabbbabbbaaabbbababababaaababbabababbabaaabbbabbbaaaaba +aabaabaaabbbbabbababbaababaabaaabaababab +bbabbaaaaabbbabababababbababbbaaabbbaaaababbbabbbbbbbbabaababaaa +aabaaabbbbbbababaaabaaaaaababbaaabaaabaaaabaabaabababaabbbbaaaaabbbabaaa +aaabaabaabaabbbabbbbabba +aaabbbaabaabbbabbbababbb +bbbbbaababbbbaabbbabbaabbbbaaaaa +baaaabbbbbabbbababaaaaababbbabab +bbaaaaabbaabaabbaabbaaaaabaaabaaaaababbbabaababa +babaabbaabaaabbabaababbaababaaaa +abbbaababaaabbababbbbaabaaababbbbbbbbbab +abbbbbbbbbaaabbbaabbabaa +baababbabaaababaababbabababbbbabaababbbaaaabaabbabbaaabb +bbababaabbaabbbbbabaabaababbabba +bbbaabaaababababbaabaaba +aaabaaaaaaaaabaabbabaaabbbaabbab +aaaaabbaababbabababaabaabbbaaaaa +ababbabaaaaaaaaabaabbbaaaaaaaaabaaaaaaaababbaaaa +aabaabababbaababaababbabbaabbaabbbaaaabbababbabbbaaabbba +babaaaaababbaabbbbbbabaabaaababababbbabbaabbaaab +bbabbbabbbbaaaabaaaabbaaabbaabaabaaaabaa +baababbabbabbbaabaabbaab +babaabbbabaabbbaabaaabaaabaaabab +abaababbbababbbaaaaaabbababaaabbbaaabbbb +aaaababbaabaabbabbaaaaaa +baabbbbaabababababbbbaaababbaaaabbbbaaababaabbaaaaabbbbbaabbabbbbbaaaaaa +bbbbaaabbabbbaaaaabbbbba +aaabbbaaaabababaababbaabbbbabaaa +baabbbbbbaabaabbbababbaabbbabbabaabbbbab +baaababbaabaaabbbbbaaaaaaabbabbaaaaabaab +ababbabbabbbbbbbabababbaaaabababbaaabbaa +baaabbbababaabbbbaaaaabb +bbaabbbbababaabaaaaaaaba +aabbbabbbbabbbabbbbbabba +abbabbbbaabaaabaaabaabab +aaaaaaaaaaabaababbaaaabbaabbbaabbbbabbaabbabbabbababbbaabbaababbaaaaaaba +abaabbbbaabbbabbabbbbabaabbabbab +bbaabbabbbabbbbaabbbbaabababbbbaaaaaabbabbabbbbb +bababaaabaabbbbbbbaabbbaaaabbbab +abbbabaabaabaabbbaabbababbbababababbbabb +ababaabababababaababbbabbababaabbabbbaababababbb +baabbbbbabaabbbbabbbabab +ababbabbbabababbbbabbaaaaabbabbb +baabbabbbbaabaaabbabbaabbbabaabb +babababbbabaabbaabbbbbba +abaaaaabbbababaaaabaabbbaaaabaab +baaaaaabbabbababbaababbbbaabbabbaabbbbab +abbbabaabbaaababaabbbaabaababaabbababbabaababbba +bbabababaabbbbaaaabaabaaabaababbaabaaaaababbbbabbbaaaaabbabababaaabababababbaabb +aaababaaababababbbbbbababaabbabbabbbbabababbbaba +aabaabbbaaaaaabbbbbaababbabbbbba +bbabbbabbbaaabbbabaabbbababbababbbbaaabaaaaaabaabaaabaabaabbbbaaabbbabab +bbaabbbbbbaabbbbbaaababaaababbabbaaaabba +ababbbbbabbbbaabaabaabbaabaabbab +bbabbbaaaabbbaabbbababbaaaabbbba +baabbbbbababbabababbbaababbabbbaaaaaaaba +abbabbbaaabbbaaabbabaabababbabaaabbaaaaaaaaabaabbbabbbbb +aaabaaabbaabaabbbaababaabababbbbaabaaaab +baabbbaabaabaabbaababaabbbaaabba +abaaabbbbbbbabaababaabaaababbbbaaababbaaaabbbabaabaaaabababbbbbbabbaabab +abaaaabbaaaaaaabbbbbabaaababbabbabaaabaabbaabbba +bbaabbabbbbaabaabbaabbaa +abbbbababaabbbaabbbbbabaababbbaabbbbbaaa +babaaaaabbbbbbbbbbbbbababbbaabaabaaaaaabbbabaaabaabbabaa +bbaaababbabaabbabaabbbbbbababaabaabababbbabbbbba +baaaaaababbabaabaaaababaababbaabaaaaabab +aabaaaaabababaababaaababaaaabbabaabaaabaabbababbbaaabaaabaababaa +babababbababababaaababbb +aaabaaabbbababaaaabaabbabaaabbbabaaaabab +abbabbbaaaabbbaabbaaaabbbabbbabbabaabbaa +bbbbbabbabaaabaabbababaabaabbabbbabbaabbbbbbabbbabbaaaaa +bbbbbabaaabbbabaababbbbbabaabbbbbbaaaabbbbbaabbbabaaabab +bbabababbababaabababbbbbbbbaaabbabbaabbb +aaaaaabbbbbaababbbaaabaabbbaaaaa +aaababbabbabbbaababbabbaabbabaabaaabaababbbabbabbbbbbbbbaabaaaab +abbbbbbbbaaabababaaaaaabbbabbabb +babaabaabaaabababaabbabbbabaabaabbbaabaabbabbbaabbbabaaa +bbaabbabbbabaaabaaaaaabbbbabaaab +baaababbababbaaaabbbbbba +baaababbaaaabaaaaababbaabaabbbbbabaaaaababbaabaaaabbbbaaaaabaaaa +aabaabbbbababaaababbabaabaabbaaabbaaabbbbbbbbbbbabbababb +aabbbaaababaabbabaabaaaaaabaaabbbabbaaabbababbbbabaababb +baaabbabbaaaabaaaabaaababbbbabaaaaabaaba +ababbaabbaabbbabbabbababaaaabbbbaabbabba +abaabbbbbababaaabaababab +baabaaaaabaaabbbaabbaabbaaabbbbb +bbbbbbaaaaabbaababbabbabbbbbbbaa +abaaabaabaabbbbbbabababbbabbbaaaabaabbbaabbbabbbaabaaaaa +bababbaabaaabbababaababb +bbbabaabbababbaabbbabbaababbbbbbbbbbbbab +bbbbbbbbaabaabbaaaabaaabbbaaabbbbbabbbbb +abbabbbabbbbbaabbbaaabbbbaabbbaaabaabbbbbabbabbb +baaabaaababaaaaaaabbbabbbaabbaaababbbbbbbaaaabba +abaaabbaabaabbbabbaaabbbabaaabbbaababaaa +aaaaabbbaabaabbabaabbbbbbbaabbaa +aaaabbbaabbbbabaabbabaaaaaabaabb +aaabaaabaaabaaabbaabbaaababbbbabbabaaaab +aabaaabaaabababaabaaabaaababbaaa +bbbabbaabbabaababaaabbbabbbbaabb +bbaabbbbbaaabaaaaaaaabbaaaabbbbb +abbbabbaababbbbbbbbabaaa +bbbababbababbbabaabaabba +babbbaaababaabbbbbababababbbabaaabbbbaaa +abaaaaabbaaaaaabbabbabbb +ababaababbbbbabaaababbab +abbbabbbaaaaaaababbbaaaa +babaaaaabbaaabbbabbabbbbaabbaaaaabaabbabaaabbabb +babbaabbbbbbabaaabaaabbaabaabaaabababbba +ababbbbbaaabababbbbabbaaabaaaaaa +bbaaaabbbaabbbaababbbbbb +abaabbbaabbbbbbbaaabababbbbbababaaaabbaa +abaaabaaabbabbbbbabbababbabbbaabaaaaaabaaaaaabaabaababab +abaabaabbaaabbbbbbbbbabbaaabababbbaabaaaaaaaabab +aaabbbaabaabbbbbbabaabbabbbbaabb +bababaaabaabbbaabbaaabbababbbaabbbbabaababaabbaababaaaab +aaabaabaaababababbabbbbb +bbbababbaabbbaaaaabbbaabbababbba +baabbbaaabbabbbbbbbbabaaabbbbaabbababbbb +baabaaaaaaabababaaabbbab +babababbaabbbabaabbbbaaa +babaaababbaabbbbbababaaaabbbaababbaaabaa +aabbbabbbabbababaaaabababbbaabba +aabbbaaabbabaabbbbbbabbabbbbbbaaaababaaaabbbaaabbaabbabaabbbabaaababaaaa +ababaabaaaaababbbaaaaaba +bbabbbbaababaababbabbaabbbabbaaaaaaaaaababbbbbbabbabaaababbbbaaabbabbbbb +bbaabbabbaaabaaaaaabbbaabaababbbbaababbabababbababaabaaa +bbbbbaabbababaabbbabbaabbbababaabababbab +baaabbabaababbaaaaabbbaabbbbbaabbabbbaaaabbaaaabaabbbbaa +aababababababbaaabaaaaababbabaabaaaabbbaabaaabaaabbaababbbbabbbbbbbaaaaababbbbab +aaabababaabaaabbaabaaabbaaabbabbaabbaaab +baaabaaabbbbbbbbaaaaaaba +abbbabbbbbbbaababbbabaaa +babababbbbbbbabbaabaabbababbbbba +aaaaabbaaabbbaababaaabbbaabbbbab +bbbaaaaaabbabababaabbbaaaaaabbaaaababbbaaaaabababbabaaaaaaaaababbbbbbaabbbabaaab +aabaabbabababbbaabbaabbbbbabaabbbbabaabb +aaaaaaababbbabbbbababaaababababbaabbbaaabbbabbba +babbabaababbaabbbaabaaaabbaaaaababaaabaabaabbaab +abbbbbbbabbbbabbaabbbaaaabbbbbaa +bbaaaabbbaaabbbbbbbbabbb +aaababaababaabbbababbabbabaabbbabaabbaaabbbbbaaa +bbbababbbaabbaaabbabaaaababbbaaabbabbaba +abbabbbbbbbbbaabaabbaabaababbbaa +baababbabaaaaaaaaabbbbaa +baaabbabaabbbbbbaaaabbabbbbaaabb +bababbaabaabbaaabaabbabbabababbb +bbbbbababbbabbaabaababab +aaaabbababbabbbabbbbbbbbaaabbaab +bbababbaaababbaabbbbbbbbaaaaaababaaaaaba +ababbababaabbabbaaabaaaa +bbabbbaaaaaabbabaaaaaaabbbabaababbbbbbaababbbaba +aaaaabaaababbbaabbbbabba +ababbbbaaabbbbbbbaaaabbbbbaaabbbbbbbbbaa +babbaaaaabbbabbbaabbbababaaaaabaaaabaababababbab +baabaaabbabababbbbbaabbabbbbbbabbbbbbbaa +bbabbabaaaaababbaabaabaaaabbabbabbaaaaaa +aabbbababaabbabbbabaaabaabbaaababbbbaabb +aabbbaabaabaabaaaaaababbbbbababa +abaaaaaaabababbbaaabbaabaaabaabb +abbbbabbaaaaabbbababbabbbabbbaaaabaabbbbabaabbbabbbaaaba +aabbbaaaaaabbbaaaaaaabbbbababaabbbaababaaaabbaaaababaabb +aaababaaababbaaaabbbabaaabbababb +baaabbbabaaaaaababbbabbbbbbbababbbaabaabbabbabbababbbbabbbabaaab +bbabbabaaabbababbaabbbabaabbabab +abaabbbabbbbabaabbbaabba +babaabbbababaababaabbbbbaababbba +abaabbbbabbbabaabbababbb +baaabaaaaaaabaaabbbbbaabaaaabbbb +bbaaabaaababbaabbbaaababaaaabbbbabbaaabaaaaaababbabaaaaa +babbabaaaabbababaabbbaaaabaabbbbbbbaabab +bbabaabaaababaababaababb +aabbaaaabaabbbaabaaababaabbbbbabbbabbabaaaabaabb +baabbbabbaabaabbabaabaabbaabbbbbabababaa +abaabbbaabbaabbaaaabbbbababaaabb +bbbbaaabbbbbbabaaaaabaaabbbabbab +ababbbbaabbbabaabababbbabbababbaaaabaaabaaabaaaabbaaababaaaabbaabbbbaaaa +bbaabbababababbaaabbabbb +babaaababbaaaabbaabbbbab +bbabbbaabaabbabbaabbaaaaaabbbaabaaabbbab +abaabbbbabaaaabbaabbababaaaababaabaabbbabbaababbbbbaaaba +abbbbaabbbaaababbbabbbaaaaaaabaabababaaababbaabb +aabbbabbaaabaaabaabbabba +ababbabbababbaababbbbabaabbbaaab +ababbbbaabaaaaabaabbaaab +babbbaababababbaaaabaaabbaabaaaabbaabaaabbaaabbaaabaabababbaaaba +bbbbbbbbbaabbbababbaabba +aabbababbaabaaaaababbbaa +aabbbbbbababaabaaabaaabbbbabbabaaaaaababaaabbbba +aabaabbaaabaabaabbbaabaaaaaabbbb +abaaaabbbbbbaaabaaaaabaa +baaabbbbbabbabaaababbbaa +baaababaababaaababbaaabbabaabbba +ababaababbabbbabababbababbaababb +baaaaabbbaaababbbabaaaabbabbbababaaababbaaaababbbbaaababbaabababaababaab +baabaaaabaaababbbbabbbabababbabababbabba +aabbbabbababbabbaabbaaaaaabbbbaa +aaaaaaabbbbbaaaabbbabbabbaabababbbaaaaba +aabbbbbbaaaabbbabbbabaaa +aaaabaaaabbbbbbbbbaabbaa +baaaabbbabbbbabbbbbababa +ababaabaaabbaaaaabaabaabbbbbaabb +babaabbbbabbababbbbbabaaaabbaaabbbbaababaabbaaabbbabaabb +baabbbbbbbabbbbabaabbbba +aaababaaababaababbaaababbbababbaabbbbbabbbbaabbabbbbbbab +baaababbbbaabbbbbbaabaaabbbaabbb +baabaabbaaaaabbabaaabbababbaabbb +bbabaaaabbbababbaabbbababaaabbabbbaabbabaababbabbaaaabab +baabaaaabaaabbabbabbabaabbabbbababbbbbababaabaababbbaaaababaabab +abaaabbabaaabaabbbaaaabababbbbaabaaaabba +aaaaaabaaabaaabbaaabbaaaaabbbaabaabbaaaaaaababaa +bbbbabaaaababbaabaaabbaa +ababababbaaaaaaaaaaaaabb +aabbaabaaaabbaababaaaabaabaabbabaaaaabaabbbabbba +aaaababababbababababbbaa +abaaaaaababbbaabaaababbaababbaabbabbabababbbabbabbabbaab +bbabaabaabbbabaabaaabaaababaabbbabaaaabababbaabaaabbabaa +baabaaaabababaaabbbababa +aaaababaabbabaababaaabab +baaaaaaaaabbbabababbabba +abaababbbabbbaaaaaaaabbbbaaabababaababaaabbbbabaabbbaaaaabbaaaababbaaabb +ababbabbaabaabbbababbabaaabaabab +aaaaaaabbbabaaaababaabbaabbababa +bbbabaabbbbbabaaaaaaaaabbbbaabaabbabaaabaabbaaab +ababbabbaabaaabaababababaaaabbbb +aaabaaabaabaabaaaabaaabaaabaabab +abaaabbbaabbbbbbaaaaabaa +bbababababaabbbbbbbbbbbbababaaabaaabbaba +babbabaababababbabbbbbbbbaabbabbaaabbaab +aaabbbbabbbbbbbababaababbabbaaaaaaababbb +bbaaababbbaaabbbababbabbbbbbbbbbaabbabba +babaaabaaabbbabbaaaabbabbaaabaab +babaaaaaaabaabbbabaaabab +baaabbbbababbbbbbabbbaabbabaaaab +abababbbababbaaabbaaabababababaaaabaaabb +babaabbbababaabaabaabbbb +baabbaaaaaabbbaaaabababaaabbbaabbbbaabbababbbbab +bbababaaabaaaaabbabbbaaaaaababbb +bababbaababababbbbbbaabb +babbbaaababbbaaababababababbaaabbbaabaab +aaaabbbabbaaabbbbaabbbbbbbaabaaabaaabaab +baaaabbbababbaaaaabbbabbbabbbabbbabbbbab +bbabbbabaaaaabbbbabaabbbabbabbaa +abbbbaababaababbbaaabababbbbaabababaaaaabbabbbaaaaaabbaaabbbbaab +ababbbbabbabbbaaaabbbaaababaabaabaababbaaaaabbbbaaaabbbbbabaaaab +bababababaaababaababbabbabaabbaaaaabaabb +bbaaaabbabbabbbabbaabaaaaaaaabbbaaaabbababbabbabbabbbabaabbbaaabaabaaaab +bbaaabbbbaaaabbbbabaaaaaabbbaabb +babaabbaaaabbbaaaaabaaababbbabbaabbbbbabaaabbababbaaaababbbaaaaa +ababbabbbaabbbaabaaaabaa +aabaaabaaaaaaaaabbbbbaaa +baabaaabbabaabbbababbabbbababbab +abaaabbaaaaaabbabbaababa +babbabaabaaaabbbbababbab +aaabbbaaaabbbabbababbaaababababbabbbaabbabaababb +aabaaabaaabbbabaabbaaabb +abaaaabbbaaabbbaababbbbabaababab +bbababaabbbbaaabaabbbabbabbbaababbabaaab +abababbabbabbabbaabbabaabbaabbaa +abaaabbbababbbabbbaababa +ababbbabababbabaaaaabbbaabbababa +baababbabaababaabbaaaaaa +bbbbbaabaaababababaabaaa +babbaabbaabbbaaaabbbabbaabbabaaabbabbabaaaaaaaaababbbbaaaabaabab +aabababaababaabababbbaaabbaabaaabaaaabab +bbabaabababababbbabbbaba +aaababbbaabaabaabbaaaabbbbabaaabbbaababb +baaaabbbbababaabbabababaaabbbbbbaaabaaaa +abbbbabbaabbbabbabababaa +aabbbaaabbbababbbbaaaabaabbbaabb +ababbbabaababababaaaabab +bbaaabbabbabbbaaabbbaaaa +bbaabbbbabaaabbaabababbb +abbbaababbaabaaaaabbaaaaaaaaabaa +baabbabbabaaaaabaaabaaaa +aaabababababbbbabbbbbabaabababaa +aaaaabbbaabaaabbbbbabaabaaaabbaa +aaaaabbbababbbabbababbba +ababbbabababbaabbbaaaaabbbbbbbaa +bbbaaaabaababaabbaababbaabababaa +baaaaaabbbbaaaababbabbaa +baabbabbbbababaaabbabaababbbabbaabaaaaababababbb +abaaaaabbbbaaaababbabbaa +abbabaabbaabbbaaaabbaabbaabaabaaaaababbabaabbabababaabaabbbbbbbbbaaaaabbababbbba +aaabaaabbbbabaabbaababaaabbbbbabbaaaaaaaaababaaaaaababbabaaabbaa +aaaaaaabbaabbaaababbbaababaabaaababbbbaa +bababababbbbbabbaabababbbaaabaaaaaaaaaaaaabbbaaa +babababaaaaabaaabbaaabaa +abbbbabbbababbaababbbaabbababbbb +bbabbbabaabaaabaabbabbbbabbaaaaabbbabbba +aabbaaaabaaabaaaabbbbabaaaaaaaba +baabbbbbbaaabaabababaabaababaaaaaabbaaaabbbbaabbabbabbaa +bbaaaabbbbaaabbabaaabaab +bbbbbababaabbaaabbbbbaba +bbabbababaabbabbaaaababbbbbbbabaaaaaabaa +aaabababaabaabbbabbbabbaaaababaabbbabaaabbabbbbbabaaabab +bbbabbaababbababaaaaaaba +bbbbbababbabbaabbbbaaaba +aabaabbbbbabaaaabbaaababababababbabaaaab +baaabbbabbbababbabababaa +bbaaababbabaaaaaabababbb +bbabbaababbbabbaaaababbb +bbabbbbaabababbababaaaab diff --git a/inputs/19_test b/inputs/19_test new file mode 100644 index 0000000..8c931b1 --- /dev/null +++ b/inputs/19_test @@ -0,0 +1,47 @@ +42: 9 14 | 10 1 +9: 14 27 | 1 26 +10: 23 14 | 28 1 +1: "a" +11: 42 31 +5: 1 14 | 15 1 +19: 14 1 | 14 14 +12: 24 14 | 19 1 +16: 15 1 | 14 14 +31: 14 17 | 1 13 +6: 14 14 | 1 14 +2: 1 24 | 14 4 +0: 8 11 +13: 14 3 | 1 12 +15: 1 | 14 +17: 14 2 | 1 7 +23: 25 1 | 22 14 +28: 16 1 +4: 1 1 +20: 14 14 | 1 15 +3: 5 14 | 16 1 +27: 1 6 | 14 18 +14: "b" +21: 14 1 | 1 14 +25: 1 1 | 1 14 +22: 14 14 +8: 42 +26: 14 22 | 1 20 +18: 15 15 +7: 14 5 | 1 21 +24: 14 1 + +abbbbbabbbaaaababbaabbbbabababbbabbbbbbabaaaa +bbabbbbaabaabba +babbbbaabbbbbabbbbbbaabaaabaaa +aaabbbbbbaaaabaababaabababbabaaabbababababaaa +bbbbbbbaaaabbbbaaabbabaaa +bbbababbbbaaaaaaaabbababaaababaabab +ababaaaaaabaaab +ababaaaaabbbaba +baabbaaaabbaaaababbaababb +abbbbabbbbaaaababbbbbbaaaababb +aaaaabbaabaaaaababaa +aaaabbaaaabbaaa +aaaabbaabbaaaaaaabbbabbbaaabbaabaaa +babaaabbbaaabaababbaabababaaab +aabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba