diff --git a/2020/input/2020/day19.txt b/2020/input/2020/day19.txt new file mode 100644 index 0000000..6242e89 --- /dev/null +++ b/2020/input/2020/day19.txt @@ -0,0 +1,561 @@ +102: 100 47 | 76 84 +23: 60 47 | 73 84 +132: 17 47 | 81 84 +108: 55 100 +18: 116 47 | 26 84 +103: 84 115 | 47 81 +65: 84 113 | 47 50 +128: 107 47 | 125 84 +14: 84 100 | 47 107 +118: 47 17 | 84 57 +2: 47 100 | 84 40 +28: 63 84 | 74 47 +22: 102 84 | 123 47 +123: 84 74 +19: 3 47 | 13 84 +24: 74 47 | 81 84 +115: 55 55 +90: 92 47 | 44 84 +48: 84 94 | 47 96 +109: 17 84 | 100 47 +92: 84 75 | 47 108 +66: 38 47 | 125 84 +83: 66 47 | 108 84 +31: 121 84 | 77 47 +29: 47 61 | 84 111 +45: 47 47 | 47 84 +59: 47 49 | 84 43 +37: 47 30 | 84 95 +36: 107 84 | 125 47 +82: 74 84 | 38 47 +61: 84 10 | 47 110 +79: 47 28 | 84 109 +33: 101 47 | 133 84 +12: 45 47 | 63 84 +91: 122 84 | 93 47 +122: 65 47 | 52 84 +21: 57 84 | 115 47 +8: 42 +67: 102 47 | 64 84 +39: 113 84 | 81 47 +41: 84 124 | 47 10 +50: 47 47 | 84 84 +17: 47 84 | 84 84 +120: 98 84 | 78 47 +113: 55 47 | 47 84 +20: 84 128 | 47 104 +7: 84 1 | 47 20 +51: 84 113 | 47 81 +56: 84 83 | 47 69 +131: 84 127 | 47 97 +0: 8 11 +5: 47 63 | 84 125 +94: 15 84 | 127 47 +121: 99 47 | 27 84 +119: 47 115 | 84 57 +129: 47 80 | 84 131 +15: 47 100 | 84 45 +35: 84 50 | 47 76 +95: 47 115 | 84 107 +68: 127 84 | 51 47 +124: 84 107 +75: 50 55 +57: 47 84 | 84 55 +13: 47 33 | 84 129 +53: 106 47 | 59 84 +106: 16 84 | 118 47 +89: 84 125 | 47 45 +104: 45 84 | 76 47 +99: 47 56 | 84 7 +78: 84 74 | 47 81 +64: 17 47 | 115 84 +32: 50 84 | 40 47 +1: 47 24 | 84 72 +47: "a" +80: 114 47 | 109 84 +88: 47 119 | 84 132 +105: 47 125 | 84 100 +6: 68 84 | 67 47 +110: 76 84 | 63 47 +38: 84 84 | 84 47 +49: 47 63 | 84 76 +26: 55 107 +81: 47 84 +74: 84 47 +96: 84 89 | 47 117 +77: 47 86 | 84 71 +135: 32 84 | 2 47 +133: 47 15 | 84 128 +42: 19 84 | 62 47 +30: 47 100 | 84 74 +27: 6 47 | 91 84 +63: 84 55 | 47 47 +62: 84 87 | 47 23 +76: 84 84 +4: 84 135 | 47 54 +60: 41 47 | 37 84 +100: 47 47 | 84 47 +85: 47 112 | 84 18 +116: 125 84 | 63 47 +134: 57 47 | 115 84 +34: 52 47 | 25 84 +40: 47 47 +111: 58 84 | 126 47 +3: 29 47 | 130 84 +114: 17 84 | 107 47 +52: 47 45 | 84 74 +10: 47 100 | 84 81 +98: 47 76 | 84 100 +112: 84 82 | 47 103 +72: 40 47 | 45 84 +126: 50 84 | 113 47 +107: 84 47 | 47 84 +11: 42 31 +55: 84 | 47 +54: 12 84 | 5 47 +130: 34 47 | 70 84 +84: "b" +127: 81 47 | 17 84 +87: 84 53 | 47 9 +101: 105 84 | 14 47 +9: 88 84 | 120 47 +73: 47 79 | 84 22 +97: 74 84 | 50 47 +117: 74 47 +70: 47 134 | 84 46 +58: 47 50 | 84 115 +125: 47 47 | 55 84 +46: 47 81 | 84 17 +86: 84 90 | 47 85 +25: 38 84 | 63 47 +69: 39 47 | 78 84 +43: 47 100 | 84 125 +93: 84 66 | 47 35 +44: 47 21 | 84 36 +16: 57 47 | 107 84 +71: 48 84 | 4 47 + +babaaabbbababababbbbabbaabbaabaa +babaaaabaaaaababbbbaaaaa +abbabaabbaaabababaabbbbabbbbbaabbbbabababaaaabbbbababbbb +bbbabababbabbbabbbabbbbb +babaabbbababbbabaabaaaaa +abbabaabbaababbabababbbababbbabbabbabbbabbaabbbb +aaaaabaabbbbbaabbbbbbbbbbaaabbaaabbaabab +baababbabbbabbaaaaaababbaabbababbbabbbbb +aaabaaaabbabbbabbabaabbbabaabbbbaaaaabaaaabaabaaababaabbabbaaaabbbbaabbabbabaaaaaaaabaab +ababaaabababbbababaaabab +bbbbabbbbbaabaaaaaabbbbbbabbbabaabbaaababbbaaaaababaabaabaabababbabbbabbabaaabbaaabbaaaa +babaabaaababaaabaaaababa +aabaaabbaabbbabbabaabaab +bbbaabaaaabaaabbbaaabbbabbbaaabb +aaaaaaabaaababbbbbbbbbbbbaaabaabbaaabbab +bbabbabbaaaaabababaababa +babbababbbabbaababaababbaaaaabaaabbbabba +bbbbbbbababbaaaaabaaabbaabbaaaab +bbbbbaaabbbbbaaaaaabaaaabbbaaabb +babbababaababbbbbbbaaabb +abaabbaabbababaabbababba +abaaabbaaabaabbbabababba +babaaaabaaaababbabbbbaaa +bbbbbbbabaababbaaaaababbabbaabbabbbaabaababaabbbbbbaabab +aaabbabbbaabababbaabaaba +bbbababbabaabbabbbabaaaa +baabbabababaaaabbbbbbaab +bbabbbbabaababbabbbaabab +abaabbabbbabbabbabbbabba +bbbbbbbaaababaaabbaabbbabbaaabbbbabababb +aabbaaabbabbabaaaabbabaababbbaababaabababaaabbaa +aaabaababbbabbbbaaababbbbaaabbbb +aaaaaaaaaaabaaaababbabbb +bbbabbbbaabaababaabbabab +baaabaabbaaaabbbbaaaaaaa +bbbbbbbaabbabbaabaabaaaa +aaaaabaabbabbaaaaaaaaabb +aabaaabbaabbabaaabbabaabbaababaaabbbaaaaababbaabaaabbaaabbaaabaa +bababbbaaabaababbbababaabbaabaabbaaaabbabbaabababbbabbbababbabbb +abbbaababbaabaaaaababbbaaaabbbaa +aababbbaaaabaabbbbabaaaa +aaaaabbaaabaaabbbababaaa +bbbababaaabaaaabbabbabaabbababababababbbabbaaaaabbababbabbbbabbbabbbaabb +bbbabababbbabababababbbb +bbaaababbbabbbbaabbbbbaa +bbababaabaaaabbaabbbbaaa +bbbbabbababbbbaabbaaaababbababbaabaaabababbabbabbbbbbaababbbbabbbbaaaaabbbaabbba +abbabbabbbbbbaabaaaaabababaaaaabaaabbaaaabababba +bbbabaabaababaaabaabbaaa +bbababbbbaaababaaaabbabbaaabbbaa +aabbbbababaabbaabababbaa +aaabbabbbaabbbabbbbbbbbabaaaabbaaabababaabaaabab +aaaaaaababbabbabbabaaaaa +aababaaaaaababbbabbabbabaaababbbbbabbababababaaaabbabbbb +babaabbbbaaabaaabbbabbab +bbbbabbbbaabbbabbbaabbbaabbbbbaabbbbaaabbbbaabbbbaababbaaaabaaaabbabbabbabbaabbb +aaabbbabbaaabaabbaaaaabaabababab +abbababbabbbbbabbaabbbabaaababbbbbbbabaababbbbbabababbbb +bbaabbbaaaaababaaabaaaabbbbbbaabbaaaabbaabaaabaabaaaabbabbabbbaabbaaaaaa +abbabbaaaabaaaabbbbbbaabbabaababbbbabbba +bbaaaabaabbababbbbaabbaa +aabbaabaabbaaabbaaabaaaaaaababbabababbaa +baaaabbaaaaaabbbbabbababbaabbbbabbabbabbaabbaabb +babbaaaabbaabaaabbbbaaaabbbabbaaaaaaaabb +aaaaababaaabbabbababbabb +abbabaaaaaabaababbabaaab +aaabaababbaabbbaababbabb +babbabaabaababbabbabaabb +abbabbaabbabbbabababaaaa +bbabbbaaaababaaaaaabbbaa +bbbbbbbaaaaaabbabbbaabaaaaabbaaa +bbbaabaababaaabbaababbabaababaabbbababba +bbaaabbaabaabbbbbbbaababbbaabaabaaabaababaaaaabbbaaabaababaaaaabaabbbbaabaabbbaa +baabbababbaaaaababaabbabaabbbaabaabbaabbabbbaaababbaaaab +bbabaaaaaaaabababaabbababbaabbbbabbbaaababbaababaabaaaaaaaabaabb +baaaaaabbaababbaababaaaa +bbbabbbbbbaabaabbaaabbab +babbbabababaaaabaabbaaabbbabaabababbbaaabaababbbbbaababbbabbbabb +aabaaababababababaabbbababbababbbabbaabb +bbaabaaabbaabababbaababaabbabbba +bbbabaaaababaabbaabbabbbbabbaabaabbabaabbaabaabaabbaabbabaaabaaa +abbaaabbbbbbbbbbaaabbaab +baabbbbbaabbaabbaabbababbaabaaba +baaaabaaabbbbaabaabbabbbbaababbb +abbbbbbaabbbbbbbbbbbbaaaaaaabaaa +abbbbbbbbbabbbaabbbaaabaaabababa +aababbbaabbabaabbabaaaba +bbabbaabbabbabaaababbbba +aaabbbabbaabaabbbbbabbbbaaaaabbbbabbbabababbbaaa +aaabaabbaabaababaabababb +bbababaaabbbaabaabbababa +baabbbaaaaababababaabbaababbabbb +babbbaabbaaaabbaababbabb +bbababbbababbbaabbabbbabaabababaaabaaaaa +babbbbbbbbabbbababbbbaab +abaabbbbbabbbbbbaaabbaba +bbabbbaabbbbbaaabbbaaaaa +abbbbbbbbaabbbaaabbbbbbabaaaabaaaaaabbbb +aabaaabababbbbbbaaabbaab +bbbabababbbbbbabbbbbaabaabababbaaabbbbbb +aababbbaaaaaaaaaabbaaaaa +ababaababaababbbabbbbabaaabbabaaabbabbaabbaaaaaababaabba +aabbaaabaabbbaabaabaabbbaaabaaab +aabbaaabaaaaabaaaaabbbabaaabaaaababaaaaaabbbbbaaaababbaa +babbbaabaabaaabababbabaababbbaabbabaabbaabababbababaaaaa +aabbbbabababbbaaaaabaabbbaabbabaaaabababaabaaaabaaaababaabbbabbaabaaabbb +bbbbbbababbbabaababbabaabababababaababbabbbbbbbabbaaabbb +bbabababaaababbabbababba +abbbbbbabbbbbbaaabbbaabbbbabaabaaaaaaabb +aaaaabbbbaaaabbabbbabbab +aabbaaabbbbaaaabbabababbbabbaabbbbababbbbaaabbbababaabbbaabaaaaababbbaaa +ababbbabbbabbbaaababbbbbaabbabbaababbaaa +abbabbababbababbbbbbabbb +aabbaabaabbabbabbaabbaab +baabbbaaabbababbabbaaaba +baaabbbaaabbbabbbaaaaaaa +bbaaababaaaaabaabaaaabba +aabaaabbbbabbaabaaababaabbbbaabb +bbbbabbaaaabbabbaabbabab +aabaaaabbaaaaabababbabba +bababbbabaabaabbaaaabaab +ababaaabbbaabaabbbaabaaababaabbbabaabbaaaabbbaaabbbaabab +aababaaabbbbaaaaaaabbbbb +abaabbaabbbbbaaaaaaabaaa +babbbabababbaaaabaaaabab +abbbbbabbabbaaaababbaabb +bbaaaaabbbbababaaaaabaab +bbaababaaaabaabbabaabaab +bbababbaabbbbabbbaaaaabbabababba +bbabbaabbbbbabbaabababbbaabbbbbabaabbaaabbbabbbabaabbaab +abbabbaabbaaaaabbbabbbaabbbabaaabbaaabbbaaabaaab +aaababbababbabaabaabbbababbabbabbbaababaabbbabbaabaababa +baabbaabbbabbababbaaaaaabaaabbab +aabbabaabbbbbbbbbaabaaababaaaaaa +abbaabbabaaaaabaabbbabaabaaabaabaabaabbbaabaabaaaabaaaaa +baaaabbabaababbababbbababababbbb +bbabbaabbaaabbbabaaabaababbbbbbabbaaabaa +baabbbbaabbbbbbabaabbaab +baaaabbaabbababbaababbababaaaabbbbbbbabababaaaba +baabbbbbaabaabbbbbabbaaaabbaabbaabbbbbabbbbbbaba +babaabbbbbaabaaaabaababbabbbbabbbbbaaaaa +baabbababbaababaabbbaaab +bbaaaabbbaaaaaabbbabababbaabbabbbaaabbaaababaabb +abbbbbbaaababaaababbaaba +baabbabababababaaaaaababbababbbabaabbbaaabaaabab +aaaaababaabaabababbbbbbbabbbaaba +bababaaabbbaabbabaaaaabb +aabbaababbabbbbabbbaaaab +bbbbbbbbaabbbabbbabbbbba +aabaababbaabaabbbbaaaaababaaaaabbaaaaaaa +aaaaaaaaaaaaabababbbbbbabbbaabab +bbbaabaaababbbaaaabaaababbababbbabaaabbaabaaaaaa +ababbabbbbbbaabbaaabbaaabbaaabbaaaabbbba +baabababbbbbabaaababbbaabbaaababbbbaaaababbabbbb +bbaabbbaabaaabaaababaabb +bbabbbaaabbaabbbaaaabbaa +bbbabaabaaaaabaaaababaaaabaaabaaaaaaabbaabbaabbabbbbbaba +baaaabbaabbbaabaabbabbaabbbaaabaaabbbbbaaaaabaab +bbabbabbbbbbbaabbbababbbbbaabaaaaaabbaaa +abbbbbbbabaaabbbabbaaaabaaabababaabaabababbbaaaaabaaaababbababbabbbbabbb +baabbabaababbbaabbababba +bbaabbbaaaabbbbaaabaabaa +baabbabaabbbbbabaaaaabaababbbbaaabaaaaaa +baaabaaabbbababbababaaabaababbaa +aaababbabbaaaaabbaabababbbabaaba +aabbbaabaabbaaababbbaabb +bbbbbbbbbaabababaabaabaa +ababbaaaaabbbbbaaaabbaabbaaabaaabaabbaabbabbbababbbbabbabaaaaaababaaaaba +baaaaabaaaaaababaabbaaaa +aaaaaaaabbabababaaaabbaa +aababaaaababbbaabbbaaaaa +aaaaaaabbbaaabababbbaaab +aaababaaaabbbbababbaaaab +aaababaabaaaabbaabbaabab +bbaabaaaaaabaabbbabaaabbababaaba +ababaaabbaaaabbabbaabaaaabbababbaababaaababaabbbbabbabbb +aaaaaaabaaababbbbbaaaabbbbabaaaabaaabbabbaabbbab +abbabaaaabaaabbabbabbaaaababbbbbbbbaaaaa +abaaaaababbbbbababbbbaba +abaabaaaaabbbbaaaaaabaab +babababaaababaaaabaababa +bbbaaaaabbbbbbaaaabbaabb +aababaaaaaaaabaaabbbbaab +ababaaabababbbaaaaaabbab +baabbbabbbaabbbaabbbaabb +baabbbbaabbbaababbababba +bbbbabaaaaaababbbaababaa +aaaaabbabbbaabbaabaabbbaaabababababbbbba +baabaaabbbaabaabababaabb +aaabaaaaabbabbaabaabaaaa +aaabaabaabbabbabbabaabab +babaabbbbaabbbbbabaaabbabbaabaaabbababbababbbaaaababaabb +baaabaaababbabababbaaabbbaabaaabbaabaaaa +baaabaabbbababbbabbbbbabbabbaaab +abbabaaaaabbbbbababbaaaaaaaaababbabaababaabbbbbb +abbbbbbaabbbbaaababaabaaabbbbabbabbbbababbababbababaaaabbbaaaaba +aaabaabbabbbabaaabbaaaaa +bbbbaaabbbbabaaabaaabbbb +babbbaabbaabbbbbaaaabaaa +aaaaabaabaabaaabaabbaababbaababb +baababbbababbabbbbbbbaabaaaaabbababbbbbabaaaababbbbbbbbbbbaaaaabbabaaaabbababbab +baabaabababaababaaabbaaa +aababbabababaaababbabaaabbababbaabaababa +bbabbbabbabbbaababababba +abbaabbbaababaaaabbbabab +aaababbbabaabbbbbbbbabbb +aabbbbabbaaabaaaabbbaabb +abbbbbaabbbaabababaabaabababbaba +aaababaabbbbaaaababaaabbbaabbabbaaaabbaaababbaaa +bbaaaabaabbabaaaaabbaaabbbbabbab +aaabbababbbbababbbbbaaaababaaaaaababbaababaababbaababbbaaabbaaba +abbaabbbbabaabbbababbaab +baabbbbbbbaaabbbbababbbbbbaaaaaaabbbbbaaabaababa +aabbbbabbbbababbbabaaabbbabbbbbbbaaaabab +baabbbaabbabbbbababbbbaa +babbbbbbabbbbbbbaaabaabbbbbbbbbabbaaabaa +bbbabaaabbbbbaaaaaabbaab +abbbbbababaaabbaaababbbabbaaaaabaaaaabaabaaaaabb +bbabababaabbbaabaaabbbbabaaabbab +aaabbbbabbbbaaabbbbabbbbbbbbabbbaabababb +baaaabbaabbababbbabaaaaa +baababaabbaaaaabbababaabbbababbbababbbbabbabbaabbaaaabbabbaaabbbbbabbabbabbbabab +aaaaaaaaaabbbbababbbbabb +abbaaabbbaaaaaabbababaab +abaabbbbbaabbabaaaabababaabbababaaabbaab +aaaaabaabaababbaabbbbaba +bbbbbaaabbabababbaabbabaabaaaabaaabababb +aaaaabbaabbabaaaabbabbbabbbaaabbbaabaaaabbaaaaaa +aaabaaaaaaaaabbaaabaaabbbaabbbabaaaaabbbbabaaaaa +abaababbaababbbbaaabaaaabbbbbbbaabbaabaa +abaaabaabbbbbbabaabbbabbababaaba +bbabbaaabbaaaaababaaabbaaabbbabbbbbbabbaaabbabba +aaaaaaabbaababababaabbaababbaaaabaaabbab +bbbbbaaaaaababbbbaabbaab +abbaabbbbbaaaabbbbbbaaaabaabbabbaabbbaabbbaabbab +aaaabbbababaababbbbaababaababbaabbbabaababbbaabbbbaabbbaababbbaa +abbabbaaabbbaababbabaaab +aaaaaaababbaaabbbbaababb +baaabbaabaaabbaaabbbabba +babbbaabbbabbaabaabbaabaaabababa +aaaababbabababbbababaaabbbabaababbaababaaaabaabaabbabaaabbbaabaa +aaaaaaabaabbabaaabbabbaaaababbbbabbabaaabaaabaabaaaabbbaaabbbaaa +abbbbbbbbbbbabbabbbbaabb +baaabbbaabaababbaaabbaba +bbbbbbabbabbbabbaabaababbbbaabab +aaaaababbbbbabbbababbaabbbbbbabbaabbbbbbbbaaaaaa +ababaabbbababbbbbbbaaaabaabbbaaa +aaaababbbbbbabbabbaabbaa +aaabaababbbababbbabbabbb +bbababaaabaaabbaaabbaaaa +aaaaababbbaabbaaaaaaaabaabbbababbbbaabab +aabbaabbbabaabaabaaaaaaaabaababbbabbbbbaababbabbababaabaaabbbabbaabaabbaaabbbbba +bbbbaaaabbabababbbaaaaaa +abaaaaabaaaaaaabaabbaaabaaababaaaabaaaaa +babbbaabababaaabababbaab +baaaaaababababbbbaabababbbbbbaabbabaaaabaaaaaabaaababbaa +aabaaabbaababbabbabaabbbaababbabaabbbbaa +ababbbbbabbbaabababbaaba +bbababababbbaaaaabaabbabaaabbabb +bbaabaabaabbbaabbaaaaaabaabbabbbabbbbaab +baabaabbaababbbabbbbbaba +aaaaabababaaaaababababba +abababababbbabbbbababaaa +ababbbaabbabbbbabbbbbbaaabbbbabaabbabbba +babaaaaaaaabbaaabbbaabab +abaaababaaaabaaabaaaaaaabbabbbaaaababababaaaababaaaababbbbabaabbaabbbbba +aaababbbbaaaabbbaaaaaaabbbbabbbaaabbbbaa +babababaaaaababbabaabaab +bbaabbbababbabababaabaababbbbabaabbaaaaababbbbab +abababbbaabbbbababbbaaaaaaabaaab +aabaabaaaaaababaabbaaaabaabaaaaaaaababaa +aabbbaabbbbbabaababbabba +abbbaabaaaaaaaaababbbabbbbaaaababbbbbababbbaaaaa +aaabbbabbbbababbbbaabaabbaaaabab +aabbaababbabbbabbbbbbaba +abbaabbabbbbaaaaabaaaabbbaaababb +aaabababbbbbaaaabbbababb +abbbbbbbaaabaababbababababaabbbaabaabaaa +bbbabababaabbababaabbbbabaababaa +bbbabbabaaaabaaaaabbaaababababababababaaaaaabbbbaaaaabaabbaababb +aabaaabaaaaaaaababbabbbb +aabbabaabaabbabbaaabbbbaaabaabaa +bbaaaabbbbbabaaabababbbaaabaaababababaab +bbbbbbbaaabbbbbaaaaabbab +babaabbbbaaabaaabbbababbbbbaabaaabbbbaba +bbaaaabbbbbbaaaaabababaaaaabbaaabbbaabba +bbabbbababaabbbbaabaaabaaaabbaaa +baabaabbabaababbbbaabaabbaabbabbabbbbababbaaabbb +babbbabaabbbaababababbab +aabaaabbabaaaaabbbaaaabbaaabbaba +aaaaabaaabaabbbbaabbbbbb +aaaabbbabbababaabaabbbaabbbbbababababababbbaaabbaaabbabaaababbba +abaaaabbabbbbbabbbabbbababbaababbbaaabba +abababbbbaabbbbbbabbbbbbabbbbbabaaaababbababaabb +abaaabbabbababbbabaababbbaabbbbababbbaabbbaabbaa +babbbbbbbaabababbbababaaabbabbaabaabbabbaabbbaaa +aaababbababaaaabbbbaaaaa +babaaabbaabbbbbaaaaababa +aaabaaaaaabbaababaabbabababbaaaabbaabbaa +abaabbabbbaababaabbbaabababbabaabbaaaababbababaaabbbabbb +bbbbababbbaabaabbabaaabbaababbaaabaaabbb +baabbbabaaaaaaabbaabbaab +bbbaaabaaaababbbababaabbbbbbbaabbbbababb +babbaaaababbabbaabababbbababbbabaaababaa +aaabababaabbabaabbbabaaababbbbab +bbbbababbbabbbababbababbbaababaababaabba +bbbababababbbbbbabbbaaaaabaabbba +aabaaabbabbbbbaaabaababaabaaabab +bbabbabaabaaaaaababbbbaa +abaabaabaaaaabaabbbbbabababbabbbaabaabaa +bbabbbaababbbabbaabbaaabbabbabaabaaabaaababaabaabbbabbababbbbabbbabbabbabbaabbbb +aaaaabaababbababababbbbbaababbabbbabababbbbbabbb +abaaabbabbabbbaaaabababb +abbbbbababaaaaabbabaaaaa +bbbabbabaaabbaabbaaaabaababbaaab +bbbbbbbbabaabbaaaabbbaaa +baaabbbaaababbbbabbbabbbabaabaabaababaab +aaaababbbbaabbbaaaaababbbabbabba +bbabbbaaababaaabbbbbbbbabbaabaababbabbba +aaabababbabbbabaaabbabaaaaabbaba +aabaabbbbaabbbabaaabbbbabbbbabbb +bbbbbbabababaaababaabbbbaabbaaaabababbbb +abaaaabbaaabaabbbbaaababaaabbaabaabbbbbb +baabbababbbaaabaababbbba +baaabbbabababbbaabbaabab +babababaaaabaaaabbbbabbb +babbababaaabbbbabbbaabaabaabbbbbaaabbbab +baabbaabbababbababbaaaaa +bbababbbaaaaaaaabaabbbbaaaaabaaa +abbbaabbbbbbbbaabbabbbabbbbbabaaababaaab +bbaabbbababaabbbbabaaaba +baaababababaabbbbbabbaba +abababbbaababbbbabbabaabbaabbbaaabbbaabaabbbbaaa +bbaaaaaaaaabababbaabababaababbbbbbbbabaaaaabbabbbbbbbbaabaaaaabbbababbaaaaababaa +baaaaabaaaaaaaaaabbabbba +baabbbbaabaabbabbaaabbbb +abbabbabaabbabaaaabbabab +abaabbbbbaaaaababbabaaba +bbbbbaaabbaabbbaabaaabbaabaaaaabbaabababaabbabbbbabbaabb +babbbabaabaaabbaabbbbbaa +bbabbaabbabbabaabbaaaabaaaabbaab +aaaababaaabaaaaabbabbabaababaabaaabbabbb +abbaaabbbbababaabaaaabaa +baabbbbabaabaabbbaabbaab +baababbabbbabaabaaabaabbbaaabaaabbbbbaba +bbbababbaabbbabbbbbbbbaa +bbbbbbabbbabbabbabbaabbbaaabaaab +bbbababbababaaababaaabbabaababbb +baabaabbaabbabaabbbaaaab +bbaaaababbabababaaabaaaaaaabaabaabbbbaba +bbabbaaabbbbbaaabbbaabab +ababaaababbabababbaababb +aabaaaababbabbabbabbbbaa +aaaabaaabbaabbabababaaaaabbbabbb +abbbabaabbabbbaaaabaaababbabbabbbbaabaababaaabbb +bbaaaabbaabbaaabaaaaaaabaaabbbbaaabbaabaaababaaabbaaabaa +babbbabbaaabababbbabaaab +abbabbabbaabbababbabbbbaaaaabbbabbababba +abbaababbbaabbababbbabbaaabbbbbaaaabababaabababbbbaabbbaabbabaabbbbbabbaabaaaaab +babbbabaababbbabbbbabbba +baaabaabaaaaaaabbabaabba +baabaabbbaabaaabbbabbaaabaaaaaabbbbbaabb +bbababbbabaaaabbbababaaa +baababbaaaabbbbaabbababbaabbaabaabaabbbabbabaaab +bbbbbbaaabbbababbaababbbbaaabbaabbaababb +bbabbaaabaabbbaababbaabb +ababbbababbbbbbbababbabb +babababababaaaaaaaaababababbaaabbabaabab +abaaabaaabbaabbbbabbaaba +aaaababbbabbbbbbbbbaabba +babbbabaaababaaabaaababb +ababbbabbbabbabbbbababaaaaabbbaa +aaaaabbbaabbaababbbbbbbbbaaaabbbaaaaabaabbbbaabaaababbaabababbabbabbabbb +abbabaabbbabbbaaaaabaaaabbbbbaaa +bbbbabbaaabaabbbaabababb +bbbabbaabbbaabaaabaaabaabaaaaaabaabbbbaa +bbbababbbabaaaabaaabbaba +abbababbabaababbbaabbabaaaabaabbaaaabaaabbabbbbbababababbbbaabba +aaabaaaaaababbbaabbaabab +abaabbaabaaabababaaabbbababbbbab +aaaaabbbbbababbbbabaaaaa +aabaaabaaababaaaabaabaaa +aabaabababbbaaaabaabbaaa +babaabaababaabbbbbababbbaaababbaabbabaabbabbbbabbaabaaba +aabaaabaaaabaaaabbaabbbb +bbbbaabaabaaabaaaababbbabaabbaab +bbabababbbabbbbaabbbbaab +baabababbaabbbbbbaaabbbabbbabbbbbabaabbababbaaabaabababa +abbbabbbabbabbabbaaaabaabbbbbaaaabaabababaababaaaaabababaababbba +baabbabbbaabbbbaabaabbabaababbaa +abaababbaaaaabbbaabbbaabaaababbbbbaaababaaaaababbabbaabb +bbbabbbbababababaaabaaabbaabbabaabbabbbbaababaaaabbbabbbbbbabbbbaaaaababbaaaaaaa +aababbabaabababaaababbabbaaaaaaabbbbbbaabbaaabbbbbbaabbb +ababbbabaaabaababbbaaabb +abbbbbbaabbbbbbbbbababba +bbabbbbabbabbbaaabbabaababbbaaaaaabbaaaa +bbaabaababbbbbbbabaabaab +aaaaabbabbbbabbabaabbbbbbabbabaaababbabbaabbaaaa +abbaabbabbbbbbbbabababba +abababbbabbababbabbabbaabbbbaabb +baaabaaaaaaaabbabaaababb +abaabbbbbabaaaabbaaaabaa +bbaabaaabbaabaaaabbbbbaa +baabaaabbbbbbbbabbababaaabbaaaab +bbaaabababbaaabbaabaaabbaabaabbabaaaabaa +aababbbbbbabbabbbbabbbbaaabababb +abbbabaabbaaaaabaaabbaaa +abbbaaaabaaabaaaaaaaaaaabbaabbab +aaabaaaabbbbbbbaabbababbbabbbabaabbabbaabbbbaaaabbbaabbb +aabbaaabbbabbabbbbbaabaaaaaaaabaabbbaabb +babbbbbbaabbabaabaaaabab +aaaaabbbaaaaabbaaababbbaabababab +baabaabbbbbbbbbabbaabaaababaabab +aababbbbaaaabbaababaaaaabaabbbabbbababaaaabaaabbaaaabaabababbbabbabaabbabaabaaaa +aababaaaabbbababbbaabaabbbbababbbbaaabababababba +bbbbbbabbabbababaaaaabaabaabbbaabbaaabababbaaaab +abbaabbbaabbbbabbbabbaba +bbaababaabaabbbbbabababb +aabaabbbbbbbbbbababbababbbbbababbabbaaab +bbabbaabaabbaabababaaaabbabbaaaaabaaabab +babbaaaabbabbabbabbaabab +bbbababbabbababbbabbaabb +aaababbabaaaaaababbbabba +babaabaabaaababaaabaaabaaaabbabb diff --git a/2020/input/2020/day20.txt b/2020/input/2020/day20.txt new file mode 100644 index 0000000..bec36b2 --- /dev/null +++ b/2020/input/2020/day20.txt @@ -0,0 +1,1728 @@ +Tile 2411: +.#.##..#.# +.#.......# +.##...#.#. +......#... +#.#....... +##.....#.# +#..#...#.. +##........ +##....#... +##..#.##.# + +Tile 1997: +#.#......# +.#......## +#.##..#..# +...#..#.#. +.#.#...#.. +#......... +..#..#.... +#.#..#.##. +#..##..... +#...#.#.#. + +Tile 1427: +#...#..#.. +..##.....# +..#...#### +#..#.#...# +..#.#.#..# +..####.... +#.#.###.#. +......#... +#......... +#.#.##...# + +Tile 2161: +###.####.# +#....###.# +#.#......# +..#....#.. +...#.....# +.#..#...## +#.#.....## +#..#...... +.....#.#.. +...###.#.# + +Tile 1321: +###...#.#. +.#...#..## +.#.......# +.......... +#.#....... +....#..... +######.... +#.....#... +##.......# +#.###..### + +Tile 1181: +.#..#..### +###...#.## +#......... +....###..# +#.#...#..# +#....###.. +##..##...# +#....##.## +#.......#. +###.##...# + +Tile 2749: +#####..##. +##........ +......#.#. +#..#...#.# +.....##.#. +.....#...# +#......... +#........# +....#..#.# +.#..#...#. + +Tile 3911: +##...##### +#...#..#.# +.##...#..# +#...#..... +#..#.#...# +..#......# +#.#....... +....##..#. +..#.#..##. +####.#..#. + +Tile 3257: +#..#.##... +.#.....#.# +##.#.....# +##.#.#.... +#..##..#.. +........## +#.##...#.# +#.#..#...# +........## +.##.####.# + +Tile 2237: +.###.##### +....#....# +.......### +#........# +..#....... +.#.#...... +#...##...# +#.....#.#. +#...#..... +####.##### + +Tile 2389: +#.#.###... +#.#.#...## +......#... +.####....# +..#..#..#. +#.......## +..###....# +#........# +#....##... +..#.#..##. + +Tile 3209: +..##.##### +.........# +##..#.##.. +...#.#...# +....#.#..# +#...#..... +#.#.#..... +#...#....# +#.#......# +...#..#### + +Tile 2579: +#...#.##.. +....##.### +#......### +.......#.. +##...#.... +#.#......# +.##.#....# +.#.......# +#...#..... +##..#.##.. + +Tile 2087: +.###.##.#. +.##...##.# +..####.#.# +...#...... +...#...... +......#..# +#.##...... +.#.#.#.#.. +....##..## +...##.#..# + +Tile 3517: +###.#...## +#......... +#.....#... +###..#.#.. +##......#. +..#....#.# +#.....#... +..#...#.## +##...#.#.. +##..##.### + +Tile 3347: +##.#..#... +.........# +.......... +.#.#.....# +.......... +....#..#.# +#........# +##.#...#.# +....#..#.. +##.#.#.... + +Tile 2711: +.##.#.#... +...#.#.... +.......... +#......### +..##...... +#......... +#..#..##.. +.##...##.. +#......#.. +#..#.##.#. + +Tile 3877: +###.#..#.# +#...##...# +..#.#..#.# +##......## +.#........ +##..#....# +..###..#.# +#.#....... +#.#......# +...###.### + +Tile 1721: +###...##.# +......#..# +.##.##.... +....##.#.. +##..#..#.. +###..#..#. +####..##.# +#.#.#....# +.......#.# +#..##....# + +Tile 3457: +.#.#..##.# +..##.#.#.. +##...#...# +...#...... +..#....##. +#...#.#..# +..#....... +...#...... +........#. +.#.#.##..# + +Tile 1231: +.#.......# +#........# +#..#..#... +..#......# +.....#.... +#......... +#...#..#.# +.....#..#. +.#.#....#. +###...##.. + +Tile 1901: +.###.#.#.# +...##..... +#......#.# +...##..... +....#..... +#......... +..#......# +##.....#.. +#......... +#..##..### + +Tile 3329: +#..#..#.#. +....#..... +###.....## +.........# +##..#..... +#.......## +#..#.....# +#..#.#..#. +...#...... +...#...##. + +Tile 1291: +..#....#.# +#.#...##.# +#..#....## +#..###...# +#...#.#... +####...... +#.....##.# +#.#..#.... +##....#..# +#.###.#... + +Tile 1481: +#..#...##. +....#..#.. +...##..... +#..#..##.. +###.#..##. +##.#.##... +#..#.....# +#......#.# +#.#....#.. +.#..#..#.# + +Tile 2063: +.###..#..# +...#...... +#..#.....# +#..#..#... +.....#.### +...#...... +#.#.....#. +#........# +.#...#...# +##.#....## + +Tile 2297: +.#..#..#.# +#..#...... +#......#.# +#.#..###.# +.......... +##..#.#.## +#......#.. +#....#.#.# +#........# +.#..###... + +Tile 2731: +..#....... +......#... +#..#...#.. +.......... +#..#...#.. +#.#..#..## +##..#..##. +.......... +#.##..#... +##....##.. + +Tile 1453: +....#.##.# +#..#..##.# +##.#.#.... +#..##.#... +#......#.. +#......### +...##...#. +#.##...... +##........ +#######.## + +Tile 1117: +.###.#...# +.#.#.....# +..#.#...## +#.......#. +#.....#..# +#.###....# +##.#...... +#.####..## +#..#..#.#. +##...##### + +Tile 1823: +#.....#... +#......##. +.....#.#.. +......###. +..#..###.# +....#.##.# +.##..#.#.# +#.#....... +##........ +.#...##..# + +Tile 3163: +..#####.## +...#...... +#..###...# +..##..#... +.#.......# +..#....#.# +###.#..... +#..#..#... +..##.#.... +.##.#.#..# + +Tile 2083: +#..######. +....##.#.# +.....###.# +#...#..#.. +#....#...# +...#...#.# +#..####... +#....#.... +#..#....#. +#....#.#.. + +Tile 2659: +#.###.#... +...#...... +#..#....## +..###.##.. +##.......# +#.......#. +#....#...# +#..#.....# +..#.#..... +..#..##.#. + +Tile 2113: +.##.###### +.......### +#....#.... +....#..#.. +#.##...... +####..##.. +.##..####. +...#....## +.#.....#.. +#.#.##..## + +Tile 3943: +###..#.... +.#.....#.. +#......... +##....##.. +#.#....#.# +#.#.#..... +#....#..#. +.##..##..# +....##.... +.#.#.##### + +Tile 3719: +#...#.#.#. +.........# +#.#....... +......#.#. +.#...#.#.# +.#....#### +##........ +.##..#.#.# +#......... +#.#.#....# + +Tile 1409: +####.##### +#....#.... +##.#....#. +#..#...... +#....#.... +#.#...#... +##.....#.. +#.....#..# +......#... +..####...# + +Tile 3547: +.######### +.#.##...#. +...#..#.#. +#.##...### +#......#.. +##...#.... +##.#.#.### +##........ +.....#...# +###.##.##. + +Tile 1123: +...##....# +.........# +#...#...## +.......... +#......... +#......#.# +#..#.#.#.# +......#..# +#.#...#.## +####.#.... + +Tile 2203: +.####.#..# +##........ +##.......# +#....#.... +.#......## +.#..#..#.# +......#..# +##.###...# +#....#.... +.##..##.## + +Tile 3511: +#.#..#.#.# +#......### +#..#....#. +#.####.... +##...#...# +#.##...##. +##.##..##. +.....#...# +#...##...# +.#.#..##.# + +Tile 3499: +..#..#.### +#......... +..##..#... +...#.#.#.# +...#.#.#.. +#.....##.# +...#...... +..#...###. +##..###..# +#.#....### + +Tile 1039: +#.#....##. +#..###.#.# +###.....#. +##..#....# +.#....##.# +#..####### +.##.#....# +#..#...... +##.#...##. +#..#..##.# + +Tile 3323: +#..#.#.##. +#......#.. +.........# +.........# +.#....##.# +#.....#..# +#....##... +#...##...# +.###...#.# +#...###.## + +Tile 1033: +###...##.# +#..#..#.## +.........# +.#.#.#..#. +#......... +#......##. +#...#.##.# +.......... +###....... +.##.#..... + +Tile 2269: +....#.##.. +#........# +.#..#.#..# +#......#.# +#...#.###. +#..#.....# +....#....# +........## +#.#...#... +.#...#.#.# + +Tile 1279: +...##.###. +....#...#. +#..#...... +#......##. +.#.#....## +.#...##..# +..#..#...# +#......#.. +#..#....#. +.#.#...#.# + +Tile 2549: +..#..###.. +.......... +........## +....#....# +.........# +#...#..#.# +....##..#. +.#........ +..##..#... +##.##.#### + +Tile 2377: +..#.###### +..##..#..# +..#.....#. +#.#.#.#... +#....#.... +.......... +#..##....# +#...####.. +.......#.# +#.#.#..##. + +Tile 3169: +.######.## +#..#..#### +#.....#..# +#.##..##.# +....#...## +..##...... +#..#...### +.....##... +#......### +#.#....#.. + +Tile 1979: +###.#.##.. +#..#...#.. +#..#..#.#. +....##.... +#.#....... +#..#.....# +....#..... +.#..#..#.# +#.#.###..# +#.####.#.# + +Tile 2131: +..##..#.## +##...#.... +#...#.#..# +.....#...# +.#.#.#..#. +##......#. +......#... +#..##..... +.###...### +#...###### + +Tile 2531: +.#.######. +....#..#.# +...###...# +.........# +#....#.#.. +.....#...# +#...#....# +....#..... +..#....... +.....#.##. + +Tile 3167: +####.###.. +#..#.....# +#.......## +##..#..#.# +#......... +#.....#.#. +##.......# +...#.#.... +.........# +######..## + +Tile 3191: +#....##### +#...#..... +..##...#.. +#.......#. +#..#.###.# +#####...## +#.#...###. +#.#..#.##. +#......... +#.##.##.#. + +Tile 3767: +#..#..#### +#......#.. +#.#.##.... +.....#..#. +.#...#.#.. +..#.#..### +..##...... +.###.##..# +.##....#.# +.##.##..## + +Tile 2633: +##...##.## +#....#..## +...##.#... +#.#.#..... +.......### +.#...#.... +#....#.### +.#.....#.# +##....#... +....#..##. + +Tile 2677: +...#.##.#. +......#... +.....#.... +#......#.. +#...#.###. +..#....#.# +.........# +#..#...#.# +#.#....### +#.#..#.... + +Tile 3989: +.###.###.# +#.#..#..## +......#.#. +...#...... +..####...# +....###.#. +#.###.#..# +....##.... +#......... +.#.##.#### + +Tile 2897: +####...#.# +.......... +#.#....... +#...#..... +......#... +##.###.#.. +.##..##..# +...##.##.. +...##...#. +.#.######. + +Tile 3803: +#.#..#.##. +###....#.. +#...#..#.# +.......### +#.....#..# +##.....#.. +##..##..## +.#....##.# +.###...... +#..#.##### + +Tile 1187: +.#.#####.. +.#.#...... +#.#.####.# +#...#..... +..#....... +.#.....#.. +#...#.#..# +#......### +#.##..#..# +#.##.##.## + +Tile 1801: +#.##...#.. +.##......# +#..####..# +#.##...#.# +#......#.# +.....#.#.. +..###...#. +..#.#..... +#...#.#... +#....####. + +Tile 2729: +.......#.. +#.#...#..# +..#.#..#.. +.....#.#.. +#......... +#.#..#.... +.#.......# +#.#....#.# +#.#...#.## +##.#.###.# + +Tile 2969: +.......#.# +##..#....# +#.....#.## +##.....#.# +#..#...... +.#.#.#.... +#....#.#.# +##......## +#......##. +.##.##.... + +Tile 3079: +...##.#### +.....#...# +.......... +..#.#..... +.........# +.#...##.## +.###.....# +..#.#..##. +#...##...# +.##...##.. + +Tile 3407: +...#.#.#.. +.#...##.## +##....#..# +.#....#.#. +.##.#....# +##......## +#...#...## +#..#.....# +#.....#... +##....##.# + +Tile 3389: +####.#..#. +#..##..... +##...##.#. +#......#.. +.....#..## +#...##..## +#...##...# +...##..#.. +....##..## +#.#...#... + +Tile 1663: +#...##.##. +..#..#.#.# +#.....#.#. +#......... +..##.##..# +.....#..#. +#....#.... +#.##...... +.##.#...## +.....#...# + +Tile 1787: +#..##....# +......#.#. +#......##. +#.#......# +#....#...# +#.#....... +.....#...# +#...#..#.. +.#......## +..###.#.## + +Tile 2917: +##.#.##### +#..#..#.## +..##..#..# +#..#.##.## +#.#..#.... +.#.#.##..# +.####..... +#..#...#.# +#...#....# +.#.#.##..# + +Tile 3067: +##.#.#...# +.###..#..# +.##.#.#... +#.#.....## +..#....... +#...#...#. +##..#....# +...##..#.# +#.......#. +.###...#.# + +Tile 2963: +.#..#.#... +#..#.##..# +##........ +..#....### +###.#.#... +.#.#.#...# +..#....... +.#.#.#.#.# +#........# +#..#.##### + +Tile 1753: +###.##.##. +#..#.#..#. +.....#...# +#......... +##.#..##.# +.#.#.#..#. +#......#.# +...#..#..# +#.#..#..#. +#.#..#.#.# + +Tile 1609: +..#.####.# +#........# +..#.##.#.# +......#.#. +.....#.... +#.......#. +.......... +#......... +#..##..... +##...#.#.# + +Tile 1237: +.#.##.##.# +...#.##... +..#......# +##...#..## +...#..#.## +.#.#####.. +...#.##..# +#....#.... +...#..#..# +#..#...##. + +Tile 2267: +.#..#..### +...#.#...# +..#..#..## +##....###. +......#..# +..#....... +....#.#.#. +....##...# +###.....## +..##...#.# + +Tile 1777: +...#...### +.......#.. +##.#..#..# +.........# +#....##.#. +#.#..##.#. +.#..##.#.# +....#.#.## +.###..#.## +......##.# + +Tile 1993: +..#.#..##. +#..#.#.#.. +.#.#...##. +.......#.# +###.#.#... +#..#....#. +#...##...# +#...##...# +......##.. +##.#.###.# + +Tile 3571: +.###.#...# +...##..... +##..#..... +..#...#..# +......#.## +..#.##...# +##.#..#..# +#.###...## +..####.... +..#.#..#.. + +Tile 3581: +#.#.#.#.#. +#.#....... +#.#....#.. +#.###...#. +#......... +.........# +.#.......# +##........ +#.##.....# +##.#..##.# + +Tile 2383: +#..##..#.. +..#...#..# +#...#.#.## +#.##.....# +....#..#.. +...#.##..# +...#.....# +..###.#... +....##..#. +#...###..# + +Tile 2591: +##...##.## +..#..#.#.. +...#.....# +#.###..... +.....####. +...###.#.. +..#....#.. +#......... +....##...# +###.###.## + +Tile 1153: +##.#...#.# +###......# +#....#.#.. +....#...## +#...#...#. +..##....## +#..#...#.. +#........# +.#..#.#### +..##..#... + +Tile 1489: +#.#.###..# +##.#.#..## +.#..##..#. +....#....# +#.#..#.#.. +.#.......# +#......#.. +##.....#.# +....##.##. +#....##### + +Tile 1193: +##..###... +##.#...... +......#..# +##......#. +#....##### +.#.#....## +...#..#..# +#..#...... +##....##.# +########.. + +Tile 1163: +##.....### +.#.......# +#...#.##.. +#..#...#.. +...##.#... +.........# +....#...## +.####.#... +#.#....... +.#..##.### + +Tile 2137: +##..#..#.. +.#.#...#.# +#........# +#......... +..#....... +#...#....# +..##.....# +#....#.#.. +..#......# +..##.##... + +Tile 1559: +#..##..#.# +.........# +#..##.##.. +#........# +#..#..#..# +....#...## +...#.....# +#......#.. +.#........ +###..####. + +Tile 2521: +.###..#... +#..#...... +....#.#.#. +#.....#.## +.#..#...#. +.........# +##...#...# +#...#..... +#..##.#.#. +##..###### + +Tile 1171: +..#####.## +..##.....# +.....#.... +#.#.....## +#.#...#..# +#.##..#..# +#####....# +#..#.##... +##.......# +#.#.#..... + +Tile 1361: +..##.###.# +.....##..# +###....#.. +.......... +#.......## +#..#.....# +#......... +.#.....#.. +.......#.# +..##..#... + +Tile 1259: +#.##..#### +#...#..#.. +..###....# +....#....# +...###.... +...#..#.## +#.#.##.... +##..##...# +##....#..# +#.###..##. + +Tile 1987: +##.###..#. +.....#.#.# +#......#.# +#......#.# +..#.#..... +.#..#....# +.####.##.. +..##.###.# +#........# +.....#.... + +Tile 2777: +#.#.##..#. +#...#.#..# +..#......# +...##..... +#.#......# +#........# +#....#.... +.......##. +.....#..## +#..##.#..# + +Tile 3673: +...###.### +###..#...# +.......... +..#.#.##.. +#.#..#.... +#......#.# +..##...... +.#...#.#.. +#......#.# +##..#..##. + +Tile 2819: +#.##.##### +#.....#.#. +####...#.# +.....#...# +#...#.#.#. +#..#...### +......#..# +....#.#... +.....#.#.. +..#######. + +Tile 1699: +###....#.# +......#..# +#......... +......#..# +#...#.##.. +...#.....# +.........# +...##..#.# +#......... +.#.....##. + +Tile 2351: +.#####.#.# +##....##.. +###...#.#. +..#.#....# +.........# +.#.#.....# +..#...##.. +#..#.#.... +........## +###.#...## + +Tile 1399: +.###...#.. +#.#......# +.##....#.# +...#..#... +#.#.#..##. +#.......#. +#....#..## +....#...#. +#.....#..# +..#..#.#.# + +Tile 3793: +##..####.# +.##...#..# +#.....#..# +#...#..... +.....#...# +.......... +#....#...# +...##..#.. +.#..##.... +....#.#.## + +Tile 3701: +.....##.#. +#..#.##... +........## +.........# +#..##...#. +#...#.#..# +..#..#.#.. +#.....#### +#...#..##. +...#..###. + +Tile 2707: +#.###.#.#. +#......#.. +####...#.. +.......... +#.#..##..# +#####..#.# +#..#..#.#. +###......# +#..#..#.#. +....#.#... + +Tile 3559: +##.#.##.## +#....#...# +...##..#.# +..#.##.... +.....#.... +..##..#.## +....#..... +......##.. +...###.... +#.##...#.. + +Tile 2381: +..#...#.## +..#...#.#. +###...#... +##..##.... +....#.##.# +...#...... +.#..#....# +.......... +##....#..# +###.#.##.# + +Tile 1973: +.#...##... +#.#.#...## +#....#..## +#......### +......#..# +.........# +...##..### +.##..#..#. +#.....##.# +...##..### + +Tile 3607: +#..#####.. +.#.###.#.# +...##...#. +..#......# +.#.#...... +##.#....## +###....#.. +#...#...## +.#.....#.. +#####..#.. + +Tile 2251: +##..#..#.. +#........# +.........# +...#...#.. +#.......## +.#.#..#..# +.##.##...# +###...##.. +#........# +#.#..##### + +Tile 3947: +..#.##..## +###....... +#.#..#.... +#.#......# +#.#...#... +##.#.##..# +....##.... +...##.#... +#.#.....#. +.##.#####. + +Tile 3259: +.#.#####.. +.....#.#.. +##........ +.....#.... +#.#....... +.........# +......#... +......#..# +.##....... +#..#.##.## + +Tile 3761: +.#....#### +.##..#...# +........#. +###.#..... +#.....#..# +..##....## +........## +...#..#..# +...#.#.... +###.###### + +Tile 2473: +#..###...# +##.....##. +#..###.... +##....##.. +.....#.#.. +#.......#. +..#.....#. +......##.. +....#....# +#...#.#... + +Tile 2767: +##.##.#.#. +.#.####... +..##....## +#...#..... +..#..#...# +#......... +#........# +#...###... +#.#...##.# +.###..##.. + +Tile 2281: +#...#..#.# +...#...... +.........# +#....#.... +.......#.. +.....##..# +#.#....#.# +##..##...# +........## +#....#...# + +Tile 1693: +#.##.##### +......#... +#.#...##.. +....#.#.#. +#..#...### +##.##.##.# +..#...#### +#..##....# +#......#.# +#....###.# + +Tile 2417: +.###.##.#. +##...#...# +#..#..##.# +#...#..#.. +.........# +...#.....# +..##.#..#. +#......... +....##.... +#.##.###.# + +Tile 2879: +..#.#..#.. +..##..#.#. +##......## +#..##...## +#.##..#... +#.......#. +.......#.# +##..#..#.# +#...#....# +#....#.##. + +Tile 2851: +.......#.# +....#..... +##.###.##. +.......#.. +.#..###..# +....###..# +#..#...... +...#.#...# +.#.###...# +###.###.## + +Tile 3931: +.....##.## +###....#.. +#..#....## +#.#.....## +##...#.... +#..##..#.# +.......#.# +...#..#.## +.#...#.... +##....#.## + +Tile 3181: +...##...#. +....#....# +#......#.# +#.###....# +##.......# +.#..#.#..# +###..#.#.. +#....#.#.. +#.......## +###..###.. + +Tile 2647: +#..#..#.## +#........# +#..#..##.. +.....#...# +....##.#.# +#..###...# +..#......# +#.#..###.. +#.......## +####...#.. + +Tile 2441: +..#..###.. +##..###..# +##.##...#. +#.##.....# +.......### +...#...### +#...#..... +.#..####.# +.#.#.#..#. +#.#.##.#.. + +Tile 3733: +...#....## +..#..##..# +.....#..#. +##........ +..#....#.. +#....##.## +.#....#..# +.#.##.##.. +#.##..#.#. +.#..####.# + +Tile 1607: +#.#.#.#.## +#......... +.....#.... +.#.#..#..# +..#......# +#.....#... +#.#..#.... +......#.## +#.##...#.. +..#.###### + +Tile 3301: +....##...# +#..##....# +....#..... +#.....###. +#....##.#. +#.#...#..# +......##.# +...##..... +.........# +..#######. + +Tile 1109: +..#...###. +.#.......# +#.....#... +.......... +##.#.#.... +#...##.... +#.....###. +.#....#### +.#....#.## +###.#...#. + +Tile 2789: +.#.#.####. +.......... +#...#.#.#. +#..#....## +.....##... +.#..##.#.# +........## +#.#.#.#... +......#.## +#...#..#.. + +Tile 2593: +...#.#.#.# +#......### +..#.##.... +#.......#. +...#.#...# +#..##....# +#..##..... +#.##.#...# +#..###..#. +.#....###. + +Tile 2539: +...###..#. +.......... +.........# +.....###.. +.......#.. +......#.#. +.#..#...## +#....#.#.. +##...#.... +.###.#.#.# + +Tile 3307: +##.##.#... +.#..#..... +#..#..#..# +#.....##.# +..#.#..... +##....##.. +.....#.... +#..#.#.... +######...# +####.#.... + +Tile 1613: +###..###.# +...#...#.. +#.#..##... +......##.# +......#..# +..##...... +#.....#..# +##.#..##.# +###...#..# +#.#..##.#. + +Tile 3727: +..#...#.## +#.#......# +#.###...## +..####..#. +#......... +.....#...# +#..##....# +#.#.....## +#....###.# +..#..##.## + +Tile 2017: +#...##..## +#..#..##.# +#........# +.....#..## +#..#.....# +....#....# +#....#.... +.##....... +.......#.. +#..##..#.. + +Tile 1933: +###.#..... +#.#.####.. +..#..##... +##..###..# +###..#.### +..#.#....# +#......... +..#..#.### +#.#..###.. +...#.#.#.. + +Tile 2239: +.#.#..#.## +...#.##..# +#...#....# +#..#...... +#....#..#. +#..##..#.# +..#.#.#..# +#....#..#. +#...#.#... +.#.##.#### + +Tile 3449: +.##...###. +..#......# +.......#.# +..##...... +#.###.##.# +....##.#.. +........#. +##.#...... +...#.#.... +..###....# + +Tile 2347: +..##....#. +#......... +.......... +....#.#..# +.........# +##.##.#..# +......#..# +.#.##...#. +#.#####.## +.#.#....## + +Tile 3023: +#...#.##.. +.......#.. +#.#..#.##. +#...#.#..# +..#.#...## +#.##...##. +......##.. +.....##### +.#...##... +#..#.#.... + +Tile 3541: +###.###### +..#.....#. +#....###.. +......#... +..#..##..# +#........# +#..#...... +###..#.##. +..#....#.# +#..###.#.# + +Tile 3709: +##.#.##..# +#......... +.##.##...# +.#..#.#..# +#.......## +......#... +.#..#..... +.......#.# +#..##....# +.##....... + +Tile 1657: +#.##.#...# +...#.#..#. +.....#..## +.....#.#.. +######.### +##........ +......#..# +#..#...#.. +.......#.. +...#....#. + +Tile 1031: +####.#.##. +.......... +.#...#..#. +...#.....# +.##.#....# +....#.##.. +........## +#..#..#.## +#.##.....# +#.####...# + +Tile 3691: +.#.####### +........## +#.#....... +#..##..#.. +#.#.##.##. +....###.#. +.#..#..#.. +..#.##.#.. +.....#.... +##.###...# + diff --git a/2020/src/day20.rs b/2020/src/day20.rs new file mode 100644 index 0000000..b06f315 --- /dev/null +++ b/2020/src/day20.rs @@ -0,0 +1,404 @@ +//! --- Day 20: Jurassic Jigsaw --- +//! The high-speed train leaves the forest and quickly carries you south. You can even see a desert in the distance! Since you have some spare time, you might as well see if there was anything interesting in the image the Mythical Information Bureau satellite captured. +//! +//! After decoding the satellite messages, you discover that the data actually contains many small images created by the satellite's camera array. The camera array consists of many cameras; rather than produce a single square image, they produce many smaller square image tiles that need to be reassembled back into a single image. +//! +//! Each camera in the camera array returns a single monochrome image tile with a random unique ID number. The tiles (your puzzle input) arrived in a random order. +//! +//! Worse yet, the camera array appears to be malfunctioning: each image tile has been rotated and flipped to a random orientation. Your first task is to reassemble the original image by orienting the tiles so they fit together. +//! +//! To show how the tiles should be reassembled, each tile's image data includes a border that should line up exactly with its adjacent tiles. All tiles have this border, and the border lines up exactly when the tiles are both oriented correctly. Tiles at the edge of the image also have this border, but the outermost edges won't line up with any other tiles. +//! +//! For example, suppose you have the following nine tiles: +//! +//! Tile 2311: +//! ..##.#..#. +//! ##..#..... +//! #...##..#. +//! ####.#...# +//! ##.##.###. +//! ##...#.### +//! .#.#.#..## +//! ..#....#.. +//! ###...#.#. +//! ..###..### +//! +//! Tile 1951: +//! #.##...##. +//! #.####...# +//! .....#..## +//! #...###### +//! .##.#....# +//! .###.##### +//! ###.##.##. +//! .###....#. +//! ..#.#..#.# +//! #...##.#.. +//! +//! Tile 1171: +//! ####...##. +//! #..##.#..# +//! ##.#..#.#. +//! .###.####. +//! ..###.#### +//! .##....##. +//! .#...####. +//! #.##.####. +//! ####..#... +//! .....##... +//! +//! Tile 1427: +//! ###.##.#.. +//! .#..#.##.. +//! .#.##.#..# +//! #.#.#.##.# +//! ....#...## +//! ...##..##. +//! ...#.##### +//! .#.####.#. +//! ..#..###.# +//! ..##.#..#. +//! +//! Tile 1489: +//! ##.#.#.... +//! ..##...#.. +//! .##..##... +//! ..#...#... +//! #####...#. +//! #..#.#.#.# +//! ...#.#.#.. +//! ##.#...##. +//! ..##.##.## +//! ###.##.#.. +//! +//! Tile 2473: +//! #....####. +//! #..#.##... +//! #.##..#... +//! ######.#.# +//! .#...#.#.# +//! .######### +//! .###.#..#. +//! ########.# +//! ##...##.#. +//! ..###.#.#. +//! +//! Tile 2971: +//! ..#.#....# +//! #...###... +//! #.#.###... +//! ##.##..#.. +//! .#####..## +//! .#..####.# +//! #..#.#..#. +//! ..####.### +//! ..#.#.###. +//! ...#.#.#.# +//! +//! Tile 2729: +//! ...#.#.#.# +//! ####.#.... +//! ..#.#..... +//! ....#..#.# +//! .##..##.#. +//! .#.####... +//! ####.#.#.. +//! ##.####... +//! ##..#.##.. +//! #.##...##. +//! +//! Tile 3079: +//! #.#.#####. +//! .#..###### +//! ..#....... +//! ######.... +//! ####.#..#. +//! .#...#.##. +//! #.#####.## +//! ..#.###... +//! ..#....... +//! ..#.###... +//! By rotating, flipping, and rearranging them, you can find a square arrangement that causes all adjacent borders to line up: +//! +//! #...##.#.. ..###..### #.#.#####. +//! ..#.#..#.# ###...#.#. .#..###### +//! .###....#. ..#....#.. ..#....... +//! ###.##.##. .#.#.#..## ######.... +//! .###.##### ##...#.### ####.#..#. +//! .##.#....# ##.##.###. .#...#.##. +//! #...###### ####.#...# #.#####.## +//! .....#..## #...##..#. ..#.###... +//! #.####...# ##..#..... ..#....... +//! #.##...##. ..##.#..#. ..#.###... +//! +//! #.##...##. ..##.#..#. ..#.###... +//! ##..#.##.. ..#..###.# ##.##....# +//! ##.####... .#.####.#. ..#.###..# +//! ####.#.#.. ...#.##### ###.#..### +//! .#.####... ...##..##. .######.## +//! .##..##.#. ....#...## #.#.#.#... +//! ....#..#.# #.#.#.##.# #.###.###. +//! ..#.#..... .#.##.#..# #.###.##.. +//! ####.#.... .#..#.##.. .######... +//! ...#.#.#.# ###.##.#.. .##...#### +//! +//! ...#.#.#.# ###.##.#.. .##...#### +//! ..#.#.###. ..##.##.## #..#.##..# +//! ..####.### ##.#...##. .#.#..#.## +//! #..#.#..#. ...#.#.#.. .####.###. +//! .#..####.# #..#.#.#.# ####.###.. +//! .#####..## #####...#. .##....##. +//! ##.##..#.. ..#...#... .####...#. +//! #.#.###... .##..##... .####.##.# +//! #...###... ..##...#.. ...#..#### +//! ..#.#....# ##.#.#.... ...##..... +//! For reference, the IDs of the above tiles are: +//! +//! 1951 2311 3079 +//! 2729 1427 2473 +//! 2971 1489 1171 +//! To check that you've assembled the image correctly, multiply the IDs of the four corner tiles together. If you do this with the assembled tiles from the example above, you get 1951 * 3079 * 2971 * 1171 = 20899048083289. +//! +//! Assemble the tiles into an image. What do you get if you multiply together the IDs of the four corner tiles? + +use std::collections::{HashMap, HashSet}; +use std::ops::Index; +use std::str::FromStr; + +use aoc_runner_derive::{aoc, aoc_generator}; + +#[derive(Default, Debug)] +struct Tile { + id: usize, + pixels: Vec, + width: usize, + height: usize, +} + +impl FromStr for Tile { + type Err = (); + fn from_str(s: &str) -> Result { + let mut it = s.split('\n'); + let id = it + .next() + .unwrap() + .split(' ') + .skip(1) + .next() + .unwrap() + .strip_suffix(':') + .unwrap() + .parse() + .expect("couldn't parse tile number"); + let rows: Vec<_> = it.collect(); + let height = rows.len(); + let mut width = 0; + let mut pixels = Vec::with_capacity(height * height); + rows.iter().for_each(|row| { + width = row.len(); + pixels.extend(row.bytes()); + }); + Ok(Tile { + id, + pixels, + height, + width, + }) + } +} +impl Index<(usize, usize)> for Tile { + type Output = u8; + + fn index(&self, (x, y): (usize, usize)) -> &Self::Output { + &self.pixels[x % self.width + y * self.width] + } +} +impl Tile { + fn border_set(&self) -> HashSet> { + let mut set = HashSet::new(); + set.insert(self.top_border()); + set.insert(self.right_border()); + set.insert(self.bottom_border()); + set.insert(self.left_border()); + + let rev_set: HashSet<_> = set + .iter() + .map(|b| { + let mut b = b.clone(); + b.reverse(); + b + }) + .collect(); + set.union(&rev_set).cloned().collect() + } + fn top_border(&self) -> Vec { + (0..self.width).map(|x| self[(x, 0)]).collect() + } + fn right_border(&self) -> Vec { + (0..self.height) + .map(|y| self[(self.width - 1, y)]) + .collect() + } + fn bottom_border(&self) -> Vec { + (0..self.width) + .map(|x| self[(x, self.height - 1)]) + .collect() + } + fn left_border(&self) -> Vec { + (0..self.height).map(|y| self[(0, y)]).collect() + } +} + +#[aoc_generator(day20)] +fn generator(input: &str) -> Vec { + input + .split("\n\n") + .map(|s| s.parse().expect("failed to parse tile")) + .collect() +} +#[aoc(day20, part1)] +fn solution1(tiles: &[Tile]) -> usize { + let mut border_counts = HashMap::new(); + tiles.iter().for_each(|t| { + t.border_set().iter().for_each(|b| { + let c = border_counts.entry(b.clone()).or_insert(0); + *c += 1; + }) + }); + + let corner_tiles: Vec<_> = tiles + .iter() + .filter(|t| { + let matches: usize = t.border_set().iter().map(|b| border_counts[b]).sum(); + matches == 12 + }) + .collect(); + corner_tiles.iter().map(|t| t.id).product() +} + +#[cfg(test)] +mod tests { + use pretty_assertions::assert_eq; + + use super::*; + const INPUT: &'static str = r#"Tile 2311: +..##.#..#. +##..#..... +#...##..#. +####.#...# +##.##.###. +##...#.### +.#.#.#..## +..#....#.. +###...#.#. +..###..### + +Tile 1951: +#.##...##. +#.####...# +.....#..## +#...###### +.##.#....# +.###.##### +###.##.##. +.###....#. +..#.#..#.# +#...##.#.. + +Tile 1171: +####...##. +#..##.#..# +##.#..#.#. +.###.####. +..###.#### +.##....##. +.#...####. +#.##.####. +####..#... +.....##... + +Tile 1427: +###.##.#.. +.#..#.##.. +.#.##.#..# +#.#.#.##.# +....#...## +...##..##. +...#.##### +.#.####.#. +..#..###.# +..##.#..#. + +Tile 1489: +##.#.#.... +..##...#.. +.##..##... +..#...#... +#####...#. +#..#.#.#.# +...#.#.#.. +##.#...##. +..##.##.## +###.##.#.. + +Tile 2473: +#....####. +#..#.##... +#.##..#... +######.#.# +.#...#.#.# +.######### +.###.#..#. +########.# +##...##.#. +..###.#.#. + +Tile 2971: +..#.#....# +#...###... +#.#.###... +##.##..#.. +.#####..## +.#..####.# +#..#.#..#. +..####.### +..#.#.###. +...#.#.#.# + +Tile 2729: +...#.#.#.# +####.#.... +..#.#..... +....#..#.# +.##..##.#. +.#.####... +####.#.#.. +##.####... +##..#.##.. +#.##...##. + +Tile 3079: +#.#.#####. +.#..###### +..#....... +######.... +####.#..#. +.#...#.##. +#.#####.## +..#.###... +..#....... +..#.###..."#; + + #[test] + fn test_generator() { + assert_eq!( + generator(&INPUT).iter().map(|t| t.id).collect::>(), + vec![2311, 1951, 1171, 1427, 1489, 2473, 2971, 2729, 3079,] + ); + } + + #[test] + fn test_solution1() { + assert_eq!(solution1(&generator(&INPUT)), 1951 * 3079 * 2971 * 1171); + } +} diff --git a/2020/src/lib.rs b/2020/src/lib.rs index d89ce17..60aaaf7 100644 --- a/2020/src/lib.rs +++ b/2020/src/lib.rs @@ -10,6 +10,7 @@ pub mod day17; //pub mod day18; pub mod day19; pub mod day2; +pub mod day20; pub mod day3; pub mod day4; pub mod day5;