From d2d3020e5c3f36c28a23a9480449e3b90cf6d708 Mon Sep 17 00:00:00 2001 From: Parnic Date: Sun, 20 Dec 2020 10:13:53 -0600 Subject: [PATCH] Day 19 - part 2 is more focused than I'd like --- 19input.txt | 530 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2020.csproj | 3 + Program.cs | 1 + Q19.cs | 218 +++++++++++++++++++++ 4 files changed, 752 insertions(+) create mode 100644 19input.txt create mode 100644 Q19.cs diff --git a/19input.txt b/19input.txt new file mode 100644 index 0000000..eebf3a3 --- /dev/null +++ b/19input.txt @@ -0,0 +1,530 @@ +70: 90 92 | 53 50 +99: 90 102 | 53 22 +24: 130 90 +125: 85 53 | 100 90 +61: 53 58 | 90 26 +88: 33 53 | 46 90 +32: 65 90 | 90 53 +48: 46 53 +116: 53 50 | 90 18 +40: 53 83 | 90 81 +54: 46 53 | 5 90 +36: 50 90 | 130 53 +58: 92 90 | 130 53 +2: 19 53 | 75 90 +95: 53 46 | 90 19 +124: 46 53 | 33 90 +79: 91 53 | 7 90 +46: 90 90 | 53 90 +87: 9 90 | 84 53 +122: 90 46 | 53 33 +15: 89 90 | 79 53 +41: 90 4 | 53 119 +7: 53 128 | 90 128 +93: 53 120 | 90 37 +121: 15 53 | 103 90 +91: 90 33 | 53 110 +5: 53 90 | 65 53 +26: 53 19 | 90 107 +44: 53 75 | 90 32 +23: 107 53 | 50 90 +33: 90 53 | 90 90 +75: 53 53 | 90 90 +18: 65 65 +59: 53 107 | 90 32 +104: 90 33 | 53 46 +20: 121 90 | 123 53 +100: 90 75 | 53 46 +131: 18 90 | 46 53 +9: 90 67 | 53 105 +37: 53 75 | 90 128 +3: 53 29 | 90 22 +120: 53 92 | 90 33 +35: 55 53 | 30 90 +115: 65 107 +106: 90 46 | 53 19 +89: 90 59 | 53 68 +83: 90 46 | 53 130 +25: 90 87 | 53 41 +11: 42 31 +84: 53 117 | 90 34 +8: 42 +53: "a" +86: 53 6 | 90 12 +76: 53 78 | 90 97 +52: 126 90 | 115 53 +31: 53 35 | 90 20 +112: 110 90 | 32 53 +82: 101 90 | 127 53 +119: 53 27 | 90 93 +117: 90 81 | 53 23 +57: 82 53 | 43 90 +105: 90 126 | 53 21 +111: 53 32 | 90 110 +68: 53 18 | 90 46 +73: 71 90 | 24 53 +49: 77 90 | 48 53 +81: 90 50 | 53 75 +102: 32 53 | 128 90 +12: 92 53 | 19 90 +60: 62 90 | 108 53 +101: 53 104 | 90 62 +65: 53 | 90 +50: 53 90 +97: 53 56 | 90 64 +63: 99 90 | 39 53 +43: 90 125 | 53 60 +66: 130 90 | 33 53 +27: 53 2 | 90 14 +4: 3 90 | 74 53 +118: 53 76 | 90 57 +113: 86 53 | 13 90 +56: 90 28 | 53 54 +38: 36 90 | 69 53 +39: 10 53 | 23 90 +14: 90 50 | 53 18 +45: 53 72 | 90 40 +21: 130 90 | 107 53 +30: 90 113 | 53 1 +19: 53 53 | 90 53 +130: 53 53 +110: 53 65 | 90 90 +0: 8 11 +77: 53 110 | 90 92 +62: 53 33 | 90 19 +126: 50 90 +29: 75 53 | 5 90 +129: 98 53 | 47 90 +47: 53 94 | 90 95 +71: 107 53 +92: 53 53 | 90 65 +127: 22 53 | 109 90 +6: 92 53 | 32 90 +51: 26 90 | 66 53 +107: 90 53 | 53 90 +72: 90 124 | 53 104 +1: 53 96 | 90 52 +103: 53 73 | 90 61 +74: 2 90 | 131 53 +64: 90 7 | 53 122 +67: 53 70 | 90 104 +42: 53 25 | 90 118 +123: 63 90 | 80 53 +17: 46 53 | 130 90 +10: 19 90 | 33 53 +13: 53 112 | 90 17 +28: 90 128 | 53 110 +114: 53 5 | 90 50 +78: 49 90 | 51 53 +16: 111 53 | 14 90 +90: "b" +85: 130 90 | 50 53 +80: 38 53 | 16 90 +69: 110 53 | 107 90 +98: 53 44 | 90 88 +94: 5 53 | 46 90 +108: 18 53 | 75 90 +55: 90 129 | 53 45 +128: 90 90 +34: 106 90 | 114 53 +109: 90 110 | 53 50 +96: 36 90 | 116 53 +22: 75 53 | 18 90 + +aaaaaaaabbbbaabaabbbaaba +aaaaaaaaabbaaabbbaabaaaaabbaaabaaabbbbbb +babaabaaabaaabbbaaaabbba +baaaabbbabbabbbbabaababa +aaaaabaabbbabbbabaaabababaabaabbbaaaabba +babababbbaababbabaaaaaab +bbabbbabbabaaabaaaaaaaba +bbaabbaaaababbabbbabbbbb +babbbbbbbbbababaaaabbbab +abbbbbbaaaabbaaaaabbaaababbbbbababbaaaab +aabbaabaaabaabaababbbaaa +baaabaabaaabaabbbbaaaaba +aabababbaabaaaabbaaaabaaabbbbbaa +bbbbbababbaabaaabaababbababbaabababbababbaabbabaaaabbbba +bbbaabbbaababbaaaaaaaabb +aaababbbbbaaababababaabb +bbabaabbababbbaabbababaa +baaabababbbbbaaababbabab +aaaababaaabbaababbaaaabb +ababbabaaabaaaabbbbaaaba +bbaaababbbbababbabbaabba +babbbbbbbbbababababbaaab +babaabbbbababaababbaabaabbabaabb +baaaaabaaaaaabaabbaaabaa +aabbabaaabaaabababbbbaab +bababaabaabbaabbababaaab +babaababbbbbbabababbbaaa +babaaabbaababaaaaaaabbbb +bbbbbabbbbaabaaabbaabbaabaabbaabaababbaa +bbababaaaaaaaababbbaabbabbbaabbabbabbaabaaaaaaaaabbbabbbbaabbaababaaaaabaabbaaaa +abaaabababaaabaabbbaaaaa +baabbbbbabbbabbbbbaababbaababaaabbbbaaaa +abbbabbbabbbaabbbaaaabab +babbabbbabbbbabbaaabbaaabbababbabbbbbbaababaabbb +babaabaaabbaabaaaaabbbbbabaabaaaabbbbaaaaaaababbabbaabbbaaabaaaababaaaba +aabbababbaaaaaaabbbbababbaabbbbaaababbbbaaaabbabbabbbbaaaabbababbbbbabba +bbaaabbaabaabaaabbaaaabb +bbaabaaaabbabbababbbbbabbaaaaaababbaabbb +baaababaabbbabaabbaaaaabaaababab +abababbabbaabaabbaaabbaa +bbbbabbaababaaaabbbbaaaababbabbbabbbbbabbbaaabbabbbbbbbabbbaabababaabbbb +bbabaaaaaaababbababbabaaaaaaabaabbbbbaaabababbaaaaaaaabbbbabaabaaaaaabbbbababaabaabbaababbaaabab +babaaaabbaaabababbaaabbbbaaaaaaa +babbbabbbaabbababbbaaabb +abbbabaaabbabbbbbbabababaaaaabba +baaaaaaaaababaaaabbbbbaabbaaaaba +bbbabbbababbaababaabbabaaabbbabbabaaaababbbaaaab +bbbaabaaabbaaaaabbabaaaa +abababbabaababbaaabaabaaaaababbbbaaabbaabbbababbababaaba +bbbaabbbbbbbbbaababbaabababbaabaabbbbaba +babbaaaaaabaaabaabaabaabbbaaaababaaaaabaabbbaaaabbbabaabbabbbaabbbabaaab +bbabbbbaababaabbababbbbaaaaabaabbaababbbabaabaaaaababaaabbabbbba +abbabaaaaabbbbbabbaaabbb +aababaaaaaaabaaabbababbb +babbbbbbbbbababaaaabaaab +bbbabaabababaaaabaaaabba +aaababbbbabbaabbbabbbabbbbababaa +abbbbaaaabaaaabaabaaaaba +bbabaabbbaabbabbaaaababbbbbaabbaabaaaaaabbabbbbaababaaba +abaaababaaaaaaabbbabbbbaabbababbbbbaababbbbbabbaabbbbbababbabbbb +bababaababbaaaaaaabbabab +baaabbaabbaabaaababbababbbabbbabbbbbbaab +baaaaababaababbaaaababab +abbaabaabbbabbaaaaabaaab +abbbabbaabbaaaaabbbbaaaabaababbabaabbbaa +bbaabbbbbaabbaaaabaabaaaababbaaa +aaabaaaaabbabbabaaababaa +aabaabbaaabbbbbaabbbbbbaabaabbba +aababbaababbbabbabbbabab +bbabbaaaaabbbbbaaabababa +aaabbbbbabbbbbaababaabba +aaaaaaaabbabaaabbbabbbaa +bbbabaaaaaabaaaaaaababaa +aabbbabbbabbabababbbabbbbbbbabba +baababbababbaabaabbbbaba +abbbaabbbabbbabbabbabbaa +aabbaabbabbbbbbabaabbabbabbbbbbbaaabbbbbaaaabbba +bababaabaabaaabaaaabbbaa +bbbabaabbaaababababbbbba +abbbaabbbbbaaaabbabbbbabababbabb +baabaaaabbababbbabbaabbabaaaabab +babaabbabbaabbbabbaabbababbbbabb +aaaaabbbaaabbbbbabbabbbbbbbabaabbbabbbababaaaaaa +babaaaabbababbaaababaababaaaabba +bababaabbbbabababbabaaba +aaabbbbbaabababbababbabb +bbbaabbbbabbbbbbaabaabab +baababbabbbbbabaabaabbbb +abbbabaabbbbaabaababbbaa +aababaaaaabaaabaaaaaaaba +abbbbaaaababaaabbaaaaaaababbaaaababbbaabbaabbbbbaabbababbaaabbbb +bbbbbbaabbbababaabaaaababbbbbaabaabbaaaabbbbaaababababaa +bbbaabbaaaabaaababbabbaaaabbabbabaabbbaaaabaaaaa +bbbabbbabbbbbaababaaabbbaaababbaabaabaaa +abbbabbaabbaaaaaaabababa +baabaabbabaaabbabbbaaabb +aaabaabaabaaabaaababbbaa +babbaabaabaaaabbabbbbaba +bbbbaabbbaabbaabbbabbbbaabaaababaaaaabab +baabaabbaaaaabaaaabbabaabbbbbabaaababbabbbbbababbabaabbbbbabaaba +abaaabbaaabaabbaaaaabbba +ababaaaabbaaaaaaabbbaabbabbbbabb +babaabbababbbabbabaabaabbbbbaabbbabaaabbaaabbbba +baabbbbbbbbabbbbbababbab +ababbababaaaaabbbbbabbbbabaaaabbaaaaabaaabaababb +aaabaabababaabababbababb +aaabbbbaaaaabbbbbbabbabbbabaabaabbaaaaaabaaaaabbbbbabbbabaaaaabaababaaba +bbaabbaaaaaababbbaababaa +aaaaabbbbbaaaaabbaababaa +aaabbbbbabbbbbababbbaabbaaabbabbabaaabbb +baaaaabbbbbbbbbabbbbbabbbaabbbababbbbbaa +abbabababbbbabbabbaabbaabaaaabaabbbbbaaabbbbbbaaabbabbbabbbaaabbbbaaabab +bbabbbabbbbabaaaabbabbabbaaabbab +aabbaaabaabbbabbbbbaaaba +ababbabaabbbaabbaaaaabbbaabaabbbbbbbbbbbbaaabbbbbaabaaabbaaaabba +bbabbbababababaabbaaabbb +babbabbbbbbabbbabbabaabbabbaaabbababbababbabbbbbabababaa +bbaaaaabaabaabaabbbabbbbaabbbbbbaaaaaaba +aaaaababbaaaaababaaabaaaaaaaaaabababbabbabbaaaaa +abaaabbbaaabaabaaabaaaabaaabbbaa +baaaaababbabbbbaaaaaaaaabbbbabba +bbaabbaabbbbbabaaabbbbbabaaabaaaaaabbaba +bbaaabbabaaaaabbaabbaababaaaabaaababbbab +aabbaaababbbbbbbaabbabba +abbabbabbbaaabbababaaaaa +abbaabaabbbbbbbbbbbabbbbbabaabaa +aabbabaaababbabaabbbaaaa +bbabaababbabbaaaaaabbbbbabbaabaabaaabbbbbabbaabbbaaaaababbaababbbbababab +bbabbaabbbabbbbabaaabbaa +aaaabbababbaaabbabbbabaabbbaaababababbab +aaaababbaaabaabbbaabaaab +aabbaabbaaabaaaabbaabbab +babababbaabbbbabbbabbaabbaaaaababaabbabbabbabbbaabababaabbabbbaa +baabbaabbababbbbabaaaaba +aabaaabbababbbaaabbbabaabaaaabbbabaabbaaabbbaabaaaabaaaaabaaabbabbbabbbb +aabbbbbbaabaaabaaabbbbabaaabaabaababbaababbaabab +bbbabbbaaaaabaabbbbbbaaaaabbbbbabbabaaabbbbaabba +aabbbaaaabaaaabbbbbabbab +bbaaaaaaabbbbbbbababbbaa +baaaabbbabbbbbbbbbaababa +abbabaaaaabbbbbaaabbaaaa +bbbbbbbbaabaabbbbaaaabba +aabaaaaaaabbbaababbaabbbbababbabababaaab +aaaabbabaabbabaaaaabbbab +baaabbbbbbbabaabbbaabaabaaaaababbaabbbbababbbbababbbbababbbbbbab +baabbbbbbababbbbabaaaaaa +bbbbbbbbbaaaaababbabbbbbbbbaaabb +abbaaabbaaaabbabbaabbabbbbaababbbbbbbabb +abbabababbaabaaaabbbaaba +abbabaaaaabbbbbbaaaabbbb +bbaabaababababbabbabaaaa +ababbbbbbabbabbababbaababbbabbabbbabbabaaaaaababaaaabaabbbaababa +bbabbabbabbababaaaababaa +baabbaaabaabaaaaabaaaaab +bbbabbaabbaaababbaaaaaab +bbbbaabaababbabababbaaaa +babbbabbabbabbabbbaaabbaaabbaabababbbabb +aaaababbbaaaaababbbbbbaaabaababb +bbbbaaaabbbbaaaaaabaaababbaabaababababaa +baabbbabaaababababbbabab +aaaaaaabbbbbbabaababbabb +aaaaaababbbaaaaabababbab +baaabbbbaaaabababababbba +ababbbabaaaabbabaaaaabababaabbba +abbabbbbbabbaabaabaababb +baaaaababbbaabababbaabab +babbaaaaaabbbbaabbabbbabbbbbbababaabbabbababaaba +bbbbbaaaaabababbaabaabbaabbbaabbabaabbba +bbbbaabaaaabbbbbbabbaaab +baaababaaababbaaaabbbbbbabaaaaaa +aaabbaaaababaabbabbbbabbbbaaaaaaaaabbaaabaabbaabbbbabbabbabbaaabaaabaabb +aabaabbabbbabbbaabaaaaab +abaabaaaaabaabaaabaabbba +aabbbbabaaababbbababbbaa +bbabaaababbabbabaabbaabbbbbbabba +aabbbaaaaabbbbbbbababaaabaabbbaa +abbbbabbaabbabaabaababaaabbabaaabaabaabbaaaaabaabbaaabbabbaaaaab +bbbabaaabbaabbbbaaaaaaba +baaaaabbaaaaabaabbababbb +bbbabbbbbabbbbbbbbbbabab +abbbabaabbaaababbbbbabaa +aaaaabaaaaababbbabaaaabbabaaaaba +abbababbbbbaaabbaaaabbbabaaabbbaaaaabbaababaaaababaaaabb +abaabbbbbbbabaabababbabbbbabaaabbabababbaaabbaabbaababab +baabbababbbabbaaaaaaaaba +aabbbabbaaaabaaaababaaab +abbabaaaaabbbbabbabbbbaaabbbbbabbbaaaabbbbaababb +abbbbbbaaaabaababbaabbaa +bbbbaabaabaaababaaabbabbaabbbabbbbababbbaabbabbabaabaaba +abbbabaaaababaaaababaaab +bbabaaababbaabbababbabaabaababaa +aaaabbbaaaaabbbbabbbbbbabbbabaabbbabbbaabbaabababababaaabbbaabbabbabaaaabbbbbbbbabaaabba +abbaabaabbbabbbbabaaaaab +abbaaaaababbbbbbbabbabbaabbababbaaaaaabbabbaaaabaabbbaba +aababaaaaabaaabbbaabaaab +bbbabababbbabbbbabbabaaababaaaaa +abbbbaaababbaaabbaaaabbabaabaaab +abaabaabbbbabaabaabababa +aaaaaaaaabaaababbbabbabbaaaaaaabaaaabbababababaa +abababbbabababbaaabbabbbbbaabbbbbbaaababbbabbbbaabbabbaa +bbbbbabaaabbbbabaaabbabbabababbaaaaabbbb +aabbbbaaaaababbbaabbabba +baaaaababaaaaababbabbbbaaaaaabaaababbaaabaaaaaaa +abaaaabbabbaaababbabbbbb +bbaabaaabaaaaabbbabbaabaaaabaabbaaaaabba +abbbbbbbbabbbbaabbabaaaaabbabbbabaaabaaa +bbbaabaaabaaaababbbbbabbbbbbbabbbbaaaaba +abbaaabbbaabaabbbbbbaaab +aaabbaaabbabbaabbababbaa +abbbabbbabababbababaaaaa +bbabbbbabaaaaababbaababbbbbaabaabbabbaaaaaaaabbbaaabbaab +abaaababbbaabaaababbabaa +bbaabaabbaaabbbbbaaaaabbaabbbbbbabbabaaabbaabababababbbabaaaabab +abbaaaaaaabbabaababbbbba +bbbababababaaabbabaaaaaa +babbbabbbbbabaabababbabb +abbaaaaaabbabaaabbbbaabbbabababa +abbabbbbbbabaabbbabbabba +baabaaaaaaaabaabbbbababaaaabbaaabbbaaabbbabbbaba +baaabaababbaaabbabbbbabb +abaabaabbbbbaabbababbbaa +bbbbaabaabbababbbbababaabaaabbabbbbbabbabbbabbab +bbabaaababbabaaaaaabaabbaabaaabaaabbaababbaaabbbbbbbabba +bbbabaaaabbabbabbbbabbab +bababaaababbbbbbbaabbbaa +abbbbbbbbbabbaaabbababbb +aabbaaabaabbbaaabbbaaaba +aabbabbbbabaabababbabbaa +abbbabaababaaabbabaabaaaaabbbbababaaabaababbaaaa +aaaaabaabaaababaabaaaaab +bbbaabbbbbaabbaababaabbb +abaaaabbabbabbbbbbbbaaab +aabababbbaaabababbabbabbaaaaabab +bbabbaaaaaaaaaabbaaababb +baaaaabaaaabaaaabbbabbbbaabbbbaaabaabbabbabbbbbababaaaaa +aaababbaaababaaaaaabaababbbabaaa +babbaabbbaaabaababaabbba +abbbabaaabbababaaababbbb +abbbaabbbabbababaabbaaabbabbaaaa +bbbaabababbaaabaaaababab +aaaaaaaaabbabbabababaabbbbaaaabbbbababbaaaabbaaaabababaabaabababbbbaaabaaaabaabb +bbbbbaaabababbabaabbbbaabaaaaabbabbbabbabaabbbbaaabaababbbaabbba +aaabbabbaabbaaabbbaaabbaaabbbbbabaaaaabaaababaaabaabaaab +bbaababbaabbbbbbaabbbaaaabaabbab +bbbbababababaaaaabbbaabbaaababbbababbabaaabbbaaa +bababaaaaabaaabbbbabbababbbbbaaa +babababbaaaaaaababaababb +bbaaaaaaaabababbabbaabab +abbaaaaabbbbbbaaaababaab +babaababaababbaabbbabbbbbabbabbb +aabbbbbbaababaaaababaabb +aaaababbabababbabbabbabbbbaaababbabbbaab +bbabbaaaaabaaababaabbaabaaaaabab +aaaaaaaabbbbbaaaabbaabab +abaaaabbbabbbabbabaabaabbbaaaaabbbbaabbb +babaaabbabababbabbaaaaba +baaababaabbabaabbaababbb +aababaaaabaaabbaabaababa +bbbabaabbabbbabbbbaaabbb +abaaabbabbaabbaabaaabbaa +bbbababbbbbbbaaabababbbaabbbaabbbaabaaabbabbabbabbaabaaaababbbbbbbbbbababbbabbaa +bbbbaaaaaabbbabbabbaabaababbababaabbabaaaaababbbbaababaa +bababbbbbaabbaababababbbabbbaaab +bbaababbabbbaabbbababbab +baabaabbaabbaabbbaaaabab +aaaaabbbbababaabaabaaaaa +bbbabaababbabaaabbbbabab +bbbabaabaaaaaaaabaabbbababbaaabaaaabbabbaaaaabbbabbaaabb +aabbabaabbbbaabaaababaaaabbbabbbbbbaaaaababbbbab +aaaaaaabbabaaabbababaabb +abaaabaabbabbaaabbbbbaab +aabaabbaabbabaaabbabbabbabbbbbbbaaaabbbb +baabaaaabbbabaabaabbaabbaababbaaaabbaaaaaababaab +baabbaaaaabbbbbbabbabbba +aabbbbbbbbaababbaaabaabaabbbabaababbbabaabbababb +bbabaabbbabbaababbababba +bbbbaabbbbaabbaaabbbbaba +aaababbabaabbabbabaaaaab +aaabaabaaaaaabaaabababab +ababbabaabbbbbabbabbaababababbba +abbaaabbbbbabaabaabbbbbababaababaabaabaabbaabbbaabbbbaaa +baabbaabbbaaabbaabaaaabbbbbbbbaaabaaababababbbba +aaaababaaaaabbabaabbaaaababaabaabaabababababbbbaaabbaaaa +aaabaabbbbbaabaaababaaba +bababaabaabbbabbaaaabbababbabbaa +baabaaaaaabbaababaaababb +baaaabaaaaaaaaaabbabbbaa +babbaabbabaaabaaabbaabaabababbbabaababababaaaaaaabaaaaabaaabbbba +abbaaaaabaabbbbbabaaaaaabbbbbbba +aaabbaaaabaaaabbbaababab +baaabbbbaabbbabbaabbbaab +babbaabbbabbabaaababbbababaababbbabbbbbbbbaabaaaabaaabbbbaabbbbbbaaabbbb +bbabbabaaaaaaaabaaaaaabb +ababbbbbababbabaaabbaababababbbbabbbbaaaaaaaaaaaabbbbbbabbbaabba +aaababbaaabababbababaaba +aaaaababbababbabbaaabbbbbbaaaabaaaabbabb +baabbbbbabbbabbbaaabaaab +babaaababaababbbababbbbabbababababbbbaab +abaabaabbabababbbaababbbbabbbbab +baababbababaaaaaaababaababbaabaaaabaaabaabbbbbbabbbbabaabbbababbaaaabbbabaaaaababbbababaabaaabab +bbbbbbaaabbababaabbbbaab +abbaaaaabbabbabaababbaaa +baaabbbbaabaabbbbbbabbbbbaaaabab +bbbbbbaaaabaabaabaaabbaa +aabaabbabbbabbbaabaaabbb +bbaababbaabbbbabbbababbb +bababaaabbabbbabaaaaabbbaaabbaab +babbabbbbbabaabbbbabbbbaaabbbaaabaabbbbaaabbaaaabbbbabbb +babbababbbabbabaabbbbaab +aaaabbabbbabbbbabbbbaabaabbabababaaabaabbbbbbbbabaaaabba +bbbbaaabaaabaaaaabbaabababaaabbbabbabbbb +bbbabababbbbbbaaabbbbbaa +baababbabaabbabbaabaabbbaabbbbbabbabbbaa +bbaabbbbbbabbababaaabbaa +aaaaaababaabbbbbbaabbabbbababaaaaababababaaabbabaaaabbbbaaaabbabbabbbaab +babbbabbbaaabbbbbbaaaaaaaaabaabbbaabbaaaaababaabababaaba +abababbbaaaababbbbaaabaa +ababbabaaaaababbabaaaaaa +bababaaaabbaaabbbababbab +bbaabbbaabbabbbbaabababa +baabbbbbabbabbabbbbbaaab +abbaaaaaaaaabaaabaaaabba +aabbaabbbbbabbaababbababaaabaabb +bbaababbbbbabbbaaaababbabbaababbabababbabbababaabbaaabaaabaabbaa +abbbbbabaaabbabbababbaab +aaaaabaaaabaaaababbbbaaa +aabaaabbbabbabbbabababaa +aabbbabbaaaaabbbaababaab +abababbbbbaabbaaabbbaabbaaaaabaabaaaabaabbbaaababbaababaabaababaababbbbb +babbaabaabababbbaaabbaab +abbbaabbabbbbbbbbaaababababbbaabbababbab +aaaababbabbaaaaabaabaabbbbabbbaaaaaaabba +bababbbbbbbbaabbaaaabbba +bbaabbbaaaaaabbbbabbbbaa +aabbaabaabbbabaabababbbbbbbbabab +babababbabbbabaabbbabaaaabababaa +babaaababbaaaabbbaabbbba +ababaaaaabbbbbbbbaabbabbbabbaabbaaaabababaababaa +bbaaaaabbaaaabbbbabbaabaababaababaabbaabababbbbaabbabbaa +baabbabbaaabaabbbbbbaabaaaaabaabaabaabab +aaababbbbbaababbabbabbaa +aabbaaabaabbaaabbaababab +abbabaaaaababaaaaaaaaaaabaaabaaabbbbabaa +aaabaabaabbbabaabaabbabbaababaaaabaababa +abbabbabbababbbbbaaaaaab +aabaaabbbbbaaaabbbabababbaaaabbbaaabbbab +bababbaaababbabababbabaabababaababbabaaaaaabaaaabbaaaaaabaabaaab +aababaaabaaaaabbabababaa +aabbabaabbabbaaabbbaaaba +aabbabbbabbabaababbaaaaaaabbbabbaaabbaabaaaabbbbaaaabbba +abababbabbbbaaaababbbbab +aaaabbbbbbbbaabbbaababbaaabbbbbaaababbabbbbaaaaaababaabbababbbaabaababba +abaaabbababababbbabababa +abaaabbaabababbbbaaaaaaabbbbabbb +aabababbbbbabaaababbabbbababaabb +abababbaabbbaabbaabbbbbabbbbbbbb +aabaabbbbbaabbbabaaabbbbbbaaaaaabbbbbbbabababbaabaaaabaa +babaaaabaaababbaaabababa +bbaabbbaababbababbbaaaab +bbbaaaababbbbbaabbbbbababbababbaabbaabababbabbbababbbbababbbabaaaabbabaaabaaaababbbbbaaaabaaabbb +baabaabbbaabbabaaababbba +bbbaabbbbbababbbbbbbaababbaabbaabbbbbaababbaabbabbbbaaabaabaabbabaabbbaa +bbbbbbbababbbbbbaabaababaaaaabbbbbbabbbb +aababbaabbbbaabbbbbaabbbaabaabaaaaaaabbbbabababa +abbbabaaabaaabbabbaaaaba +aaaaabbbaabbbbbbaaababbbbabaabbaababaabbbabaaaaabbaaabbb +babbabbbbbabaaabaaaabbaa +bbbbaabbaaaaabaabbabbaaabbabaaaa +aaababbbaabaaabbbbbaabba +aabbaabbababaaaaabbababbbababbaaabbbbaabbbbaaabbbaaabaab +bbabbabaabbabaabababaaab +bbaaababbbbbaabababbbbaa +aaaababaabbaaabbabbbbbaa +bbaabbbaabaabaabbbaaaaababbabaabbbabbabaaabbabbabbbbabaa +babbababaabaaabababbababbbaaababbbabbbbbbabababa +aababbaaaaabaabbbbaaabaaabbbbabb +bbbaaabbabaabbbbaabbabbbbabbaabbbabaababbbbaaaaaaababaabaaaaaaabbababaaa +abbaaabbbbabbaaaabaabbba +aaaaabaaaaaabbabbbaabaaaabaaaaaa +aaabbbbbbaabaabbabbbaaab +abaabaabbabaabbabbababbb +aabbbaaaabababbababbbabbbabbabababbbbaabbaaaaaaa +baababaababbabbbbbbabbbbababbabaabaaaaba +bbaabbaabbaaaaaaaaabbaba +aaaaabbbbaabbababababbbbbaababbaaaabbaab +abbaabbabaaabbbaaaaaaabbaababbbaaabbbbbbabaaaaabbaabaaaabaaaaaababaabaababbbbbbbbaabbabb +baababbabbabbabaabbabaaababbbaaa +baabbaabaababbabbbbbabbb +aabbaaababbbabbbbaabbaabababbbbb +aabbbabbaaabaabaabbbaaab +abbbbbbbbabababbbbaaaaabaabaabbbbababbaa +bbbbbaaabbabaaabaababbababbababababaabbbbabaaaaa +abbabbabaabbbbbbaabbbbbbbabbabbbabbaaaaaabbbaabababbaaaa +aaaababbaababbabaaaaabaaabbbbbbbbbbbbaba +bbbbabbaabaaabbabbaaabbaaababbaabbabbabaababaababbaaabaa +aaabbbbbbaabaabbbbaababa +baabaaaaaaabbabbbabbbabbbabbaaabbaaaabab \ No newline at end of file diff --git a/2020.csproj b/2020.csproj index ddb8a35..6c4dde6 100644 --- a/2020.csproj +++ b/2020.csproj @@ -59,6 +59,9 @@ PreserveNewest + + PreserveNewest + diff --git a/Program.cs b/Program.cs index 315b98f..792f532 100644 --- a/Program.cs +++ b/Program.cs @@ -21,6 +21,7 @@ Q14.Go(); Q15.Go(); Q18.Go(); + Q19.Go(); Util.Log($"Total time={(System.DateTime.Now - start).TotalMilliseconds}ms"); } } diff --git a/Q19.cs b/Q19.cs new file mode 100644 index 0000000..28b8d49 --- /dev/null +++ b/Q19.cs @@ -0,0 +1,218 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; + +namespace _2020 +{ + class Q19 + { + static Dictionary rules = new Dictionary(); + static List messages = new List(); + + [DebuggerDisplay("ch={ch} | num rules={ruleIdxs?.Count}")] + class Rule + { + public char? ch; + public List> ruleIdxs = new List>(); + } + + public static void Go() + { + var start = DateTime.Now; + MakeList(); + Util.Log($"Q19 MakeList took {(DateTime.Now - start).TotalMilliseconds}ms"); + var p1start = DateTime.Now; + Part1(); + Util.Log($"Q19 part1 took {(DateTime.Now - p1start).TotalMilliseconds}ms"); + var p2start = DateTime.Now; + Part2(); + Util.Log($"Q19 part2 took {(DateTime.Now - p2start).TotalMilliseconds}ms"); + + Util.Log($"Q19 took {(DateTime.Now - start).TotalMilliseconds}ms"); + } + + static void MakeList() + { + int mode = 0; + foreach (var line in File.ReadAllLines("19input.txt")) + { + if (mode == 0) + { + if (string.IsNullOrWhiteSpace(line)) + { + mode++; + continue; + } + + var chunks = line.Split(":"); + var ruleIdx = Convert.ToInt32(chunks[0]); + + if (chunks[1].StartsWith(" \"")) + { + rules.Add(ruleIdx, new Rule() { ch = chunks[1][2] }); + } + else + { + var refs = chunks[1].Split("|"); + var ruleIdxs = new List>(); + foreach (var ruleRef in refs) + { + var refGroup = new List(); + + var refIdxs = ruleRef.Split(" "); + foreach (var refIdx in refIdxs) + { + if (!string.IsNullOrWhiteSpace(refIdx)) + { + refGroup.Add(Convert.ToInt32(refIdx)); + } + } + + if (refGroup.Count > 0) + { + ruleIdxs.Add(refGroup); + } + } + + rules.Add(ruleIdx, new Rule() { ruleIdxs = ruleIdxs }); + } + } + else + { + messages.Add(line); + } + } + } + + static Tuple PassesRule(Dictionary ruleList, int ruleNum, string str, int startIdx = 0) + { + if (ruleList[ruleNum].ch.HasValue) + { + return new Tuple(str.Length > startIdx && ruleList[ruleNum].ch == str[startIdx], 1); + } + else + { + var matchedGroups = false; + var matchLen = 0; + foreach (var grp in ruleList[ruleNum].ruleIdxs) + { + var matchedGroup = true; + matchLen = 0; + for (int i = 0; i < grp.Count; i++) + { + var matchedRule = PassesRule(ruleList, grp[i], str, startIdx + matchLen); + if (!matchedRule.Item1) + { + matchedGroup = false; + break; + } + else + { + matchLen += matchedRule.Item2; + } + } + + if (matchedGroup) + { + matchedGroups = true; + break; + } + } + + return new Tuple(matchedGroups, matchLen); + } + } + + static void Part1() + { + int numMatched = 0; + foreach (var msg in messages) + { + var result = PassesRule(rules, 0, msg); + if (result.Item1 && result.Item2 == msg.Length) + { + numMatched++; + } + } + + Util.Log($"Q19Part1: total={messages.Count}, numMatched={numMatched}"); + } + + static void Part2() + { + var rulesUpdated = new Dictionary(rules); + rulesUpdated[8] = new Rule() + { + ruleIdxs = new List>() + { + new List() + { + 42, + }, + new List() + { + 42, + 8, + }, + }, + }; + rulesUpdated[11] = new Rule() + { + ruleIdxs = new List>() + { + new List() + { + 42, + 31, + }, + new List() + { + 42, + 11, + 31, + }, + }, + }; + + int numMatched = 0; + foreach (var msg in messages) + { + var firstRuleMatches = new List>(); + Tuple match = null; + var startIdx = 0; + while ((match = PassesRule(rulesUpdated, rulesUpdated[0].ruleIdxs[0][0], msg, startIdx)).Item1) + { + firstRuleMatches.Add(new Tuple(match.Item1, match.Item2 + startIdx)); + startIdx += match.Item2; + } + var matchCombos = 0; + foreach (var firstRuleMatch in firstRuleMatches) + { + startIdx = 0; + while ((match = PassesRule(rulesUpdated, rulesUpdated[0].ruleIdxs[0][1], msg, firstRuleMatch.Item2 + startIdx)).Item1) + { + if (firstRuleMatch.Item2 + match.Item2 == msg.Length) + { + matchCombos++; + break; + } + startIdx += match.Item2; + } + + if (matchCombos > 0) + { + break; + } + } + + if (matchCombos > 0) + { + numMatched++; + } + } + + Util.Log($"Q19Part2: total={messages.Count}, numMatched={numMatched}"); + } + } +}