diff options
Diffstat (limited to 'day19')
-rw-r--r-- | day19/data.js | 609 | ||||
-rw-r--r-- | day19/day19-1.js | 28 | ||||
-rw-r--r-- | day19/day19-2.js | 42 |
3 files changed, 679 insertions, 0 deletions
diff --git a/day19/data.js b/day19/data.js new file mode 100644 index 0000000..edc8184 --- /dev/null +++ b/day19/data.js @@ -0,0 +1,609 @@ +const data = ` +3: 7 45 | 10 39 +120: 109 45 | 16 39 +84: 96 39 | 104 45 +6: 120 39 | 113 45 +111: 45 93 | 39 45 +13: 17 45 | 96 39 +74: 122 45 | 17 39 +94: 66 45 | 119 39 +127: 39 84 | 45 132 +129: 45 128 | 39 35 +112: 39 35 | 45 58 +24: 45 76 | 39 112 +43: 39 17 | 45 96 +2: 45 5 | 39 77 +71: 100 45 +11: 42 31 +51: 77 45 +4: 124 39 | 85 45 +45: "a" +78: 111 39 | 128 45 +8: 42 +104: 45 39 | 39 93 +29: 122 39 | 66 45 +42: 63 45 | 20 39 +41: 73 45 | 19 39 +110: 39 98 | 45 114 +55: 45 104 | 39 122 +0: 8 11 +53: 39 34 | 45 89 +39: "b" +61: 77 45 | 104 39 +121: 45 65 | 39 1 +105: 45 44 | 39 99 +113: 9 39 | 103 45 +117: 96 93 +125: 39 108 | 45 43 +69: 45 39 +56: 50 45 | 12 39 +73: 39 35 | 45 100 +87: 39 100 | 45 111 +10: 45 13 | 39 73 +19: 39 69 | 45 58 +100: 39 45 +66: 93 93 +46: 45 82 | 39 74 +76: 66 45 | 111 39 +103: 45 52 | 39 115 +77: 45 39 | 45 45 +52: 82 39 | 112 45 +15: 45 47 | 39 132 +68: 39 77 | 45 17 +1: 45 47 | 39 61 +65: 37 45 | 51 39 +98: 45 2 | 39 80 +35: 39 45 | 45 45 +93: 39 | 45 +126: 111 39 | 77 45 +32: 45 36 | 39 37 +37: 45 69 | 39 119 +90: 39 17 | 45 69 +21: 39 66 | 45 58 +22: 39 56 | 45 64 +7: 123 39 | 48 45 +60: 45 102 | 39 26 +107: 45 29 | 39 71 +58: 39 45 | 39 39 +70: 128 39 | 111 45 +81: 27 45 | 129 39 +67: 5 39 | 100 45 +96: 45 45 | 39 39 +116: 39 87 | 45 55 +106: 39 51 | 45 92 +14: 45 128 | 39 58 +48: 39 104 | 45 5 +72: 45 35 | 39 111 +130: 118 45 | 28 39 +115: 45 91 | 39 87 +31: 39 6 | 45 22 +30: 79 45 | 57 39 +9: 125 39 | 49 45 +122: 39 39 | 45 93 +23: 101 45 | 78 39 +47: 39 100 | 45 58 +28: 45 111 | 39 122 +101: 45 77 | 39 66 +33: 39 5 | 45 111 +95: 39 5 +27: 58 45 | 17 39 +16: 15 39 | 116 45 +80: 45 119 | 39 66 +92: 45 111 | 39 58 +57: 39 73 | 45 86 +123: 45 58 | 39 77 +5: 39 39 +128: 45 45 +124: 101 39 | 126 45 +108: 45 122 | 39 119 +119: 45 39 | 39 39 +50: 81 45 | 106 39 +99: 130 45 | 46 39 +132: 17 45 | 119 39 +49: 70 45 | 117 39 +63: 131 39 | 83 45 +85: 39 33 | 45 97 +18: 45 60 | 39 25 +83: 39 54 | 45 4 +38: 62 45 | 21 39 +64: 39 30 | 45 121 +118: 45 17 +91: 39 17 | 45 100 +82: 39 100 | 45 119 +86: 119 39 | 111 45 +89: 39 119 | 45 77 +44: 39 127 | 45 107 +88: 45 95 | 39 89 +17: 39 45 | 45 39 +131: 39 3 | 45 110 +12: 39 24 | 45 23 +26: 39 108 | 45 90 +36: 58 45 | 100 39 +97: 45 111 +25: 39 88 | 45 32 +62: 96 39 | 111 45 +59: 39 119 | 45 96 +34: 45 35 | 39 100 +79: 68 39 | 94 45 +40: 39 72 | 45 14 +20: 39 105 | 45 18 +75: 111 45 | 69 39 +114: 67 45 | 59 39 +54: 38 39 | 53 45 +102: 39 75 | 45 80 +109: 39 40 | 45 41 + +aaaabbaabbaaabaaabbaaaaa +aaababaabaaaabaaabababbabbbbaabbabbbbaababbaaabaababababababbabbabbaaabb +bbbbbbbaabbaabaaaaabbaababbbaaabbababbabaababbaa +bbbbbbabbabaababbababababbbabbabbbabaabaabbaaaba +abbbbbaabaabbaabbabaaaba +aaaabbaaabbbbbabaaabaabaaaaaaaab +bbabbababaababaabababaaaaabbbbbabbbbabbbabbbaabbbbabbbbb +aaabaaaaaaaabbaaabaaabbb +abbabaaabbaaabbabbbabbba +bababbaaaaaabbababbabaaa +aaaaabaaaababbbabbaabaaa +babaabbaaababbbabbaaaaaaaabbbabbbabbbaaabbabaabbaababbaabaabbbbb +baaaabbbbaaabaababaaaaaabbabaaaabbbaabbabbabaabbabbbbbabbaabbbabaaababba +aaaaabbbaabbbbbbbbabaaaababaaaab +abaabaaabaabbbabaaabbbaaabaabbbabbaaaaaabaaabababbaaabbabbbbabaa +abbbbbbabbaabbababaabaabbabaaabaabbbaaaa +babbbaaabaaaababababbbba +babbbabbbaaaababaaabaababbaababbababbaabaabaaababaabbbaaaabbababaaabaabbaababbaabbabbaab +bbaabaabaabababbbaabaabb +baaaaabbabbbabbabbbababbbabababb +baaabbbbaababbabbababababbbbbaabbabbabba +aaaaabbbaabaaabbbbbbabbbbbaaaaaaabbaaaab +bbaababababbbbbaabaaabbb +abaabbababaabaaabaababab +abbabbabababbababaababaababbababbbababaaabbbbbbaaaababaa +bbaaaabababbbbaabaaaaaabbabbabbbbabbabbbbaabbaab +aabaaabbbabaabbabbabbbbb +baaabbabaabbabbbbaaababb +ababaababbaabbbbbbbaaabaaaabbbbb +aaaaabbaaaababbbabaaabab +abbbaaabbaaabbbaababbabbbbbababbbbbbabba +aaaabaaabbbbbbabbaaabaaababbbabb +bbaabbabbababaabaaaabbaaaaaababbabbbaabaaabbaabaabaaaabaaaabbbbbbaabbabb +bbaabbaabbabaaabababbbaaaababbababbbabbbbaaaabbabaabbbaabaabbabbaabbabba +aaabbbbabbbbbbaabaabbbbb +ababbbaaabaaaaaaabaaaaab +aabaaabbbaaabbabbbbbbabababaaabbbabbabbaaaabbbbb +abababbaaaabaaaaabbaaaab +bbbaabaaaabbbbabbbaaaabababbbaaaaaaaabbbbabbbbbaabaaabbaabbababbaaaaababbbababbbaabaabba +bbbbbbabaabaaababaaabbabbbaabbbbababbaaaaaabbaaabbabaabb +aaaaaabaaaaabababaaababa +abaaabaabbaaaaabaaabbbabaabbbaabbaababbbbbbbaaab +aabbbbbabbbbbabbabbbbbab +bbabaabaaababbabbaababab +aabbaaababaaaaaabbabbabababbabbb +bbabbabbaaaaabbaabbbaaaa +aabababaaaabbaabbbbbbabb +aababbabaaabbaababaaaaba +aabbaaababbbaabaaabaabbb +bbbbaaaaabaababbabbaabaa +abaabbabbbbbabbababbbabb +baaabbbabaaabaaaabaaaaab +aaababbbaabbabaababbaabaabaabababaabbabbababbaaaaaaaababbaabbaba +aaaaaabbaababbbabbababbb +aabaabaaaaaaaabbbbbaababaabbabab +abbbbbbbaabbbababaaaaabbbababbba +babbbbaaabbbbabbaabbbbaa +baaabbabbbaabaabaabbabab +aaaabbabaabababbbbabbaab +babaabbbbbbbaabaababaabaabaaaaba +babbbaabbbababbabaabbbbb +bbaabababaaabbbbaabbbabbbbbaabbbbbbbbaba +bbbbabbbbaaaababbbabbbba +aabaaabbabbbaaababbaabab +abaababbbbbaabbaaaaabbaabbbaabaababaaabb +bbaabbbbaaabaaaaabaaaaba +aaaabaabbbaaababaababaaa +abaabaaaaabbaabbaababaab +bbaaabaabbabbbaaabaaabba +aabbbbbbabaabbabbbaababb +bbbbaaaaabbbbabaababbbab +babbbaaaaaaaaabbbabbaaab +aabbbabbaaaabbabbaabbaaa +abbbaabaaabaaabbababbaba +baaabbbaabbbbabbbabaabbbbbbbaabaabbabbbb +babbbbabbbaabbaaabaabaaabaaaababaababaab +abbbaabbbabbbabaababbaba +babbbbabbbbbabaabababbba +aaababbbababaaaaaababaaa +baaaabaababaabaaabaababbbbaaaaaabbbbbbaaaabaabba +bbababbaaababababababbbabbbbbbabbbbbaaaabaaaaabaaaabaabaababaaba +abbbbabaabaabbabbbbaaababaaabaaaabbbaabb +bababbbbbabbbababbbbbbba +baaaaaaabbaabababbaababb +bbabbaaabbabbbbaabbaaaab +bbaabbabbbbbbabbaaaaaaba +abbbbaaaabbbaaabbabbabbb +bbbabbababbbbaaababaaaab +aabbbbbbababbbbbaabbbaaa +babaabbaabaababbbbaababb +ababaaaabbaababaaabbbbab +bbbabbaabaaaabbbaabbabab +aabaaabbaaaabbabbababaababaaabbbabababab +baaabaaaabbbbaaaaabbabbbbaaaabba +bbbaabbaabbabbbabbabbbba +babaababbaaabbabbbbaabbb +babbbaabbbabbababbbbaabb +babbbabababbbbbabbaaaaab +baaabaaabaaaabaabbabaabaababaabbaaababbbabbabbabbabaaaaaabbaaaabbbaabaaa +bbabbaabbbabbabaaaababababbabbbaaaababaaaabbbbaaababaabb +baababaabbbbbbabababbaab +aaabbaababaabbabaaaaabab +aaabbbaabbbbbabbaaaaabaabbaaaabb +abbbbabaaaaababbaaabbaaa +abbbbbbaabbbbbaabaaabbbbaababaaa +baabbaabbbbabbabbabbabaa +ababbbaaaabbaaabbaabbbba +babbbbbaabbbababbbbabababbaababbababababababbbba +aabbbbbbbbabaaaababababb +aababbbabbbbabbbbbaabbba +aababbabbbbababbbabbaaab +abbabbaabaaaaaabbaabaaab +bababaaabbabababaabbabaaabbabbbbbaabaaaa +bababababbaabbaabababbba +aaaabbababbbaaaaabbaaabaababbabb +aaaabbbbaaaaaabbbaabbbbb +aaabbbbabbbaaabaaabaabba +babaababbbbbabaaabaaaaba +bbbaaabaabbaabbaabbbbbab +aaaabbababbbbaaaabbbbabababbbbbbababbaaabaabaaaa +aaabbaabbabbbbababaaaaba +abbabbaabbabbbaaaaaaaaba +abaabbaaaaaaabaaababaababaabbaaa +babbbaabbbbaaabbaaaaaaab +aaaabbbbaaaabbbbbaabaaba +ababbbaaaaaabaaaaabaabaa +abababaaaabbbbbbbaaaaaba +babbbaabaaaabaababaaaaba +bbaaabaaaaabbaababaaaaab +babbbaaabbbaaabaaababbbabbbbabbbbabaaabbabababab +bbbaaabaababbabbaabaabbb +bababaaaaabbbabaababbaba +baabababbbbaabbbabaabbbbbabbbaababbabbbaabbaabbbbbbbabbabbbbaaabbababbba +abbbabbabaaabaabbaaaabaaabbabaabbaabaabb +bbbabbbbbaaaaabbabbbabaa +bbaaabbbbbbbabaaabababab +bbababbabbbabbabbbaaaaab +aababbbabbbbabbbbbbbabab +bbbbabbabbbbbabbaabbaaba +aabbbbbaaabbabaaaaaabbaaababbbaaabbbaabbbaabbbbabbaababb +aabbabbbaabbbbabbbbaabbbabaabaabbaaaaaaaaaaababbabbaaaabaabbaabb +aabaaaaaaabaabbabababbbabaababbb +bbbbbbbbbabbababbababaabbaabababababbbbbaaababaa +aaabaaabbaaaabababbabbaaabbababaababbaab +bababaaaabbabbaabbbabaab +ababbabbbbabaabaabaababa +aabbbabbaabaaabbabbaaaab +bbaaabaaaabbaabbbbbabaaa +aabababbbaaabbabbbaabaabaaaaaaaaaaaabaabbaabaaabaaabaaba +aabaaabaaaaababbabaaabab +bbabbababbaabaabbaabaaba +aaababababababbababababb +aaaaabbbaaaabbabaabbabab +babaababbbbbaabababababb +babbbbaabbaabbbabaabaabb +aaaabbaaababbbaabbabbbba +bbbbaabbbababbbbaaabaaabbbbbaaababaaabbababaabbbbaabaabbbabbaaab +abbbbbaabaaabbbbabababaabbabaaaaababbaba +bbbbabbabbabaabaabbbabab +baaaababbbbbabbabaabaaab +aabbbbbabaaaabbbbbabbaab +bbabbabbaaaabbbbbbbabbbbabababab +aaaababbaabababbbbaabbbbbaaaaaaaabaaaaba +aaabaaaababaabbababbbbaabbababaa +baaabbabbaababbaabbbbaab +babbbbaaababaabaabbababb +baabbabaabaaaabaaaabbaaabaabaaaaaaababbaabbaabaaaabbbaaaaaaababbaaaabaabaaaabbaaabbabbbaaabbaaaa +aaaaaabbbababbbbaaaaabab +abbbabbabbaaabbbababbbbbbbbbaaabbaabbbba +aaababaabbbbabaaaabababa +babbabababaaaaaababbbbaabbabbabbbbabbbbb +bbabaaababaabaabaaaababa +aabbaabbbbbbabbababbababbabbaabbabaaaabbbaaabbaa +baaabaaaaaaaabbababbbabababbbabb +aabbbabbabbaabbaaabaaaaa +bbaaabaaabbbabbabbbbabab +abaaaaaaaabbbbbbbbbaabbb +babbbbabbabbaababaabaaab +ababaabbaabaaababaaaaaba +baababaabababbbbbbbbaabb +bbbbbaabbaababaaaaabbaaaabaaaabaaaaabbbaaaaababbbaabbbba +bababbbbaabbbabababbbbaabaabbbbbababbaaaabbabababaabaabb +abababaaaabbbababaaaabba +bbaaaaaaabaaaaaabbbbbbbb +abaabbbbaabbaaabbbbbaaabaabbabbaaabbbababbbbbbaaaabaaaaabbbbaaba +abbbabbabaaaaaabaabaabba +aabababbbaababaaabaabbbb +baababbababbbbbabbabbabbbbbbaabb +bababbaaaabbbabbaaaabbaaabaababaabbabbab +abbbbabbabbbbaaaabaaabaa +abababbaaaabaaababaaabaa +babbababbbabaaaaabbbaabbaaaaaaab +abbbbaaaabbbbbbaaabaaaab +baaaabaaaabaabaaabbaaabb +bbbbbbabbbaaabababbaabbaaabbbbba +aaaabbaaaabaabaabbaabbaaabbbabaaaabaabab +babaabababbbbababbababaa +baabbbabbaabbbaaaababbaa +bbbabbbbabbbaabaabaabbabbaaabbaa +bbaaabbbaabbbababaaaabaabaababab +babbaabaaaaaaaaaaaabaaba +bbabbabaaabaaabbabbaabab +babaababaaabbbbaabbaaabb +aaaabbabaabbbbbabbbabbba +bbbbbbabaaabbaababbaababbaabbbbbabbbabbb +aaabbbbabbbbbabbaabbbaab +bbbbaabaaaaabaababbabaab +abbbaabbbbbbabaaaabaabba +aabbbbaaabababbbaaaabababbaabbbaaabaabbb +aaaaabbaaaaabbababbbaaaa +aaababbbabaaaabbbbabbaaaababaaabaabaaaab +aaabaaabbbaaabbbbbbaaaab +abaabaabbbbaababbbbaabaa +aaaabaaaaababbababababab +aabababbbabbbbbbabbbbabb +abbabbaababaabbbabbaaaaa +babbbaabababaabbbbbaababbaaaaabbbbbbbbbaaabbaaaa +baaabbbbaaabababaaabaabb +baaabbbabbbaaabaaabaaaaa +ababaababbbbabaaabaababa +ababbbaaaaabbbbabbababbb +abbbbabaabbbbbaabbaaaaab +baaabbbbababbabbaaabbaaa +babaabaaaaabbbbabbbbbbaaabaabbabbbbbabbaabaabbbaabaaabbb +bbbababbabbbbbbabbbbabaaaabaaaabbaababbb +bbabbabbbbbaaabaaabbabaabaaaabba +baaabaaabbaaabbbaaaaaababbabbbab +aaaabbabaaaabaababaaabbb +abbbbbbaabbaaabbabbbaaaaabbbabab +abaabaaabbbbbbaaaababaaa +aaabbaabbabbbaaaabbaaaba +baaaaaabaaababaaababaaaabbbbaabb +baaabaabbbaabbaaabbbabababbbbaab +aaabbbaabbbbabbababbbabb +baaaababbaababaaaaaababa +babbbbbababbbaabbabbaaab +babbaabbbbabbaaabbbaabababaababbbabbbbbbbbbabaabbaaaaabaababaaba +ababbaaaabbabaabbabbabbbbbbaaaab +bbaaaaaabbbabbaaaaaaaaba +bababaaabaaabbbabbbbbbbb +bbabaaaabbbababbbabbaaaa +bbaabbbbbaaabaaaababaaab +babbabababaababbbbbbbaaa +aabbaabbabbabbbaaaaaabaaabbaabbaaabaaabbbbabbababaabaabb +aabababbbaaaabbbaaaaabab +aabbbbbbabbbbabbaababbbababaabbbabbabbbbbaabbabaabababbb +bbbbaaaaabaabbaaaababbaa +baaabbababbbaaabaaabbaba +aaababbbbabbbbbaaaabaaba +babaabaaabababaaaaaababbabbbabab +bbaaaaaaaabbabbbaaababba +bbbabbbbbaaaaaaabababbaaabababbaaabbbbbabaababaabbaaaaab +bbabbbaaababaaaaabaaabbb +ababbbaaababbbbbaabaaaaa +abaababbbabbbaaaababbaaa +bbbbabbbaaaaaaaababaaaba +bbbbaabaabababaabbbbaabb +bbaabaababbbbbabaaaaabababbabbababababbbabbababbbbaababb +aaaaabbaabababbabaaaaaba +aabbbabbbbabbabaaaabbabb +babbbaabaaabaaabbbaabbabbaaabbbbbbbbbabbbabbbabbbaabaababbabbaaa +babbbaabbaaaabbbbaabbaba +bbbababbbaaabbbbabbbbbaaababbbbb +bbbbabbbbbabbabaaaaaaaaaabaaabaaaababaaa +ababaabbaaaaabbaabbababb +bababaaaabababaaababbaaa +bbaabababaaabbbbabbaaabb +babbbbaabaaabbbaababaaababaaababbbbbbbbbbaaababb +baaaabbbaaabbaabbabbbabb +ababbbbbbbbbaaaaaabaabab +abaabbaabaaaababbaabbabb +aaaabbababaabaaababaaaab +baaabaabaaaabaababbbbbbbbabbaaaa +bbabaaaabaaabbbbaababbbb +ababbbaaaabbaabbababbbbbaababbaaaaababba +abbaabbaaaaaaabbbabaaaaa +aaabababababbabbbabaabbabbabbaababbbbabbbabaaabbaaababab +bbaababaaaaabaaaabaaaaab +bbbaababbabbbbbabbbbaabb +ababaaaabbbbbabbaaabaabb +babaabbabbbbabaabbbaaaaa +bbbbbabbabaabaaaabbbabaa +baaaaaaaaabababbbbbaaabaaabbbabbabbababa +baaabbbabbaabaabbabbababbaaaabbbbbbbbbbabababbab +abbbabbabababababaabaaab +babaababbbaabababbabaabb +bbabababaabababbbaabbabb +abaabaabbabaabaaabbaabaa +aaaaabaaabbaabaaaabbaaababaaabbababbbabbabaabbbbbabbbbbabbaaabababbabbaa +bbabbbabaababababbbbabbbabaaaabbabbbabbaaabaaaaaababbaba +babbbbaababbbbaaabbbaaabababbbababaaaabb +bbbabbbabbabbbababbabaab +aababbabaaabbbbaaabababa +abbbbababbabababbababbab +aaabbaabaabaabaaaabaabab +bbabbaabbabbbbbbabaaaaaa +bbabbbaabaabbaabbaabbbbb +bbbbbabaaabaaabaababbbbababbbbaabaaaabbaababaaaabbababaabbaaabbababbbbbb +bbaabaaaababbabbababbbaaaaabbabbaabbbabaaaabaaabbabbbbbabaababbbabbbbbbbbabbbbba +aaabbbbaabaabbaaabbaabbb +ababbbaaaabbbaaabbbbbaaabbbbabbbbabbabbaababbaabaaababba +bbaaaaaaababaaaabbaaaaaabbaaabaabbbabaaaababbabaaabaabba +abbabbaaaaaaaaaaaaaababa +abbbbabbbaaabbabbbaabaaa +bbbbaaaabaaabaaabbbabbbaabbabaab +bbaaababbbbabbbbbbbabaab +abbaaabbbbaaaaababaaaabaabbaaaaabaabaaab +aaabaaaababbbbaaaababbaa +aabbabbbbbbaabbabbabbbab +aabaabbbabaababaaabaaaaa +abbbbbbbaaabaaabaaabbaab +babbaabababbbaababababab +babbbaaabbababbabaabbbaa +abbaabbaabbbaabbaababaaa +ababbbbbbbbbbbaabaaababb +ababaaaabbbbabaabbaaaaaabbbaabaababababb +baababaaaaababbbbaaaabbbbabbababbaabbbaaaabbaaaa +baaaababbbbbbabbbabaaaab +bbabbabaabaababbababbbab +abbbbabaabaabbbaabbabbbbbaabbbab +ababaaaabbaabbbbbabaaaba +aabaaababaababbaabbaabab +babaabaaabaababbabbaabbb +aabbbbbaababaabaabbaabaa +baaaaabbbababbaaabbbbbbbbbabbaabaaabaabbaaaaaaabaaabbabb +babababaaaaaaaabbbabaabaaaabbaaaaabaaabbbbababbbababaabbaaaabbbababbbaab +babbaababbbbaababaabbaba +baabbabaaaabbbbbbababbabbaabaaab +abaabaaabaaabbbbbabbabba +ababbbaaaabaaabbabbbbbab +aaaaabbbabbaabbaaabaaaab +aaaaaaaaabbbbbabbaaabbabbaaabbaabaaabbabaaabaaaa +aaaabbbbbbaabaabbababbab +babababaabbbbaaaaaaaabbabbbbbababababbab +aaaabbaaabbbaaabbaabaaab +aabaabaaabbabbbbaababbaa +abaabbabbabbbababbbbaabaabbbbbaabaaabbbbabbaaaaa +bababbbbbbbbabbbbbbaababbabbbbaaaabbababaababbbb +aaabbbaabbaabbbbabaaabbb +abbbbbbbbbbaaabbababbabbbaababbb +aaaabbbbaabbabaaaaabbabb +aaaaaaaababbbaaaabbaaabb +babbaabababbaababbbabbbbbbbbbbababbbababbaabbbab +bbbbabbbbbbabbaabaabbbaa +aaaabbbbbaaaaaaabaaaaabbabaababaabbbbbab +aabaaaabbbabbbaaabbabbaaabaabbbaaabbbbbaababbabbabaaabbabbabaaab +aaaaabbbbbabaaaaabaabbbb +abaabbaabbbbbbaabaaabbaaababaaababbaabababbbbbbbbaabbbbbbabbaaabbabbbbaaaaaaaaaaaaaabbaa +abaabaabbbaaabbbabbaabaa +babbaababaabbbaabbabbaaa +ababaaabbababbaabaaaaababaabbababbabaabbabbbbaaa +aaababaabbbbbabbbbabaaaaaabaaaaaaabaabab +aaaababbbbbbaababababaabaababaaaababbaba +bbabababababbbaaaababaaa +bbbabbabaabbbabbabbaabaa +bbaaababbaaabaaabaaaaababbabaabb +abbbbbbabaababaaaabbabab +aaaaaaaaaaaabbaabbabbaab +bbaaabaaabbabbbaaababaab +aabaabbbbbbbbbbbbbbabbabaabaabbbabbbbbbbbbbbababbbbbabbbaabbbbbabaaaabba +abbabbbababbbbbaaabbbaaa +baaaaaaabbabaaabbaaabaabbbabaabbabbbaabbabbababbaaabababbabaabbaaabbbbabbababbab +bbbaabaaabaabbabaabaabbabbbbaaaa +baaabaaabaababaaabbbbaab +bbbabbaababbbbababaaaaab +aabbabbbaaabaaaabbbaaaab +aabbabbbaabbaabbabaabaaabaaabbbb +bababbbbaaaaabbbaabababbabaabbaababbbaabbabbababaaaaaaabbaabbabbbaabaabb +bababbaaababbabbbbbbbbba +aabababbaabaabaabbabbbbb +bbbbaaaaabbbaababbbbbbba +bababbbbaabbbbbbabbabaaa +aaabbbaaaaaaaaaabaabbbab +baaaabaaaaababbabbbbababbbbaaaab +abbbaabbbabbbaaabbbabbba +baaaabbbbabababaabbbabab +aaaabbabbbababbababbbbaa +aabbabaabababaabaababbbb +bbaabbbbbaabbaababbabbbaaaaabbabbbaabbba +abbbaaabbaaaabbbaabbbaab +abaaababbaabbbabababaaabbbbaabbbbbaaaaabaaabaaabbabbbabaabaaababbabaabbbaaaabaaa +aaaaabbbbababaababbaaabb +bbbbabbbbbabaabaaabaabab +aababbbababaabbbbbaabbabaabaaabbbabbaaabaaababba +abaaababababbbbbbbababbabbbabbbbbbaabbbabaaabbbbabaababb +babbbbbababaabaabbbaabaa +bbbbabaaaabbbabaaaabaaaaabaaaaaabbababaa +baaaabaabaaaabbbbabaabbaaabaaababbababbabaababab +babbbbababbbbaaaabaaaabb +abaabaaaabbaabbabaaaabbbbaaaaaababbaaabb +abbaabbabababbaaaaababba +abbbbbbababaabbabbbbbaab +bbaabaabaababbbabaaabbabbbaaaaaababaabbbbbbbabbaababbababaabbaaa +bbaaababbbbababbbbbbaaaaaabaabbb +bbbbbbaaabbbaabaabbbabbabbbbbbaaabbababbabbbabbbbbabaabb +aabbaababbaababbbbbababbaabaababbbaaabbaababbbbbbbbaaaaabbabaaaababbabbaaaababbbaababbbb +babbbaabbbabbabbbbbabbaaabbaaaab +abbbaabbbbabababaaaababa +ababbbbbbbaaabaabbbabaaa +ababaaaabaaaabababbaaaba +ababbbbbbababababbbbbabbbbbbbbba +bbbbabaabaaabaaabaabaaaa +baaabaaaabbbbabbababaababbbbbbbbababbbababaaaaabbbbbabababbbbbaaaabbbbababbaaaaaaabaaababaaaabbb +bbabababaaaabaaaababbbba +bbaaababaaaabaabaabababa +bbbaababaaabbaabbbaabbba +aabbabbabaaaabbabbaaaaabaabaabaababbbbabbaabaaba +abbabaabbbbabbbabbaabbaabbabbaabbababbbb +abbbabbaabbbbabbbbbbbaab +aabababbabaababbbaaabbbbaabaaababbaabaaa +bbbbaababbbabbababbbabbb +aaabaaabbbaabbbbbababbba +bbbbaabaaaabbabababaaaaabaaaaabaabaaabab +baabbaabababbbaababbaaaa +aababbabaaababbbbaaabbaa +babbbaaaababbbbbabababbb +baaaaaaabbbaababababbbba +bbabaaabaaaababbbaabaabb +abbbbabaabbbabbabbaaaabb +bbaabbbbbabbbaabbaaabbaa +aaabbbaaabbababbbbbbabab +babbbaaaaabbabbbabbaababbbaaababaabababbabbababaaaabbbbbaaabaabb +bbbababbbbbbbbbaabbabbababaabbbb +baaaabaabaaabbabbbbbaaab +babababaabbbbaaabbbababbaaabaabb +babaaaabbabbabbbbbbabbaaababbaaabaabaaaabaaaabaabbabbbaabaabaaabababbbbb +bbabbbaababbbbbaaaaaaaaaaabbabab +bbaabaaaaababaabaabbababaaaabbababaabbbabbbaaababbababbb +abaabaabbbbbbbabaabbabab +aabbbababbaaababababbbab +bbbabbaabbbababbbaabaabb +babbbabaaabbbbbaaaaaabbaababbbbbabaaabbb +aaaabaaabbaaabbbababbabbbaaabaaabbbaababaabbbbaa +abbabbbbbaaaababbaabbaba +bbaaabbbbbbabbabababaabaabbbbbbbababbbba +bbbbabbaaabaaabbaaabaaabaabaaaab +babaababbabaabbbaaababba +ababaababaaaaaabbbbabbabaabbbaaa +babaababbbbbabababaaabbaabaaaaaaabbabbababbabaaaabbbabbbaaababaabbbbabaaababbbba +abbabbaaaaaaabbabbbbaaaaaaaaabbb +aaabbbbabbaaabbbaababbabbabababb +bbaabbbbababbaaababaabaabbbbabaaaaabaabbaaabbbaaaaaabbba +ababaabaaabbababbbbabbabaabaaabbabaabbab +baaabbbabbbbabbababbbbabaaabaabaaaaabbab +baaabbbbaabababbbaaaaaba +abbabbbbbaaaaabbaabaaaaa +bbabbabbaaaaabbabbabbbaabaabbbaa +bbbaaabbaaaababbbabbbbaababaabbbabbbaaababababbb +babbaabbbbbbaaaaababbaba +abbaabbaabababbaaababbbb +abbbbaaabaabaabbaabbabbabaaabaabbbabbaabaaabababaabbaabababaaaaabbbbabbaaabbbbaaaaaaabba +abbbaabaabbbbbbbbabaaabb +baaaabaabaaaaaabbaaaababaaabbbaabbbabbabbaabbaaa +baaabbabbbabaaaaaabaabba +babbaabaaaababbbbaaaabaabaababab +bbbaabbababaabbbbaaaaaba +aaaabbbbaabbabaaabaaaabb +aabbaaabbbbaabbaaaabbaab +babbbaaaababaaaabbababbb +abbabbaabbabaaabbbaaaabb +aaaabaaababbbbbbaababbbb +bbbababbbbaaaaaaabbbbbab +bbbabababaabaaabbaaabaaabbabaababbabbaabbbaababbaaaabaababbbabab +aaaababbbaaabbababababbb +abaabbabbbaaabaabbaaaaabbbaabbbbbbabaaaabbaaaaabaaaabbabbbababaa +bbaabbaaaabaabaabbaababb +aaababbbbaaaaabbbbaaababaabaaaaaabbabaab +bbbabbbbbaaaaaababaabbbaaaababbbbaabbbaaabbbabaa +babbbbbbaaababbbbaaabbaa +bbbbabbaabaaaabbaabbabaababbbbaabbabaabbbbbabbbbabbabaab +baaaabbbaaaaabbbaababbaa +` + +module.exports = data diff --git a/day19/day19-1.js b/day19/day19-1.js new file mode 100644 index 0000000..03cad56 --- /dev/null +++ b/day19/day19-1.js @@ -0,0 +1,28 @@ +const data = require('./data') +const rules = {}, regexps = {} +const [unorderedRules, messages] = data.split('\n\n').map(l => l.split(/\n/g).filter(Boolean)) +unorderedRules.forEach(r => rules[r.split(': ')[0]] = r.split(': ')[1]) + +const find = (rule, rules) => { + if (rule in regexps) { return regexps[rule] } + + let newRule = '' + if (/^".*"$/.test(rule)) { + newRule = rule.replace(/"/g, '') + } else if (/\|/.test(rule)) { + const [r1, r2] = rule.split(' | ') + newRule = `(${find(r1, rules)}|${find(r2, rules)})` + } else { + newRule = rule.split(' ').map(nr => find(rules[nr], rules)).join('') + } + regexps[rule] = newRule + return newRule +} + +find(rules[0], rules) +const regexp = new RegExp(`^${regexps[rules[0]]}$`) + +let result = 0 +messages.forEach(m => { if (regexp.test(m)) { result++ } }) +console.log('Answer: ', result) + diff --git a/day19/day19-2.js b/day19/day19-2.js new file mode 100644 index 0000000..f470fbd --- /dev/null +++ b/day19/day19-2.js @@ -0,0 +1,42 @@ +const data = require('./data') +const rules = {}, regexps = {} +const [unorderedRules, messages] = data.split('\n\n').map(l => l.split(/\n/g).filter(Boolean)) +unorderedRules.forEach(r => rules[r.split(': ')[0]] = r.split(': ')[1]) + +const find = (rule, rules) => { + if (rule in regexps) { return regexps[rule] } + + let newRule = '' + if (/^".*"$/.test(rule)) { + newRule = rule.replace(/"/g, '') + } else if (/\|/.test(rule)) { + const [r1, r2] = rule.split(' | ') + newRule = `(${find(r1, rules)}|${find(r2, rules)})` + } else { + newRule = rule.split(' ').map(nr => find(rules[nr], rules)).join('') + } + regexps[rule] = newRule + return newRule +} + +rules['8'] = '42 | 42 8' +rules['11'] = '42 31 | 42 11 31' + +find(rules[42], rules) +find(rules[31], rules) +const regexp42 = new RegExp(regexps[rules[42]], 'g') +const regexp31 = new RegExp(regexps[rules[31]], 'g') +const customRegexp = new RegExp(`^(?<g42>(${regexps[rules[42]]})+)(?<g31>(${regexps[rules[31]]})+)$`) + +let result = 0 +messages.forEach(m => { + const matches = customRegexp.exec(m) + if (matches) { + const res42 = matches.groups.g42.match(regexp42).length + const res31 = matches.groups.g31.match(regexp31).length + if (res42 > res31) { result++ } + } +}) + +console.log('Answer: ', result) + |