2020/19/1

This commit is contained in:
kageru 2020-12-19 12:32:28 +01:00
parent 022b2a447b
commit a1bf3c288b
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
2 changed files with 798 additions and 0 deletions

626
2020/inputs/day19 Normal file
View File

@ -0,0 +1,626 @@
25: 53 116
122: 116 92 | 53 53
100: 53 73 | 116 125
111: 67 116 | 91 53
71: 116 58 | 53 78
55: 116 54 | 53 21
123: 53 97 | 116 108
104: 56 116 | 125 53
19: 125 53
56: 116 116 | 116 53
60: 116 121 | 53 59
75: 53 20 | 116 124
6: 53 131 | 116 33
62: 53 53 | 116 116
101: 116 127 | 53 26
128: 116 125 | 53 93
34: 53 28 | 116 125
65: 63 116 | 135 53
50: 32 53 | 76 116
2: 53 10 | 116 132
133: 28 53 | 131 116
85: 53 131
125: 116 53
118: 87 116 | 3 53
135: 73 53 | 125 116
28: 53 53
110: 116 122 | 53 56
91: 5 53 | 74 116
73: 92 116 | 53 53
80: 15 116 | 109 53
124: 128 116 | 17 53
87: 92 53 | 53 116
43: 116 27 | 53 37
66: 46 53 | 93 116
106: 116 77 | 53 83
137: 72 116 | 104 53
93: 116 116 | 53 116
129: 92 103
12: 116 56 | 53 131
45: 53 132 | 116 12
102: 65 116 | 2 53
24: 116 101 | 53 95
14: 116 84 | 53 29
57: 93 116 | 56 53
70: 108 116 | 100 53
51: 116 1 | 53 68
26: 73 53
15: 116 93 | 53 125
42: 53 134 | 116 106
79: 116 33 | 53 122
5: 116 125 | 53 3
74: 53 122 | 116 73
18: 93 53 | 87 116
20: 47 53 | 17 116
114: 116 85 | 53 118
37: 53 73 | 116 87
47: 116 73 | 53 125
107: 116 3 | 53 46
69: 53 25 | 116 125
32: 53 28 | 116 93
76: 3 53 | 125 116
38: 92 33
119: 116 39 | 53 80
8: 42
21: 125 53 | 125 116
58: 75 116 | 119 53
64: 116 44 | 53 113
68: 90 53 | 45 116
1: 23 116 | 60 53
53: "a"
81: 73 53 | 33 116
86: 116 129 | 53 35
90: 110 116 | 13 53
82: 53 93 | 116 25
95: 99 116 | 66 53
27: 116 56 | 53 3
120: 116 51 | 53 40
126: 116 96 | 53 52
116: "b"
84: 116 123 | 53 49
134: 116 61 | 53 14
78: 116 102 | 53 86
96: 130 53 | 98 116
10: 87 116 | 33 53
88: 53 116 | 116 92
40: 126 53 | 24 116
127: 56 116
59: 87 53 | 3 116
11: 42 31
41: 116 137 | 53 16
44: 116 22 | 53 79
109: 88 53 | 87 116
49: 136 116 | 94 53
113: 107 116 | 81 53
77: 116 64 | 53 36
3: 53 116 | 53 53
9: 133 53 | 112 116
98: 92 93
117: 3 92
39: 53 19 | 116 21
16: 6 116 | 117 53
132: 131 116 | 125 53
63: 116 122 | 53 33
22: 131 116 | 56 53
89: 116 125 | 53 131
115: 55 53 | 50 116
99: 116 33 | 53 93
92: 116 | 53
121: 53 73 | 116 56
13: 73 92
103: 53 3 | 116 62
83: 111 116 | 41 53
61: 105 116 | 115 53
130: 56 92
136: 33 116 | 125 53
30: 53 76 | 116 7
94: 92 87
52: 97 116 | 18 53
7: 116 28 | 53 46
97: 25 53 | 33 116
35: 89 116 | 82 53
72: 53 131 | 116 87
48: 34 116 | 38 53
54: 116 46 | 53 131
131: 116 116
23: 116 4 | 53 57
31: 116 71 | 53 120
29: 116 30 | 53 114
108: 116 25 | 53 46
33: 92 92
4: 131 116 | 3 53
36: 70 116 | 9 53
67: 69 116 | 117 53
0: 8 11
105: 48 116 | 43 53
46: 116 53 | 53 116
17: 93 116 | 122 53
112: 122 53 | 3 116
babbbbabaabaaabbbbbaaabbbbababba
ababaaaaabbbabbbbbabbbba
aabbaabaabbababaababbaba
bbbbabaaabaaabbbbbbbbaab
babbbabababaabbaaaabbbba
bbaabbababbaaabaaaababbbabaaaaaaaaaaababbaabbbbaaaaaaabaabababbbbabbbaababbbaabbbbababab
babbabbabbaababbbbbbbaab
baababababbaababaaabaaab
aababaababbaaaabbbababbbbbbbbbaabbbbabbbbbabbababbababaabaabaaaabbabaaaaabbaaaaa
baabbbbaaabbabbbababbbba
baabbabaaaaababbaababbbbaababaaabbbbbaaabababaab
babbabbabaabbabbaabbabaa
baaabbbbabbaaabbaaaaaabbbbabaaba
abababbaaabaabbbabbbaaaa
ababababbbbaaaababaabaaa
baaababbbbbabababbbaaabaaaabaababaaabbbbaaabbbbaabbaabbbabbbaaab
babaaabaabbabaababbabaaaabbbaaaa
ababaaabaabaabaabbbbababbbaabababaababaaabaabbbb
abbaaaabaabababaabaabbaa
baaaaaabaaaaababbababaaa
aabaaabbababaabbbaaabbbbaabbbaaa
baaabbbaaaaaaaaaaabbbbba
abbbbbabbbbabaabaabbbbabbbaabaabaabbbbbb
baabbbababababbabbaaaaaaabbbaabbbababbbaababaaaaaabbbbaa
bbbbbbbbabababaabaaabbbabbaaabbbaaaaaabaabbaabbabbabbbba
abaabbabaabaaaaabaabaaaa
aabababbababaaaaabbbbbaa
bbbabbaaabaaaababababbbabbbaabab
aabababbaabbbababaabaaab
aabaaababaabbabaaabaaaab
abbbabaabbaabbabaaabbbba
baaabbbbaababbabbbbabbaabaabbbbbabbbbabbbabbaaba
bbaaababaabaaabbabbbbbabbabaaabbbbaabbbbaabbbaaabbabbabb
baabaabaaababbbbbbaabbaa
bbaaabbbbababbabaaaababa
bbabbbbabaaaaabbbaaaaababbbbbaaabaababbbbabbabaabaabbabaabbababbaaaaaaabbbabaaabbbbbbabb
abaabbbababaaaabaabbbbbbbbabbbab
ababaaaaabababbabbbaababbaaabbaaabbaaaba
bbabbaabababbabbbaaaaaabaaabaabb
baabaaaaababbbbabbabbabbbababbaa
aaaaaaaabaaabaabababaaba
baabbababaaabaaaaabaabaaaababbbbaaabbbbb
abaaaabaabbababaababbbab
bbaaabababbababbababbbbb
baababbaaaabababbaaaaaabbaaaabbb
bbbbbbbaabababbabbabbbba
bbaaaaaaaabaabbbabaabbaa
abbabababbaaaaababbbabbbbbaaaaaaababaaaababaaaba
abaababbaabaaaaaaabaaaab
abababaabbaaabbaabababbaaabbabaa
babbabbbbbbbbbbabbaabbaa
bbabbbaaaabaaababbaaababbaaabaabaabbbaababbaabaaaabbbaaaabbaabbbaabbbbba
abbbaabbababaaabbababbbaabbbbababababaaa
bbaaabbabbbaabaaabbbabaaaaababbbbaababbb
baabaaaabbaaabbaaabbaababbbbbbababbbabbbbbbabbba
abaabbbaabaababaaaabbabb
bbbbabaaaabaabbbbbbbbaab
bbaaaaabababbabbaababbab
babbaabaabbbbaaaaabbbbbb
baaabaabbbbbaaaaabbbaaab
aaabbaabbabbabbbbabbbbba
aabbababaabababaaabbabbbbbbbbbbaaaabbaaaababbabbabaaabaabbababaabbbbbabbbabbbbabaabaabaabaababba
ababaabbaabbbabababbabab
bbbabbbabaaabbbaaaabbbab
aabababbaabaabaaabaaabbbaabbbaaa
aaaaaabaabbabbaabbbbaaaaaabbaabbaaabaaaaabbbbaabaaaabbbaababbbbbababbaaa
ababaabbabababbabababbbaaabababaaabbbbaaaabbbabb
babbabbaabbabbbaababaaba
abbbbaaabbbbbbbabbababbbbaabbaab
babbaabaabbbbabbaaaaaaabaabbabba
bbaaababbaabbabbbbbbabbbbabbabaabbabaaaa
aaabaabaaabbababbababaab
bbaaabbbababaabbaabaaababaabbbbbbbabbaaa
abbabbbabaaabbbbbabbbabaaabbaabababbbbbaabbbaabababaabba
aaaaaaaaabbabbaabbabbbaaaabababbbaaabaababaabbaabbababab
aabbbabababbabaaaaabababbabbbbba
abbababbbbbbabbaaabbbbbb
bbbbbbbaabaaaaababbaabbb
aabababbabaaabbaababbaaabbbbababbbabbabbbaaababbabbbbbabaaabaabaabbabaabaaabbaaa
abbbbbabbbbbabaaabaabaab
abbabbbabbbbabababbbbbba
abababbabaaaaaabbbabaaaa
aaaaababbbbbaabbaaabaabaabaaabababbabbabbbbaabbb
baabbbbabbbaaaaababaaabb
bbaaaababbaaaabaababaaaaaabbbaabbbbabaaa
babbbbbbbabbbaaabababaabbabbbaabbbaaabaa
aabaaabbaabbaabbbababaab
baaaabbbbbabbbababbaababbabaaabaabababbaabaabbabbaaaaabaabbaaabb
abababbabaabbbbaaaaababa
aabbbbabbbbbaabaaaabbaabbbabaabababbbbaabbaabbabbaabbaaa
aaabaabaaabbababbabbbababaabbabb
bbbaaababbbbbbbbbbbababbabbbaaab
bababbaaaaaabbbbbabaaaab
bbaaaabaaaaaaabababbbabaaaaabaaa
aabbabbbbbaaababbbababaa
abbaaaababbbbbabaaaaabbb
bbaaaaaabbbaabababaabaab
ababaabbabaababbbbabbaabbbbbbbbbaaabbababbabbabbabbaabaa
bbaabbbaabababbaaaababbb
bbbbabbaaabaabaababaaaaa
bbaabbababbbbaabbababbbabbbbababbbbaaabbbaaaababaababbbababbaabb
bbaaaababababbabbabbbbaaabbbaaab
babaababaaabbaabbbababaa
ababababababbaabbabababa
abbabbbbaaaaaabbabbbabaababaabbaabbbababbbbaabaaaaaaaaabbbaabbba
bbbaaabaaaaaaaaaababbabbbbaabaab
abbbaabbabbbbaaaaaaabaab
abbbbbbbaaabbbbaaaababbaaaaabbabbababaabbbaabbabaabababa
aababbaaabaababbababaabb
babbaaabaabbabbbbbabbaaaaaaabaab
aabababaabbbbabbaaaaabaaaabaabababbaaaba
baabbabbbbaaabababaabbbb
abbaaabbbbbabaabbbbbaabbabbbbaabbaabaaabaabaaaab
bbaabbbabbbbbabbbababbbb
babaababbbbababaabaaaabbbabbabaabaabababaabababb
bbababbabbaabbbbbbbbabbbabbaabaaabbbaaaabbaabaababaaaaaa
babbbbabbbbbbbaaababbbba
abbbbababbbaaaaaaaabbbab
baaaaaabaabbbaabbabbbabbabbaaabaababbaaaabbaaababbaaaaaabaaaaaabbaababababaaabbbabaabaaa
aabaabbbabbbbaaaaababbaaababaabbabbbabbababaabba
aabababbbbbbabbaabbbbbbb
baabababbbaaaaababbbbaabbabbabbbaaababbaaaabaaab
baaabbbababbaabaabbabaaa
abaababbabbbbaabaababbbbbbbaaaab
aababaababbbabbbababbaaa
baaabbbbbbbbabbabbbbbaab
bbabbaabaaabbbaaaabbbaaa
bbabaabaababbaababbbabbbabaabbabbaabbaab
bbbbbbbaaabbaabaababaaba
aababababaaabbbaababbbaa
babbbbbabbbababbaaababaaaababbaaaaabbbabaaababaaabbbbbbbbbbaaaabbaaabbaabaaaababbbaaaaab
aababbaaabaaaababbbbabaaabbbbabaabbbbabbbabbbabb
bbbaabaaaabbbbabaababbaabbabaababbaabaaaababbbba
abaabbbaabbbaaabbabaaaab
bbbbbbbbaaabbabababaaabbbbaaaabbbabaaabb
baaaaabbbaaaaabbabbaaaaa
ababaaaaaabbbaababbaabba
bbaaaaaaaaabbababaaaaaaaaabaaaab
bbbabababbbbabbaabaaaaaa
bbaaaababaaabbbabbbabaabaabaabab
bbbabbbaaabbbbaaabbaabbaabaabbbaaabbbbba
babbabbabbbbbbbaaababababaaabaabbaaaaaabaaaaabaaabbbbbbaaabbbbbabbaabbaa
ababbabbaabbaabbbaaaaabbaababaaaabbabbab
abbabbbbbaabbbbbbabaabbb
abbbaabbaaaaababbbaabbabaababaabaababaababbbbbbbbbaabaab
baaaaaaabbbabbbaaaabbbba
bbaaabbbababbbabbaaaabaabaabbabbbbbbbbbbabbabbabbababababbaababbbbabbaba
bbbbababbaabbababbabbbab
baaabaabaababbbbbbabbbbb
abbbbababbbababbbbabbababbabaabbbbaaaabb
bbaaaaaaabbbabbbabbbbbaa
bbabaabaabbabbaaababbbaa
aabbbaababaabbabbabaabba
baaabbbaaaabaababbaaaabb
babbbbaabbbbaabaabbbaaaa
abbaabbbaababbabbaaabbababbbabab
aaabaaaaaabbabababbbbabbbbabbbbbaaabaaab
babbbaababbaaaaaaabaaababbaaabbb
bbbbaababbaaaaaabbbbbaab
bbaaaaaaabbbbababaabaaab
babaababbabbabbbaabababaabaabaab
abbbabbbabbabbaaaababaababbabaab
bbbbaaaaaabbaababbabaaabbbabaaaabbabbabb
aaabbaabbaaabbbbbbbbbaaa
abbbbaabaabbbabaabaaabababaabbba
babbabbabaaababbbbaaabbababaabaabaabbaababaabaaa
babbabbaaabaabbaaaaaabaaabbbaabaabbaaaaabbbaaabaaababbaabbbbaabaabbbbaba
aabaaabbabbaaabbbabbbabb
bbaaaaaabaabbbbaabbbaaab
bbbbaaaabbbaaabaabbbbabbbababaaa
abbbabaabbabbaabbabbbbba
aaaaaaabaababbbbababbbab
abbbababbbabbbbabbbbbabbbabaaababbababaabbbaaaab
babaaabaaabbbaaaaabbbbbbabbaaaaabaabaabbabbbababaababaaaaaabbaaababbbabbbaaababb
abbababbbaaaaaabbabaaabb
bbabbababbabbaabbababbbb
babbbbaaaabbaaababbbbaaaaabbababaaabbaabbbbbaaab
aabbaabbabaaaabbaabababaabaaaabaaaabaaaaaaabaabababababa
abababbaaaabaabaaaababbb
bababbabaaabbbaaababbbbb
baaaababbabbbabababaabba
abbbbabaaaaababbbbbaabbabaaaabbaaaababba
aabbababbbaababbabaababa
babbaaabbbaabaabbbaaabbabaaaaabaabbabbaabaabbaabbbbbababbbbabbbb
aaabbbaaabbabbabaabaaaaaaabaaaaa
aababbaaaababbbbabbbaaaa
baaabbbabababbbaaabaabba
bbabbaabbbbabaaabaaabbbbbbbaabababbaabbbbabbabbaaabaaabb
baabaabaababababaaabaabb
abbababbbbbbababbbaabaab
abababbabababbabbaaaaaab
bababbbaaabaaabababababb
aabbabbbbaaababbbbabbaaa
abbaaaababbabababbaabbbabbaabaab
bbbabbbaababaaaabbbaaabababbaaaaababbabaaabbabaaaaaaabba
baabaabaababaaabbbbbababbabbabbabababbbb
bbbbbaaabbaababaabbbbbaaababaaba
bbaaaabaabbaaaabbbababbbbbbababaabbabaababbbaaaaabaabaaa
bbabaaaaababbbbbbababbbbbbbababbbabbbbab
ababababbaaabaabbbbaababaababababaabbbaaaaababbbbabaaabb
babbbabaaabbabbbaababbba
aaaaaaaababbbababbaababbabbbaabb
aababababbaaaaaabaaaaaba
aaaaaaabbaaaabaaaababaabbbabbabb
bbabbabbbbbbabbaabbbaabaababbbaabaaabababaabbbbbbabbbbbb
bbbaabbaabaaaabaabaaabaa
babaabbabbabbaaabaabaaaaabaabaaa
aababababbbbaabaabbbbbaa
baabababbaabaabbaaaaaabbaaaaabababbabbaaabbabbaaaaaaabbb
bbabaabaababbabbbabbaabb
abaaaababbbbbbbabbabaaaa
bababbabbbbbabaababbbbbb
aabbabbbbbbbabababbabaab
abbababababbabaaaabbbaaa
aabababbabbaabbbbbbaaaabbbbbaaaa
abbbabbbaaaaaaabbaabbbbb
bbbbbbbaaabaaababbbbababbabaaabaabababbb
aaaababbaaaaaabaaabaabba
abaaaabbbbbbababbbababbbabaabaaababaabaa
bbabbbaaababbabbbbbaaaab
aababaaabaabbbbbbbbabbbb
aabbbaababbbbbabbababaaa
aabbaaababbaababbbbbababbbbbababbbbbaabbbaabbbbbabaabbaabbbabbbb
baaabbbbbbbaaabaabaabaab
baaabbaaaababaabbabaaaaa
aaabababaababbabaababababbbbbbaabbabbbaabaabaabbaaabaabaababbbbb
aabaaabbbaaabaaabbbabaab
bbbaabbaababbabababbbbbababbbabbbbaabbbbbbabaaaaaaaabbab
aabbaaabbbaabbabaaababbb
bbbbabaabbbabbbaaabaaaab
aabbaabbbabaababbaababaa
aaaaaaaababbbbababaaaabaaabababbabaaababababababaaabbabbababbbbbaaaabbab
babbbbabbababbbabaabbaaa
aabbaaabbbaababbbbbbabaaababaabbbabaaabaaabbbabbababbaba
bbbaaaaabbaaabababbabbbb
bbbbabbababbaaaabbbabbbaabbaabbbbbaabaaa
aaaababbabbaababbabababb
bababbabaaabaaabbaabbbaabaaababa
babaababbaaaaaabababbaabbababbaaaaababbb
aabbabababaaabbababaaaba
bbbaaabbabaababbbababbaa
abbabbbaabbaababbabaabba
baaababbaaaaaabaaabbbaaa
baaaaaabaabababbaaabbaabababbaababbaaabbaababbba
abbbbabbbbabbabaaaaaaabbbabbaabb
abbbbaabaaabaababbbababaaabbbaabbabbabbabbabaaababbabbbbbaababaa
bbbabababaabbaaabbaaababbabaaaaabbaaaaaa
abbbbaababbbabbbaabaaaab
bbababaaaaaabababaaabbbbbbabbaaababbabbabaaaababaaaabababbabaabaabaabaab
bbbabbaabbbbabababaaabaa
abaaabbabaaaabaaaaabbabaababbaba
babbaabaabbabbaabaaaaaba
aababababbabbbaaabbaabba
bbbabaabbaaabbbabbabbaaa
bbbababaaabbabababababbb
aabbbbababaaaabbbaabbabbbaabbaab
bbaaaababababaababbbaaab
abbbaabbaaaaabbaaabaaaabbabaaabaaaaabbabbaababaa
babbabaabababbabbbbbabbbaabbbaba
bbbbbbbaabbbaabbbbbabbab
abaabbabbaabaababaabababbbbaaababababbaaaabbbabbabbaabbb
abababbabbaaaaabaabbabba
abbabaaababbababaabaababbabaaaaabbaaabaabbabbaaa
babbabaabbababbbbbabbaaa
aabaaabaababaaaaaaaabbba
bbaabbbabbbbaaaabaabababaabaaabaaabbabba
abaaaabaaabaaabbabbabbbb
abaaaaabaaaaaaaabaaaaaba
aaabbabababbbbaaaaaabbbb
bbbbaabbabaaabababaaabbababbbabaababbaabbabaabba
bbbabbbaaabbbababbaaabbbbbbabbabbbbbbabbabbbbbbb
abaaaababaaabaabababaaba
baaabaaabbabbbaaaabbaababaaaabba
bbbbabbbbbaabbbabaabbbbb
ababbaababbbbabaababaaaaaabbaaabaaaaabbb
baaaababaaaaababbababbaa
aabaababbabbaabbbaabbababaabbaabaaabaaabbabaabbababaaabbabbbaaab
abbabbaaaaaaabbabaaaabbaababbaaa
bbbbaabaabbbbabbaabbabbbaababbbbbabaaaba
bbbaaabbbaaabbbaaaababbb
baaabbbabbbaaaaabbbaaabaaabababbabaaabbababbabab
aabaaabbabaaaaababbbaaab
bbaaaaabaabbabababbbbaaababbababaabaabba
bbaaababbbbbaaaabababbbaaaabbabb
bbababbbbbabbababbbbabaabbbbaaaaaabbbaabbabbabbbbbbabbbb
bababbbaaaabbaabaaaabbba
ababbaababaabbabaaaaabba
aaaaaabaaaabbbaaababbaba
babbbbaaabbbabbbbbbabbab
bbbbbbbabbbbabbbabbaaaba
baaabaaaaabbaabbabaaababaaababbb
baabaabababbabbbaabbbabb
bbaaaaaaabbbbabbabaabbabbabbaaabaaaababaaaaaabba
baaaaaaaaaaaaaaaaaaababa
abbaababaabbbbabaaababba
bbbbababaabbbaabaababbaaaaabaaab
aababaabaabaababbbbbaaaaababaaaaabaababbbabbbbaaabaaaaabababbbab
babaababbbaabbabbbaabbaa
baabbababaaaabaabababbaa
bbaaabbabbaaabbbbbabbabb
baabbbbabbaaaabaaaabbbba
bbababbbbaabbbbaaaaabaab
aaabababaaaaaabbabaaaabababbbbbb
bbbbbbababaaabbbbaaaaaaabbaabbaabbbbbaabaabaaabbaaabbbbabbaabaabbbbaaabbabbbaabb
aabbbaaababbabbbbaabbbbababaaaaababaaaaaaaababbbaabababb
bbabbaabbabbaaaaaaaaabba
abbabbaabbaabbabaaabaabaabbaaaaaaabaaaabbbaabaabaabbabaa
abaababbaabbaaabaaabaaaabbaaaabaabaaababaababaaabbbabbababaaabaaabbaabbabbaaabaa
bbaaaaabbbbbabaaaababbaababbabbbaaabbabababbababbabbbbba
babbbbaaaababbaaaabaabbbbaabbbaababbbbbb
aaaababbbbbbbbaabbbabbbb
bbaaababbbaaabbaaabbbabb
abbaaabbbabbaabababaabbb
aabababbabbbbbababbbaabbaaabaaaaabbabbaababaabaabaaaaabaaababbbaababbbab
babbaaaaaabbbbabbbbbbbaabaabbbabbbbbaaab
babbabaaabbaaabbbabaaaaa
aaaaaaabababababbaababbb
ababaabbbabbaaaaabbbbbbb
aabbaaabaabbbabaaaababba
baabbabaaabaabaaabbaaaaa
abaaaabaaabbbaabbabaabaa
bbaaabbbbaaabbbaababbbbb
baaababbbbbaababbbabbaaa
ababbbbbabbababbaaabaabbaabbbaaaaabbaaabbbbbababbaaaaabaaabbbbaaaabbabaaaababbbbabaabaaa
bbbbabbbababababbaabbaab
ababbaabbabbbbaababbabbabaaabbaabaaabaaabaaaabbbababaababaababbb
baaaababbabbbbabbaabbaab
bbaabbbaabaaabbbbababbaa
bbabbbbaabbaaabaabbaabbaabaabbbb
bbbaaaaabbaababbbbaabbababaababbabbaaaba
aabababbaaabbbaaababaabbabbbbbba
abaaaabaaaabaaaabaaaababaabbbaababaabbabaaaaabbaaababbbabaabbaaababaaaab
baaabbbbbababababaaaababbbbaabaaaabaaabbbabbaabbabbbabaabbaaaaba
abbbbabbbbbbabbbbabbbbbb
bbbbabbbabbaaabbbbabaabaababaababbaaaabb
ababaaaaaababaabbaabbabaabbbabaaababbaaaabbbaaaa
bbbbbbbbbbbbaabbaaaabaab
aababaabbabbabaaaaaabaab
ababaaababbabbbabbaabaaa
bbbababbabbbbbabaaaaabaa
abbbaabbbabbbbabaaabbaaa
abbaaaabbbaaaaabaabaabba
aaabbabaaabaabbbaaabbabb
ababaaababbbbaaababaababbbbaabbbbaabaaaa
baabababbaababbabaabbaab
bbaaabbbaaabaabaababbaba
baaaaabbbbbaabaabaaabaaabaabbbbb
aabbbababaaaaaabababbaaa
baaaababbaaababbaaaaabaa
aabababaabaabbababababbb
bbaaaaaabaababbabbbbabaabbbbbbaaaabbaaabbababaab
bbbbababaabababaaabbbaaa
baaabaababbabbbaaababbaa
babaaaaaabbaababaaabbbbaabababbababaaaababaabaabbbbaabbbaaaaababaabaabbabbbbbbbbabababbaabaaaaab
bbbaababbaabbbbabaaaabaaabbbbbba
aababaabaababaaabbbaaababbbabaabbbaabaab
bbbbababaaabaaaabbbaaaab
bbbbbbbbabbbabbbaababaabbbabbabbbbaabaab
baaabaaabaaabbbbaabaaabbaaabaabaaabbbbaa
bbbabaabbaaaababaaabaaab
ababababbbbbabbbaaabababbaabbaab
abbababbaababaaaaababbaa
ababababaabbaabbbababaaa
ababbabbaaaaaabbababbbab
aaabbabbbaabababaabbaabbaaabaabbbabbaabb
bbbbababaabaaaaaabaaaaaa
bbaababaababbaabaaaabaaaaabbabaabaaaaaaaaabbaaba
bbababbbbaaaaabbaaababba
bbbbbbaaabbaababbaaabbaaabbbbabababbbbba
aabbbaabbbbababbbaaababa
aabaabaabaaabaababbabbbb
bbbbabaabaabbbbababaabab
abbbaaaaaabbbbbababbababbaaaabba
aaaaaaabaaabaababbbaaaaaaabbbbbbbbaabaaaabbaaaba
baaabbabbaaabaababbaabababbabbbabaabababaaababbbbbabbaabaabbbabb
aaaaababbaaabbaabbaaaabb
bbbabbbabaabbabaabbbabbaababaaaabbbbabbabbaabbaaaabaaabbabbbbaab
baabaabaabbbbbababaaaabbbbbabaabbbbaaaabbbbbbaabbaabbbbb
bbaaaaaabbabbaabbaabaaba
abbababbbabbbbabbaaaaaabaaaaaabaaaaaabbb
abaababbaabbbaabbabaabbb
baabababbaabababbbbaaaaabbababbbbaaaabbb
baabaabaabaabbbbbaabababbabababbbbabbbaabaaaaabaaaaabaaababbbbababbbaaabbbabaaba
abbbbaaaaaabbbaabaaaabaaaaaabbaa
baababababbaaabbbabbaabb
aaaaaabaabababbabbabbbbb
aaabbabaaabbaabbbbabaaab
abbbaabbbbbbabaaaaaabaaa
aabbabbbabaaaabbaabbbaaa
aabbababbaaabbbbabbbbbabaabaabab
bbbaababaabbbbbabbabaaaabaaaabba
bbbbababaabababaaabbabaa
ababaabbbbbbbbbaaaaabbbb
aaabababbabbaaaaababbbbb
bbbbabbabbbbbbaaaabaabbbbabbbbba
bbbababbaaababababbaababbbabbaabbabaaabaabbabaab
baaabbbaabababbaababbbaa
aaaaaababbbabbaaaabaaaaaabababababbaabaababaaaba
bbabbaabbbbbbbaabbbaaaab
babbaabaabbaaabbbbaabbbaabababbaaaabbbaabaababbbabbbaaaa
baabaabbbaaababababaaabbabbbbaaaaabaaaaababbabaaabbbbbbabaabaababbbbbaaabaaaaaaa
abbaababbbbabaabababbaba
bbaababbababababbbbbbaab
bbbbaababbaaaababaaabbaaabaabbbbbbbbbaaa
babbbaaabaababaababbbabbabbaabbabbaaaabaaababaababaabaaaabbaaaba
bbababbbabaaaaabbbbbbabb
babbabbbababaaaababbbabaaaabbababbabbbbbabababbb
abbbaabbbbaaabbbaaabbabaaaaaaababaabaabbaabbbaabababbbabbbbbbbabababbbbbaaababaa
aaaaabbabbbaaaabbaaababbbaaaababaaabbabbbabbabbaabbabaabaabbaaaaabbaabaababaabaababbabaa
baaababaababbbabbaaaabbaababbaaababababababbaabbbbbabbbababbababaaabbbbaababbaba
babbabbaabbbabaaabbaaaaa
bbbaaabaaaabababbaaabbbabababbbb
bababbbaababaaaabaabaabaaabbabbbbbabababbabbbaab
aababaaaabaabbabbabaabaa
aababbaaaaabbaabaaaababa
babbbbaababbbbaaaaabbbaabbaababbbbabaaabbaaabbabababbbaa
abaaaababababbabbababbbabbabbaabbbaaabaa
aabbababaabbaababaaaaabbbabbaaaabababbabbbbabbaaaaabbbbb
aabaaababbaaaabbaabbabaaaaababbabababbbb
abbbbbaabbbabaaaaaaaabbaaabbbaaa
bbbbabaaaabbbababbbabbbb
bbbababaababaaabaabbabaa
abaababbbaaababbbabbbbaaabaabaab
aaabbaababbbbaaaaabbbbba
aabaaaabababbaaaaaabaabbaaaabbaa
baaabbabbbabaaabaaaabaabababbbbb
abaaaaabbbaaaaaabaababaa
bababbabbbbabbaaaaabbbab
abaaababbaabbabaaabaaabbabbbbabaaaaababaaabaaaabbbbabbbbbaabbaaa
aabababbaaabaaaaabbaabba
ababaaabbabbabaabbbaaaaaaaaaaabbaaabaaab
aabaaababbbababaaabaabaabbbbaaaaaabbaaaa
bababaaabbababbabbbabaaa
abaaabbabaaabaabbababbaa
abbbabaabbaabbbababbbbbb
aabbbbabbaaabaaabbaaabaa
bbbbabbaabbbbbbaaaababaa
abbbbabaaabababbaaabbbbb
abaaabbaabaaabbbbbaabbbb
aabaaabaaaaaaabaaaaabbba
abbabbbaababbabbaaaabbbb
babbaabaaaaaaaabbaabbbbabaaaababaabbaaaa
ababbabbabaaaabbbbbababbaabbababbbbababb
abbbabbbbabbbbabbbaabaab
baaababbbbaaabbabbbaaaab
abbbbaabbbbbaabbabaaababbaabaaab
bbbbababbbaaabaaabbababbbabbbbababaababaaaabaaaabaaaabaaabbbaabababbbabbbaaaaaababbaabbb
bbbbabaabbabaabbabbbbbabbabaaabbaabbaaab
baabbabaaabbaababbbbbaab
bbabaaabaabaaaababbbbbaabaaabbaabababbaaaabbaaabaaaababbaaaababaaaaaaaaaababbbbb
abaaaabaabbbabbbaaaaababbaaaaaab
abbbabbbaababbbbabaaaababbaaabbaabbbaabbbbabaaaa
bbaaabbabbaababbbbbabbaabaabbbbabbbaababababbbaa
bbaaaaaababbbbbbbaababaaababbaaabaabaaabbbababbabbabbbbababbaaab
bbaababbbbaaabbbababbaba
bbbaaabbbbbbabaabbabbaaa
bbbababaaababbbbbaababaa
baaaababaababaaaabbbbbbb
aabbbbabaaaababbbabaabba
baaabaabbbbabbbabbaaabbaabbbaabbbbaabaab
aabbbaabbaaaaaaabaaaaabbbbbaabab
baaaabaaaabbaabaabaaababaaaabaab
aaaaaabaaababbaabaaaaaba
aaabaaaaaabbbbabbaabbaaa
abaababbbbbabbbaaaaaaaaaaabaaabbbaabbbabaaabaabb
bbbaabbaabbababaabbabaaa
bbbababbabbabbbabbaaabbabababbaaababbbbb
abaabbbaababbbaaabbabaab
aababaabaaabbababababbbaaaabbabababbbbaaaaaabbbababbabab
bbabbbaaaaaaababbbaaaabababbabaaabbabbbbaaabbbbb
aaaaaabbbbbaaabbbbaabaaaaabbabaa
bbbaabbababbaabaaabbbbbb
abbbabaaaaaaababaababbab
bbabaabaaabbaabbaabbabba
baaaabaaaababaabbbabbbab
bbaabbbaaaabbaaaaaaaabaaaaaabbaa
aabaabaaaababaabbbbaabaabbbaaabbbbabbabb
aaabaabaabbbabbbaabbbbbb
babbaaaaabaaabbbbbaaababaaaaaabaababbbababbabbbbaaabbbba
abbababbbaabbabbabaabbabaaaaabbb
ababaaabbaaaaabbabbbabaabbaabbbaabaaaaabbaabaabbabbbaaaa
babbaaaabaabababbaaaabbb
aaabbbaaaabbbabababaabaa
bbbaaabaababbaabababaaba
aaababbaaabbaababbbbabbabbbabbab
abababbaaababaababbaabba
bbaaabbabbbbababaaaabaab

