From cb202e0284b06dd31bd6c17b695efa2364b5e515 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Sat, 19 Dec 2020 16:19:27 +0100 Subject: [PATCH] Add 2020 day 19 --- haskellAoC/inputs/2020/19 | 613 ++++++++++++++++++++++++++++++++++ haskellAoC/src/Y2020/Day19.hs | 49 ++- 2 files changed, 659 insertions(+), 3 deletions(-) create mode 100644 haskellAoC/inputs/2020/19 diff --git a/haskellAoC/inputs/2020/19 b/haskellAoC/inputs/2020/19 new file mode 100644 index 0000000..1980186 --- /dev/null +++ b/haskellAoC/inputs/2020/19 @@ -0,0 +1,613 @@ +19: 33 53 | 123 7 +3: 33 82 | 123 45 +92: 47 123 | 91 33 +34: 123 60 | 33 63 +91: 123 9 | 33 7 +20: 33 46 | 123 79 +101: 33 27 | 123 56 +47: 52 33 | 84 123 +115: 116 33 | 7 123 +41: 57 33 | 127 123 +33: "a" +109: 123 89 | 33 33 +106: 33 72 | 123 6 +8: 42 +104: 92 123 | 41 33 +75: 123 22 | 33 100 +21: 76 123 | 28 33 +102: 95 33 | 81 123 +54: 33 44 | 123 2 +77: 123 13 | 33 116 +1: 33 26 | 123 34 +83: 123 90 | 33 66 +11: 42 31 +58: 9 33 | 63 123 +136: 33 74 | 123 109 +25: 59 123 | 52 33 +17: 123 91 | 33 136 +116: 89 89 +32: 116 33 | 53 123 +72: 9 123 | 111 33 +70: 33 9 +80: 33 20 | 123 1 +18: 111 33 | 74 123 +86: 33 122 | 123 55 +14: 33 108 | 123 37 +84: 33 33 | 123 123 +67: 6 123 | 18 33 +78: 123 58 | 33 96 +38: 111 123 | 52 33 +119: 125 33 | 77 123 +69: 33 32 | 123 64 +10: 110 123 | 3 33 +118: 69 33 | 107 123 +85: 123 62 | 33 17 +61: 33 117 | 123 93 +62: 70 123 | 117 33 +4: 123 52 | 33 7 +52: 123 33 +40: 84 123 | 60 33 +49: 123 47 | 33 65 +79: 13 33 | 84 123 +6: 7 33 | 116 123 +113: 33 133 | 123 115 +98: 116 89 +53: 123 123 +42: 33 35 | 123 21 +44: 33 15 | 123 55 +100: 123 67 | 33 121 +27: 88 33 | 9 123 +76: 33 23 | 123 85 +16: 33 24 | 123 73 +9: 123 33 | 33 123 +26: 109 123 | 59 33 +36: 7 33 | 52 123 +50: 123 88 | 33 63 +65: 59 33 | 84 123 +105: 9 123 | 7 33 +112: 74 33 | 60 123 +120: 111 123 | 84 33 +23: 106 33 | 126 123 +110: 104 123 | 102 33 +128: 33 12 | 123 5 +31: 123 114 | 33 10 +30: 57 123 | 98 33 +82: 33 51 | 123 128 +125: 7 123 | 9 33 +99: 123 120 | 33 93 +87: 52 123 | 59 33 +37: 33 101 | 123 16 +43: 123 7 | 33 88 +117: 123 63 | 33 7 +12: 33 88 | 123 53 +55: 33 111 +2: 123 132 | 33 38 +96: 33 116 | 123 7 +135: 33 109 | 123 111 +126: 112 123 | 36 33 +97: 111 33 | 60 123 +22: 33 113 | 123 48 +24: 74 33 | 84 123 +130: 91 33 | 103 123 +132: 33 109 | 123 53 +59: 33 89 | 123 123 +51: 123 40 | 33 50 +28: 54 123 | 68 33 +66: 33 111 | 123 52 +64: 13 33 | 9 123 +15: 33 13 | 123 111 +114: 14 123 | 75 33 +35: 123 131 | 33 39 +90: 60 123 | 52 33 +124: 33 32 | 123 71 +63: 123 123 | 33 123 +121: 33 97 | 123 19 +71: 116 123 | 53 33 +5: 33 53 | 123 63 +111: 33 33 | 123 33 +74: 33 123 | 33 33 +48: 94 123 | 105 33 +56: 111 33 | 84 123 +29: 30 33 | 130 123 +45: 99 123 | 119 33 +93: 52 33 | 52 123 +122: 33 9 | 123 7 +103: 13 33 | 63 123 +68: 61 33 | 49 123 +94: 33 88 | 123 129 +129: 89 33 | 33 123 +133: 123 59 | 33 129 +127: 33 74 | 123 59 +0: 8 11 +134: 78 123 | 83 33 +73: 111 33 | 116 123 +89: 33 | 123 +123: "b" +131: 80 123 | 134 33 +81: 123 43 | 33 56 +7: 123 33 | 123 123 +13: 123 33 | 89 123 +60: 33 33 +108: 124 123 | 86 33 +39: 123 29 | 33 118 +95: 123 87 | 33 135 +88: 33 123 +57: 123 60 | 33 9 +107: 123 4 | 33 25 +46: 123 60 | 33 7 + +aababbaabaabbaaaaabaaabb +aabbabababbabbbabaabbbaa +aaaaabbababbbabaaabaabaaaaaaabaabababababaaabaabbbbbaaaa +aaaaaababbaabbaaaabbaaab +aabbbaababaabaaaabbbbaba +bababaaaabaabaaabaababba +aaabbabaababbaabaababaabbababababaababbbabaabbababababbb +baaaabbabbaabbaabbbbaabb +aabaaaaaababbaababaabbbb +abaaabbababbabbbbaabbbaa +baababbbbbbbbbabbaaabaaa +aabbbaaabbbaaabababbaaabababbaabbaababaaabbbbbaa +aaababaabbaabbabbaaaaabb +abaaabbbabbabbbbbaabaaabbaaabaabaaaababbaaaaaaba +abbbabbbabbbaabbbbabbabbbabaababbabbbbba +babaaabbbaaabbabaabbbbaabaaababaaaaaabab +babbabaabbaabbbbbbaaabab +baabaabaaaabbbabbbbbbabb +bbabbabbaabaaaaaaabaaabb +bbaaaaabbbaaaaabaababbba +aabbbbaaabbababbaabbaaab +ababbbbababababaababaaba +abbaababaabaaaaabaaaaaba +abbbaababbbabbbaabbbabab +baaaabaababbbbabbaaabaaa +aabaabaabbaaaabbbbbbabbb +aabababbbaabbabaabbbaaab +abbabbbbbbabbaaaababaabbabbaababbabababbbbbaaaaaaababbbaabaabbabbabbbbaaaaababaabbbaabba +bbbaabababbbbbbbaabaabbbaaabaabbbbbbbbbb +aaabbaaaaaaaabaababaaabbbaaaaabb +bbbababbaabbaabbaaaabbaabbabbaba +aaababaababbbbabaababababbaabbaabbabbabbbaaaabababbabaaabbbbaaababbabaaa +bbbababaababbbbbbbababababbbaabbaabaabbabbbaabab +aabbbbaababbbbaabaaaaaaa +baabbabababababaabbbaaaabaaaabbbaaaaabab +aabbaabbbaaabbabaaabbbba +abbaaabbbaaaabaabababbbb +baabaaabaabbabaaaababaabbaaababb +abbabbbbbbbabbbaabaabaabbabaaaab +bbaabbbbbbbbbbabbababbbb +bbaaaabbababaabbaaabbbaaaabbaaaaaabaabaaabbabaab +aababbababaabaaababaaaab +baaababaabbaabaaabbaabbb +bbaabbaaaaaabbbaaaaababb +abbbbaabbbbababbbababaab +baaaaaabbbbabbababaabaaabbbabbbaaaaababb +aabbabaaabaaaababbabaaaa +aaaabbaabbababbaaababbba +aaaabaabaababbabbbbabbba +babaaabaabaababaaabaaaaabaabbbab +aababaaaaabbaaaaaaabbabb +aabbbabbabaaaaaaaabaaaab +babaaabbabaabaabbbaabbaabaabbaab +aaaaaabbbaabbabaaaaaaaba +aabbbbaaabbaabaaaabbabaabbbaaaaabbababbababaabbb +aabbaaaaabaabaaabbabababbbbabbbb +baabaaabbabbbbabaaaaabbbaababbaabbbabbababaaaabbbbabbaab +aababbabaabababaabaabbaa +aababbbbaaababbaabbbbbbaaababaaaabaabbbabbaabaaabbbbbaab +baabaaabbaaababaaabbaaaabaaabababbaabababaabbabb +baaabbbaaaababbbaabbaaab +bbaabbaaabbababbaaabbbbb +aabbababbaababaabaaaaaabaababbaaaaabaaabaabaaaab +aaaaaabbabbabbbbaaabaaaa +babbbbabbabbaaabababaaaa +abbaaaabbaabbbbbbbbbbbbabaabaaababbbbaababaaaaaabbaababa +bbbababaaaababaabbaababa +baabababbbaabbabbaaababaaabbbbabbaabbbab +abaabaabaaabbababaabbbab +baaaabaaabbbaabaaabbbbba +aababaaaaabbbbbbababbaabababaaaa +bbbabbabaabbbaaabbbabbbb +baabbbbbaaaabbabababbaaabaabaabbbaaabaabbaaababbbaaaaaaaabbaabbbabbabaaabbbbaaba +abaaaabaaaababbabbbbbbabbababbaa +bbabbbabbababaabbaababbaababaababaaabaaaabbabaab +aaababbaababbbbaabababaa +aabbaabbbbababbabbabbaaa +bbbabbbabaababbbbabbbbabbbabbaabbbbbabba +abaaaaaabaaabbabaaaabbab +bbaabaabbaaabbabbabbbbabbaabbbab +baaabbbaaaabbbababbabaaa +aabaaaaaababbbbaaaabbaaaaaabbabb +baaababababababbaabaabaabaaaaaabababaaaaababbabbbaaaabab +babbababbbbaaaaaaababaabaaaabaaababbaabababaabbabababbaa +abbbbaabaabbbaaabaabbbbb +babbaabbaaababaabbaaaabbbbaabbaaabaababbbaaaaabaaaaababb +baababaaaaababaaababbababaababaabbabaabaaabbbaba +abbaaabbbaaabbbbabbabbbbababbabaabbabbbababbbbbb +babbaabbbbbabababbaababb +baaabbaabababababbbabbbaaaabaaababaaaabb +bbaaabbaaaabaaabbbaaabaabbabaaabaabbabbaaababbbbbbabbabb +aaabbabababbbbaabbabbbbb +aabbababaaabbbaaabbbbabb +aababaabaaabbbaaaaabaabb +ababbbbbbaabbabaaabbabbb +baaaabaabbabbabbbbbabababbbababb +abbabbbabbbabbbabbbbaabb +bbbaaaabaababbbbbababbbb +aaabaaabababbbababababbabbbababaabbaaabaaaaaabab +bbaaaabaaabbaabaaabaabbbbabbabbbbaabbabaaababaaaaabbaabbbaabaaaabaaabbaabbabaaaa +abbbabbaabaabbbbbbabaaab +abbbabbbbabaaabaaaabbbbb +abaaabbabbbbbbaaabaaabbbbbaababbababbabb +ababbbbaaaabbaaaaabbabbb +bababaaaabbaaabbbbaaaaba +aaabbaaaabaaabbaababaaaa +babaaababbbaabbbbbaaaaba +aaababbabbabbbbabbbaababbbaaaaba +baaaabaabaaababaaaabababaaaaabbbabaaaaaaabababaaabbbabab +aaababbbabbbbbbabbbaaababaaaaaba +abbabbbbbbbabababbbabaabbabbabaabbaaababaabaaabbabbbabab +aaaaabaaaaaabbbababaaabaaabaabaabaaababb +bbabababaabbbaabbaabaaaaabbabbaa +bbbabababaababbbbbbabbabaabbaaab +baabaaaabbababbabbbaabab +bbababbabbbbbbbabaabababbbbaaaaabbbbaaaa +aaabbabaaaaaaaaabbaabaaa +babbababaaababaabbabbbba +baababaabbaabaabababbbaa +bbaabaabbaaabbaaabaaaabb +baaabbaabbbaaabaababaaab +bbbaaabaabaabababbaaaabbaaababbaabbbaabaaaaaabba +babbabaaaabbaaaabaabbbaa +babbaaabbbbaaababaaababaaabbbaaaaababaabaaaabaabbbbbaabbabaaaabbaaaaababbaaaaabb +aabbbaaabbabbabbbbbbaaba +bbabbbabbaaabbabaaabaabb +bbbababaaababbbbaabaabab +bbaabbbbbbbababbabbaaaaa +aaabababbabbbbbaabbabbaaaaaababa +aabaabaaaaaabbbbabbaababaaaaaabbaabbabba +bbbaaaaaaababaaaaaabbaaabbaaabbabbbbbaabbabaabaa +ababbbabbbbbbbaabbaaaaaa +aaaabaabaabbabbbaabbbabaababbabababbbabbababaabbbaaaabbb +aabbbbbbaababbbbbabbbabb +babbbbaaaabaabbaaaaaaabbbabbbaaabbbbaabb +abaaabbabbaabbbbaaaabaabbbbbabbb +bbabbbababbaaabbabbabaab +aaababaaaabbaabaaaaabbaaabbaababbbaaabab +bbaabbbbaabbbbbbaaababbbabbbbbbabbbbaabb +aababbabbaabaababbbbbbbabbbbbaaaaaabbaab +abbaaabbbbbabaabbabaabaa +aaabababbabababbbabbbaabbbaabbabbaababaaabbaaaaa +baaabbbbaabbbbbbbbbaabaabbaaaabbaaaaaabbbbbabbaa +aabaaaaaaaababababaaaabb +bbbbbbaaabbaaabbabbbabba +aaaabbbbaaaabbbbaaababba +baaabbabbbbbbbabbababbaa +aaabbbabbaabbaaabbabbbabbaabaaabaaabaaba +baaaabbbabaaaabaabbaaaaa +aabbabaaaaabbbaaabaaaabaababbbbaaabaaababbbbaaba +bbabaababbbabbababaabbab +aababbaabbaaaabbbbabbbba +bbababbaaabbbabbbbbabaaabaaaabbbabbbabbbaaaabaababbbbbaa +bbbbbbabbbabbbabaaabaabb +babababababbbbaabbaaaaabbbbbbaaa +baaabbbbbabababaaaaababa +bbababbbbbaababbbabaabaa +babaaabbabbbaabbbbabaabaaabbbaababbbaaabaabaabbbabaabbaa +abaaababaaabbbabababbababbbbaaaa +abaaaabaabaababaabaaaababbabababaaaaaaba +abbbaaaabbaabaababbbabab +abbababaaabbbbbbabbaaaaa +baabbaaaaababbbbbbaaabaa +baabbaaaaabbababaababbabbbbbbbbabbabbbabbbbbbababbabbbbbbbaaaabaaaaaaaab +bbbaabbbababbabaaabbbaaabbbabbbbbbabaaaa +aaaaaaaabbbbbbbaabbbbbaa +bababababbbaaaaabbbaaaab +bbabbabbbbaabbaaaabbabaabbbbbaab +bbbaabbbbaaaabbbbbaabbabbbabbbba +baabbabaababaabbaaabbaab +aabbaababaababbbababbbaaaaaaaabbbbbabababaabbbbaabbabbba +bbbaaababbabbbababababba +aaaabaaaaababbabbbbbabababababbb +babbbaabbbbaaaaabbabbbbb +abbbbaabbbbababbbabbaaabaabbabba +babbaabbaaababbbababbbabbabbaabbbabababbaababbbabbbbaaab +abaaabbbbbbaaaaabaabbaaabbaabaaaabababaa +baaaaaababbaababaaaabbbbbbabbbbb +bababaaababaababaaababbbbabbababbbaabbaaaaabbbbb +bbababbbbbaabbaaabaaaaaaababaaab +abaaababaababbababaaaabb +abaaaabababbbaabbbababbaaaabbbbaaababbba +aaaaaabbbababaaababaaaaa +bababaaaaabbababbbaaaabbabaabaabababaabaabbbaaab +bbbbababbbbaabaaabababbb +abaabababababaaaaabababbbabbaaba +abababbbaaaaaabbaababbabaabaababaabbaabbaaabaababbbbbbba +baaaaaabbbaabaabbbababbbbaaabaaa +ababaabbbbaaaababbbbbaab +aababbbbabbaaabbbbbaaaab +baaabbbaabaaabbaaaaaabab +bbbaabbbbabababbbbabaaaa +aaaaabbbabaaabbbababaaab +aaaabaabbaabbaaaaaaabbab +abbaaabbbbbabbabbabaabba +bbbbababaaabbaaaabbbbbab +abaabbbaaababbbbababababbaabababbbababba +baaaabbabbbbbbbaaabaabaabababaab +ababbbabababbababbbbabababbabbbbbbabaaaaabbbbbab +baabaaaabbbbbbababbbaaaabbabbbbb +bbaabaabababaabbbaaaaabb +abbababbbbbabababbbabbbaaaabbabaabbbaababaababaaabbbaaabbbabaaab +baababaabbbabbbabbaaabbabaabaaababaabbab +bbbababbabaaabbaaabaabaabbbaabaabaabaaababbababbbbbbaaaa +baabaaabaabababaabbbaabbbabbaabbbbaabababbabbababbaaaaaa +baabaababaabababbbababbbbbaabbaababaaabbaaaabbab +bababbabaabaabbaabbaaaabbabaaabbababbbabbaababaabaaaaabaaabbbbabbbbbabaa +babbaaabaababaaabaabaabb +ababbbbabbbaabaabaaababb +abbaaabbbbaabbaaaaaabbbababaaaaa +aabbaabaaaaabbaaaaabaaaa +babaabababbabbbabbbaaabb +bbababbbabbbabbbbbaabbabbbbabbbaabbbbbbaabbbbbaa +bbabababbbbabbabbbbabbaa +bbbbbbbaabbababbbabbbbba +baabaaaababbabaaaaaabbaaaaabbabb +abaababaabbbaabaaaabbbaaabaababb +baaaabbababbbbabbababbabababbaabbbabaabaabaababb +abbaaabbbaababaaaabaaabb +babbaaabbbababbaaabbbbab +abbaaabbaaababbbabbbbaba +baabbbabbaaaabbaaaaaabbaabbbbabbaaabaababbaaaaaababaaaaabbbbbaaa +baababbaabbaabbbbbabbbaabbbbaabbbbbbaaaabababbbbaaaababaaaababbbaabbbbbabbbabbaaaabbabaa +baabbaaaaaabbababababbabbaabbbab +ababaabbbbbaabbbbabababbbabbbaaabbababbabaaababbababaaab +bbabababbabbbaaabbabbbba +bbaaaaababbababbaaaaaaaaaaabbbba +aababaaabbbaaababbaabbabbaaababaabaabaaaaabaaaab +babbabaabababbababbbabab +aababbaabaabaaaaaabbaaaaabbbbaabbabbbabb +bbabaababaaabbabbbbbbabb +babaaabbababbababbbaabaaabaabbaa +abbbbbbaaaaaaaaababaaaaa +aabababaaabaaaaabaabbbaa +abbaabaabaabbababbbaaabaaabbbbaabbbaaaaaaabaabaaabbbbababbabaaab +abbabbabbbabaabaababaaaa +babaababbababbabbbbbaaaa +aabaabbaaaaaabaabaabbaaabbaabbbbbabbababaaabbbbaaaaaaabaaabbbababbbbbaaa +baabaababbababbbbbbbbabaaabaaaaaaaabbbbbaaabababbbabbbbbbabbabaaabbbbaba +abbbaabbabbaaaabbabaabaa +aaaabbbbaabababbabbbaabaabbababaabababaaabbbbbababaababb +baabaaaaabaabbbabbbabbaa +abbbbaabbbbabbbaabbabbabaaaaabbbababaaab +aaabababbbababbbbbbbbbbb +aabaaaaababbbaababaabbab +baaabbbaabbbaabaaabaaaaaabbabababbbaaaabbaabbbaa +babbaabbababbaabbbbbaaba +abbbbaababbbabbbaabbbabbabbbbbbbbaabbbab +aaaabbaaaaaababaabaabbababababaa +aabbababbbbabbabbabbbabb +bababbabbbbbababaaaababa +aaaaabaaaabababbabaabbbaabbaababaabaabbabbbabbaaaabaaaba +aabbbabbabaaaababaababba +aaaabbaaabbbbaabaaaababb +bbababbbbabbababababaabbbaabaaaaaaaaabba +aaabbaaaaababbbbbababbabbababbababaabbbaaaaabbab +bbabbbabababbbabbaabbbba +ababbbbaabbabbbbabbbbabb +baaaabbbabaaaaaaabababaa +bbababbabababbabbbabaabb +aabbaabbabbababaabbaaaba +abbbaaaaaaabbbbaababbabb +bbbbbbaabbbaaaaabbabbbbb +aabbabaaabbbaababbaababa +abbbaabaabbaabaaabbbabba +bbbabbabaabbbbaaabbbbbabbabbabbabbaaabab +aababbaaaaaabbbabbbbbbbb +abbabbabababbaabbabbbbbb +baaaabbbbaaaaababbbbaaaaaababbba +bbbbbbababbababaaabbaaab +aabbaaaabababaaaaaababbaabbbbbab +aabababaabbaababababbaaaabbaababbbaaaabbbaabbbba +bbabababbabbabaaaabbbaabaabbbaababaababb +aaaaabbbbbbbbbaaabbbaaab +abbbbaabbaaabbaaabababaa +babbbbaabbaaaaabbbaaaaba +aabbaabababbbaaaaababaaaaababbabbaaabaab +baaaabbaaaaabaaaaaabaaba +bbaaaabbaabbababababaaaa +aaaabbaabaababbbaabbbbba +babaaabaababbaabbababbbb +abbbaaaaaababaabbabbabaaaaaabaabaaabaababaaaaabb +baabaaaabbaaabbaababababbbbaabaabbaaaaaa +bbbbbbababbbaababaabbabb +aababaababaaaababbbabbaa +ababbababbababbbbbaaaabbbaababbabaabbbaa +babbbbaababbaaabbbaaaabbaabbbaaabaaabbbabbaababb +bbbbaabbaaabbbbbaaaaaaabbabaaaab +abbbabbbbaabaabaabbbabaa +ababbaaaaabbaababbaabbbbaabbabbaababaaba +aababbabaaaabaababaabbaa +abbababbabbabbbaaabbbbab +babbbbabbaaaababbababbaa +aaabbbbaabbbbaaaabbabbaabbabbbbaaaabaabb +ababbaaaaabbbabbbbbabbbb +abaaaababbbbbbbabababbabaaabbbabbbbaabbbbbaabbba +ababbaababbaaabbbbbabbaa +baabaabaabaaabbaaaaaababaabaabababbbabbbbbabbbabababbbbabaaaabba +baabbaaabaaabbaaababaaaa +bbababbaaaaaabaabbbabbaa +babbaaabbabaaabbbbabaaab +aaaaaaaaabbbaabbabaaaaaaababbaaabbabaaab +ababbbbbbababbbaaabaaabb +baaabbaaaaabbaaaabbabaab +aaaaabbbbabaababaababaabaababaaaaaabbbba +abaaababaabaaaaaabbbbbbabbbbaabb +abaaabababbababbaababbabbaabbbaa +aabbbaabbababababaababba +abbbaababbbababbabaabbbbabaabbabbabbaaaabbabbbababbbbbbaaabbbabbbaaaabbb +abbabbbabaaabababbaababb +aaabababaabaabbabbaababa +babaababbbbaabaaaaababbbbababbba +babababbababbbbababbaaaa +aaaabbbbabbbbbbabbbbabbb +abbbaabaaaaaabbbbabbabbb +baaabbaaabaaababaabbbabbbaaabbbaaaaaabbb +bbbabaaaaaabbaaabbaaabaa +abbbaababaabaababaabaaaabbaaabbb +babaabababbbaabbbbbababbabbaaabbbbababababbabaaabababbaabbaabaaabbbbbabb +bbbbbbbabaabaaabbababbbb +aaababbbbaabbababbabbbaa +aaabbbabbaaaabaaaaaaabab +babaaabaaababbbbbaaaaabb +abbaaaababbaabaabaabbbbb +aaababbabbaaaabbbaababba +aaababbaabaaaababbaaabab +aaaaaaaabbabbabbbbbaabba +aaabaabbbbabaaababaaaabbbbbbbabbbabaaaaabaabbaaaabaaaabbaaabbbaabbaaabbb +aaaabaaabaabbabaabbababaabaabbbbbbbabbaa +abaabaaaabbbaaaaabbaabbb +aabbbbbbbbbbbbbaaabbaababababaaaababaaab +aaababaabbbaabaabaaabababbbbbbababaabbabbbbbbaaa +aabbababaaaaaabbbabaaabbbabaaabababbbbba +abababbabbbaabbaabbaabbaabaaabbaaabbbaab +babbabaaabaaabbaaabbbaaaababbbababbbbabbabbbbaba +aaababaabbbbababbabbbaabbbababbabbabbbba +aaababbbbaaabbaaaaaababa +aaaabbbbaaabbabababbabaabbaaabaa +bbabaababbaabaabbaabbabaabbbbbbababbbbbababbabba +ababbbabbababbabbabbbbba +abbaaaabaabbbbbbbbabaaaa +baabbaaaaaaaabaabbaababa +bbbabaaaaabababaabbbabbbbaaababababbabaababaaaaababbabba +bbbabbbababaabababbbbabb +aaabbbabaabaabaabbbbbbba +aaaaabaaababbaaabbbaaaab +bbaaabbaaaaabbbaaaaaaaab +baaabbaaabbabbabbaaaaaaa +aaaabbbbbbbababbaababbba +aaaaabaaaababbaaaabbbabbbbabbaab +aabbababaababbbbbaabaaabbaabbbbb +aabbaaaaabbaabababaaaaaaaaabbbaabbbbbabb +abaabbbaababbaaabbbbbbaaaaaaabaabbabbaaa +aaaabbaabaaaabbbabaabaabaaabbbabababaaaabbbbabbabbbbabaa +baaaabbbbaaabbbaabababaa +bbbbababbbbabbabbaaaabbaabbbaaaababbbbbbbbababaabaaaabab +baaabbbbabaaabbbaaababaaabbabbbaaaaaabba +bbabaabaaabbabaabbabbaaa +abaaabbaabbaabaababbbbaaaabaabab +abaaabbaaaabbbaabababbbb +bbabbbabbaabbabaaaabababbbaabbbaaabbbbba +babbbaaaabbabababaaabaaa +bbbbbbbaaaaaabbbbbbbbaaa +aabbaaaabaaaabaabbbaaaaaaabaaaab +baababaabaaabbabbababaaaababbabaabbbbaba +aabbaaaaabbaabaabaabbbaa +abbbaabaababbbabaabbaababababbba +abbbbbbabaaabbababbbbaabbbabbaabbbaaabaa +aaabbaaaaabbbabbbabaabba +aaababbbbaabbaaabaaaabbaaabaabab +baababbbababbbabbaabbbab +abbbbbbaaaaaaabbaabaaaaaabaaaabb +aabaabbaaabbaababbbababbaaabaaab +aabababababbbbabaabaabaabaabbaaaabababbaaabbabbbbbaaabaa +baaabbbaaaaaaaaabbabaaaa +baaaabaaabaaabbaabbabbaa +aabbaaaaabbaaabbbabbbbba +bbbabbbaaaaaabbbbbbbbaaa +aababbaaabaaaaaaaaaabbbababbaaaa +ababbbbabbaabbabbbabbbbb +babbbaabababababbaabbabb +aabbbbaabbbabbbaaaabaabb +babaaabaaabaaaaabbaaabab +aabbabbabbbbaababbabbbbbbbbbababaaabbaab +bbbababbaababaababababbb +bbaabbbbbbbbbbbaaabbbbaaabaabbbaaaabaababbaabaaa +baaabbbaabbaaabbbabbbbba +ababaabbabaaababbbaaaaababbaaabbbaaaabaabaaaaaaa +bbabababbbbaaaaaaabbaaaabaaababbbaabbbab +ababaabbabaabbbababbbbbb +baabaaaabbaabbabbaaabbaaaaaabbbabbaabaaa +babaaabbbaaabbbbbaaaabbbbabbbbbb +abaababbbbaabbbaaabaabab +bbaaabbaaaabababaaaaaaab +abaabababaaaabbbbabaaaaa +bbababbbabbbbbbaaaaaaabbbababaaabbbbbaba +abbbbbbabbaaaaabaabbbaabaaabaaaa +abbaabaabbbabababbbbabaa +bbabbbabaaaaabbbbaaabaaa +ababbbbaaaabbbababbbaaaabbaabbba +babbbaabbaaaaaababbbabab +baabababaabababbbbabababbabaababbbabbaababbbbaaa +bbbaabaabbbbbaabbbabbaabababbabaaabbbbaaaabbbbabbaabbaaaaababbbababaaabb +aabbaabaabbbbaabbbaaabaa +baaaabaaaabababbbbbabbbabbbabbaa +aaaabbbaabbababaaabaaaba +babbbbabaabbabaabaaabaaa +baaababbbbabbabbabaaaaabbaababbaaabaaaaaaabbaaaa +bbababbbbbbaaaaabbbaabbbbbbbababbababaab +aababaabababbaaabbbabaaabbabaabaabaaababbabaabbabbababaa +aaababbbbbababbaaaabababababbabaaabaaaab +bbaaaabbabbaabababbbabbbaababbabbabbbaba +bbbabaababaaabbbbabaababbabbaaababbbbaba +abbbaababbbabaababbbbbaa +ababbbabbaabaaabaaabababaababbba +bbabbbabbabaabbbabaaabaaaaaaaaab +bbaabbaaaaabbababbaaaaabaabbbbaaabaaabaa +aababaaaababbbabbbbabbaa +aabbbaaaaabaabaabbaababb +abaabababababaaaabbabbbbbabbbbbb +bbaaaaabbabaaabbaaabbabaabaaaabbababbabb +ababaabbaabbbabbbbbbbaaa +abbabbbbabbabbbbabbbabab +bbabbabbabbabbbababbabaaabbabbbbaaabaabb +ababbababbbaaaaabbaabbaaabaabababaabababbaaaabaabbbabbaa +bbabababbbbaabbbbbabbbba +abbaabbaabbbbbabbabbababbbbabbbababbbaaaabbbbabbaaabbaabbbbbbaba +aaababbabbbaabbbaaaabbab +aabbaaaaababbabaabbbabbbaaabbbababbaaaba +baaabbbabbbabbababbbaaab +aabbabaabbbaaaaababbbbaaabbababbbbabbaaa +bababaaaaababbaabbaababb +aabbabaababbbaaababbaaaa +bbbabaababaaaabababbbaba +ababbbbbabbbaaaabbbabbbb +babaabaabaabbbbaaaabaabbbaaababaababbaaaaaababaaaaabababaaabaaaa +bbbbabababaabaaaaabbbaaabbaaaaabbabbabbabaaaaaaa +abbaabaaabaabaabbbaaabbb +ababbabaaaabbbabbabaabaa +bbbababbaaaaabaabaaaabaabbbbabaaaabbabba +bbabaabaaabbaabababbabbb +baababababbbaabbbbbbaaabbabbaaba +aababababaaabbaabbbabbbabbbbabba +aaababaabaabaabababbbbabbababababbabaabb +abbaaabbabbbaaaabbbaabaaaababbaabaaaaabb +aabbaabbaabaaaaaabababbb +ababbbbbbbaabbaabbabaaab +bbaaaabbbbabababbaabbaab +aabababbaaabbbabbbabaaaa +abaabaaaabbabbbaaaaabbbababbbbba +baaababaaabbabaaabababba +ababaaaabaaabbababaabbaaabbbbbbabbababbaaaaabbbaaaaaaaabaabbbaaabaabbbba +aababaabbaaabbbabbaaaaba +baababaaabbbaaaaabbbabab +ababbbabaaaabaaaaabaabbabbbababaaaaababbbaaababbabaabbbb +aabbbabbaaababaaabbbbaaa +aaaaaabbaaababbabbbbbaaa +aabbaaaabaaaaaabbbaabbba +abaabbbabbbaabbbbbabbaab +bbabababbaabbaaaabaabbbb +ababaabbaaaaaaaaababaabbabbbaabbbababbbbbbabaaaa +aaabababaaaabbbaaabbbbaaababbbbabbaabababaaaaabb +aaabbbabaaaaaabbbaabbbbb +baaabbbababbabaaaabbbbba +baaabbbabbabbabbbbbabaabababababbabbbbbaabbaaaba +aaaabaaaaababbababbabaab +baaaaaabbbbabaaabaababaaabbabaabaaabaabb +bbabbbababbbaaaabbbbbabb +aaababaabaaaaaababbbabaa +bababaaaaabababbbaabbbaa +aababaaababaaabbaabbbbab +abaababaaaaabbbbabbbbbaa +babaababaababbababbbbaaa +ababbbabbaaaabaababbbbabbaaaabbababaabaabbbbaaabbbbbabba +aabbaabaababaabbaaababaaaaaaaabbaaaaabbbabbabaab diff --git a/haskellAoC/src/Y2020/Day19.hs b/haskellAoC/src/Y2020/Day19.hs index 920bb1a..137030f 100644 --- a/haskellAoC/src/Y2020/Day19.hs +++ b/haskellAoC/src/Y2020/Day19.hs @@ -1,6 +1,49 @@ module Y2020.Day19 (y20day19) where +import qualified Data.IntMap as M +import Data.List.Split + +data Rule = AndRule Rule Rule | + OrRule Rule Rule | + RefRule Int | + CharRule Char deriving (Show) + +parseRule :: String -> (Int, Rule) +parseRule input = (ruleId, rule) + where rule = parseFn $ parts !! 1 + ruleId = read $ parts !! 0 + parts = splitOn ": " input + parseFn ['"', c, '"'] = CharRule c + parseFn str + | '|' `elem` str = OrRule (parseFn $ pipeSplit !! 0) (parseFn $ pipeSplit !! 1) + | ' ' `elem` str = AndRule (parseFn $ spaceSplit !! 0) (parseFn $ spaceSplit !! 1) + | otherwise = RefRule (read str) + where spaceSplit = words str + pipeSplit = splitOn " | " str + +matchRule :: M.IntMap Rule -> Int -> String -> Bool +matchRule ruleset ruleId input = "" `elem` (fn rule0 input) + where rule0 = ruleset M.! ruleId + fn :: Rule -> String -> [String] + fn _ "" = [] + fn rule str@(h:t) = + case rule of + CharRule c -> if h == c + then [t] + else [] + RefRule r -> fn (ruleset M.! r) str + OrRule r1 r2 -> (fn r1 str) ++ (fn r2 str) + AndRule r1 r2 -> [p2 | p1 <- fn r1 str, p2 <- fn r2 p1] + + y20day19 :: [String] -> (String, String) -y20day19 input = (part1, part2) - where part1 = "WIP" - part2 = "WIP" +y20day19 input = (part1, part2) + where part1 = show $ length $ filter (matchRule rules 0) $ entries + part2 = show $ length $ filter (matchRule rulesP2 0) $ entries + input' = splitOn [""] input + rules = M.fromList $ map parseRule $ input' !! 0 + entries = input' !! 1 + rulesP2 = M.insert 8 (OrRule (RefRule 42) (AndRule (RefRule 42) (RefRule 8))) $ + M.insert 11 (OrRule (AndRule (RefRule 42) (RefRule 31)) + (AndRule (RefRule 42) (AndRule (RefRule 11) (RefRule 31)))) $ + rules