172
2020/src/bin/day19.rs Normal file
View File

@ -0,0 +1,172 @@
#![feature(test, str_split_once, bool_to_option)]
extern crate test;
use aoc2020::common::*;
use itertools::Itertools;
#[derive(Debug, PartialEq, Clone, Copy)]
enum Rule {
Char(u8),
And((usize, usize)),
AndOr((usize, usize), (usize, usize)),
Or((usize, usize)),
Useless(usize), // just delegates to another rule and makes parsing annoying
// This is why you don’t change the requirements once the implementation is done. REEEEEE
Special8(usize, (usize, usize)),
Special11((usize, usize), (usize, usize, usize)),
// If Rule was a recursive struct, this could have been defined as And(first, And(second, third)), but alas
Triple((usize, usize, usize)),
}
type Parsed<'a> = (RuleSet, &'a str);
#[derive(Debug, Clone)]
struct RuleSet(Vec<Rule>);
impl RuleSet {
fn matches(&self, s: &str, rule: Rule) -> Option<usize> {
let res = match rule {
Rule::Char(c) => (s.as_bytes().first() == Some(&c)).then_some(1),
Rule::And((r1, r2)) => self
.matches(s, self.0[r1])
.and_then(|i| self.matches(&s[i..], self.0[r2]).map(|j| i + j)),
Rule::AndOr((r1, r2), (r3, r4)) => self
.matches(s, Rule::And((r1, r2)))
.or_else(|| self.matches(s, Rule::And((r3, r4)))),
Rule::Or((r1, r2)) => self.matches(s, Rule::Useless(r1)).or_else(|| self.matches(s, Rule::Useless(r2))),
Rule::Useless(r) => self.matches(s, self.0[r]),
// part 2 shit below:
Rule::Special8(first, second) => self.matches(s, Rule::Useless(first)).or_else(|| self.matches(s, Rule::And(second))),
Rule::Special11(first, second) => self.matches(s, Rule::And(first)).or_else(|| self.matches(s, Rule::Triple(second))),
Rule::Triple((r1, r2, r3)) => self
.matches(s, self.0[r1])
.and_then(|i| self.matches(&s[i..], self.0[r2]).map(|j| i + j))
.and_then(|i| self.matches(&s[i..], self.0[r3]).map(|j| i + j)),
};
res
}
}
fn read_input() -> String {
read_file(19)
}
fn parse_input<'a>(raw: &'a str) -> Parsed<'a> {
let (rules, inputs) = raw.split_once("\n\n").unwrap();
let rules = RuleSet(
rules
.lines()
.filter_map(|l| l.split_once(": "))
// why isn’t this already sorted like it was in the example?
.sorted_by_key(|t| t.0.parse::<i32>().unwrap())
.map(|(_, r)| match r {
or if or.contains('|') => {
let mut split = or.split(' ').filter(|s| s != &"|").map(|s| s.parse().unwrap());
split
.clone()
.next_tuple()
.map(|(a, b, c, d)| Rule::AndOr((a, b), (c, d)))
.or_else(|| split.next_tuple().map(|(a, b)| Rule::Or((a, b))))
.unwrap()
}
chr if chr.contains('"') => Rule::Char(chr.bytes().skip_while(|&b| b != b'"').skip(1).next().unwrap()),
and if and.contains(' ') => Rule::And(and.split(' ').map(|s| s.parse().unwrap()).next_tuple().unwrap()),
useless => Rule::Useless(useless.parse().unwrap()),
})
.collect(),
);
(rules, inputs)
}
fn part1((rules, input): &Parsed) -> usize {
input.lines().filter(|l| rules.matches(l, rules.0[0]) == Some(l.len())).count()
}
fn part2(parsed: &Parsed) -> usize {
let mut rules = parsed.0.clone();
rules.0[8] = Rule::Special8(42, (42, 8));
rules.0[11] = Rule::Special11((42, 31), (42, 11, 31));
dbg!(parsed.1.lines().map(|l| (l, rules.matches(l, rules.0[0]))).collect_vec());
parsed.1.lines().filter(|l| rules.matches(l, rules.0[0]) == Some(l.len())).count()
}
fn main() {
let raw = read_input();
let input = parse_input(&raw);
println!("Part 1: {}", part1(&input));
// 265 too low, 395 too high. apparently 379? no idea how that’s supposed to work
println!("Part 2: {}", part2(&input));
}
#[cfg(test)]
mod tests {
use super::*;
use aoc2020::*;
use paste::paste;
use test::black_box;
const TEST_INPUT: &str = r#"0: 8 11
1: "a"
2: 1 24 | 14 4
3: 5 14 | 16 1
4: 1 1
5: 1 14 | 15 1
6: 14 14 | 1 14
7: 14 5 | 1 21
8: 42
9: 14 27 | 1 26
10: 23 14 | 28 1
11: 42 31
12: 24 14 | 19 1
13: 14 3 | 1 12
14: "b"
15: 1 | 14
16: 15 1 | 14 14
17: 14 2 | 1 7
18: 15 15
19: 14 1 | 14 14
20: 14 14 | 1 15
21: 14 1 | 1 14
22: 14 14
23: 25 1 | 22 14
24: 14 1
25: 1 1 | 1 14
26: 14 22 | 1 20
27: 1 6 | 14 18
28: 16 1
29: 29
30: 30
31: 14 17 | 1 13
32: 32
33: 33
34: 34
35: 35
36: 36
37: 37
38: 38
39: 39
40: 40
41: 41
42: 9 14 | 10 1
abbbbbabbbaaaababbaabbbbabababbbabbbbbbabaaaa
bbabbbbaabaabba
babbbbaabbbbbabbbbbbaabaaabaaa
aaabbbbbbaaaabaababaabababbabaaabbababababaaa
bbbbbbbaaaabbbbaaabbabaaa
bbbababbbbaaaaaaaabbababaaababaabab
ababaaaaaabaaab
ababaaaaabbbaba
baabbaaaabbaaaababbaababb
abbbbabbbbaaaababbbbbbaaaababb
aaaaabbaabaaaaababaa
aaaabbaaaabbaaa
aaaabbaabbaaaaaaabbbabbbaaabbaabaaa
babaaabbbaaabaababbaabababaaab
aabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba"#;
test!(part1() == 3);
test!(part2() == 12);
bench!(part1() == 235);
// bench!(part2() == 0);
// bench_input!(0.len == 0);
}