Added day 19

This commit is contained in:
Sebastian 2020-12-19 17:22:34 +01:00
parent f1812b5ee0
commit f866ad67b3
3 changed files with 839 additions and 3 deletions

530
inputs/day19.txt Normal file
View File

@ -0,0 +1,530 @@
3: 97 29 | 2 104
45: 97 10 | 2 73
114: 44 97 | 90 2
78: 2 95 | 97 32
7: 97 64 | 2 119
118: 97 81 | 2 58
64: 97 29 | 2 14
106: 53 121
4: 2 103 | 97 55
54: 2 53 | 97 44
58: 33 97 | 130 2
91: 104 97
102: 104 97 | 83 2
128: 2 59 | 97 3
79: 98 2 | 124 97
117: 2 65 | 97 92
1: 75 2 | 115 97
40: 2 96 | 97 119
8: 42
92: 102 97 | 57 2
97: "a"
93: 2 66 | 97 103
36: 2 104 | 97 32
2: "b"
108: 43 2 | 68 97
46: 44 2 | 90 97
31: 97 5 | 2 132
110: 14 2 | 90 97
61: 38 2 | 9 97
10: 63 2 | 34 97
32: 2 2 | 97 121
11: 42 31
103: 121 121
131: 75 97 | 60 2
74: 2 112 | 97 47
20: 93 2 | 69 97
53: 97 2 | 97 97
23: 125 121
9: 97 66 | 2 25
101: 83 97 | 95 2
35: 25 2 | 104 97
76: 97 55 | 2 104
125: 83 2 | 32 97
22: 59 97 | 76 2
127: 6 97 | 55 2
126: 97 119 | 2 17
113: 59 97 | 35 2
81: 46 2 | 72 97
104: 2 2 | 97 2
100: 25 2 | 95 97
95: 97 2
132: 97 27 | 2 45
107: 97 90 | 2 32
34: 98 97 | 50 2
33: 2 95 | 97 83
119: 32 97 | 66 2
90: 2 2 | 97 97
77: 126 2 | 22 97
6: 2 97
14: 97 2 | 2 121
94: 2 110 | 97 129
21: 56 97 | 105 2
65: 2 96 | 97 98
122: 2 71 | 97 86
87: 101 97 | 91 2
15: 107 97 | 120 2
120: 103 2 | 66 97
56: 128 2 | 20 97
129: 2 66 | 97 83
41: 97 48 | 2 122
13: 39 97 | 26 2
30: 97 88 | 2 54
84: 55 97 | 53 2
86: 84 2 | 59 97
96: 55 2 | 104 97
83: 97 121 | 2 97
50: 53 97 | 95 2
19: 2 70 | 97 78
121: 2 | 97
57: 53 2 | 83 97
37: 6 97 | 6 2
68: 97 53 | 2 83
112: 97 23 | 2 19
66: 2 97 | 2 2
49: 97 90 | 2 103
80: 2 97 | 97 97
85: 83 97 | 55 2
12: 2 35 | 97 51
116: 97 67 | 2 77
123: 4 2 | 85 97
82: 21 2 | 111 97
105: 30 97 | 87 2
72: 25 97 | 95 2
115: 104 2 | 29 97
63: 97 37 | 2 36
42: 24 2 | 82 97
0: 8 11
70: 2 80 | 97 25
5: 2 74 | 97 116
52: 16 97 | 94 2
62: 35 97 | 114 2
18: 123 2 | 61 97
25: 97 97
88: 83 97 | 66 2
124: 2 6 | 97 80
89: 114 97 | 100 2
44: 97 2 | 2 97
71: 49 97 | 106 2
38: 2 104 | 97 90
75: 53 2 | 104 97
98: 53 2 | 25 97
69: 97 95 | 2 95
73: 2 1 | 97 7
24: 41 97 | 109 2
48: 2 40 | 97 113
39: 103 2 | 104 97
67: 2 15 | 97 62
55: 2 2
47: 2 79 | 97 108
51: 6 2 | 95 97
17: 95 2 | 90 97
59: 53 97 | 66 2
28: 2 12 | 97 131
27: 2 52 | 97 28
29: 97 97 | 2 121
16: 4 2 | 127 97
109: 2 117 | 97 18
43: 104 97 | 6 2
99: 97 89 | 2 13
130: 83 121
111: 99 2 | 118 97
60: 97 44 | 2 25
26: 121 44
abbbbababababbaabbbbbbab
bababababaabbbaaaabaabaaaaabaabaaabbbbab
baaaabbbabbbbababbbbaabababaaababbaaaabbbbabbbbb
abbababaaabbabbaabaaaaaaaaaabaabaaabaabb
aabbaababaabbabbaaabaababaaaabab
baabaaaaabbabaabaaabaaabbaaabbabbaaabbbbbabbbaba
babaabaaabaabaababaabbab
bbbbbababbbaaaababaaaaabbaabaaba
bbaabaaaaaaabbabbababaabbabbaaaa
aabbababaaaabababbbbaabbaaabbaba
bbaaababbbbaababbbbabababbaaabaaaaababba
bbbbababaabbbabaabbaabbaaaaabbbabbbbbbbbbaaaabaabbbaaababbaaaaababbbabbabbabaaab
bbbabbbabbaaabaaabaababbbaabaabaaabbbbba
abbbbbabbaabbbbbbaaaabbbbaaaaabb
aabbababbabbababbbbbaaabaababbaabbaabbaa
bbbbbabaaabbaaaaabaaabbbabbaaaba
baaabbbbbaabbaaabbbaabaaaaaabbbbaabaaaab
bbabbbaaaabaabbaabbbabab
bbbbbabbbabbbababbabaabaabbbbaab
aaaabbabbbababbabbaabaaaaabbbaaaabbabbababbbaabbbbbbaaaa
bbaabbabbaaabbabababbbbbbbbbabbbaabaaaaaabbababbbbbaaaba
bbbaabbbaaabbaabbbbbbaaa
bbabbabbbababbbbababbbaa
baabbbabaabaaabaabbbbbbbaaabbaaaabbababa
aabbaabaabaabbbabbbbabaaabbabbbbabbabaabbbabbbaababbbbba
aaabababbbbaaabbbaaaaaabaaaaabaabaabababbbbabaaaabaaaaabbbbbbbba
babaaabaaabbbabaabaaabbbababbabbbabbabaaaaabbaba
aabbaaaabbbbbabbbbaaabbbaabaabbbbbaaabbbabaabbbbbbbababaabbaaabbabbaaaba
aaaabababbaabaaaaaaaaaba
babbbbaababaaaabbbabbbabaaababaaabababaaaaabbaababaaaaba
abbbabaababababbabbaaaab
babaabbbbabababaabaaaabbbababababbaaaabbaabbabba
bbabbababbbababbabbaaabb
bbabababbbbababbbbbbaaaa
bbaaababaaaababbbabbbaba
aabbbabababbababbababaaaababbaabbbabbaabaabbabbbbaaaaabb
bbbbbababbaabbababaabbbbababbbaabbbabbba
abbbbaabbbaaababaaababaaababbbbbbbaaaaaabbbaababaabababb
baaaaabbbaabaaabbbbbbaaaaabbaabaaabbaaaabbbbbbbbbbaaaaabbabbbababbabbbba
abaabbbaaabaabbbbaaabbababaabbab
abbbbababbbbaaababbbbbabbababbaaababbabaabbaabbb
babbababaabbbaaabaaabbabbbbaabaabaaaabbbabaabbaaabbbbbba
babbabaabaababbabbaabbbbbaabaaabbaabaabbbbaaabbaaabababb
babaaaaababbbaaabbabbabb
baabaaabbbbababbbabababbabbabaabbbaabababbbbbbabaabaaaab
aaaaabbbaababaababbbbababbbabbaaabbbabbbabbaaabbababaabbbaaabbaaaaaabbaa
bababaaaabbbbbbbababbbababbbbbaabaabbaab
baaabbbbaaaaabbabbababaaabbabbab
aaaaabbbaabbbaaabaaaaaabbabbbbbb
aababbaabbbabbaaabbbbabbaaaabbbb
aabbababbbbbbaabbaaaaaaaabbbbaabbbabaabb
bbbbbaabbbbbabaaabbbbbaa
babababaabaaaaaabbaaabbaaaaabbbaabbbbbababaaababbbabaaabbaabbabb
bababababbaaabbbababaabb
bbabaababbaaaaabbabbbaaabbbaaaababaaaaaaaabbbbab
bbabbbabbbbbabaabbbabaaa
aaabbbaabbaaaaabbbabbabababababbabbababb
aabbaaaabaabaabbbbbbaabaaaaabaaabaabbaab
aaaabbbabbbbaaababbabbab
abbaaaaabaabbbaaaaabbbbbbbababaabbbbaabbabbbababbaaaabaa
aaaabbbababababbbaaababaabbabbbabbabbbbb
baaaaaabbaababbbabbaabaa
aaaabbbaabaaabbbbaaaabbababaaabaaaabbaaabbababaa
bbaaaaabbabbaabbbabbbaba
aaaabbbababababbababbaababaabaabaaabbaab
baaaaaababaaabbabbabbaabaaaabbbb
bbbbaaabaaabaabaaabababaabbabaabbbbaaabb
aaabbababbbbaabbbbaababbaaababba
aabaabaaaaaababbbabbaaaabaaaaabaabbabaaabbabaaabaaabbbababaaabaa
aabaaabbabbabbbaaaabbbab
bbaaaaaabaabaaaababbaaaaaabaababbbbbbabbbabbbaaabbbabbbbbabbbaab
bbbbabaabbabbaaabaaaaaaabbbaaaabaaaabbababbaabbbbbabaabaaaabbbbaaaababaa
aaababaabaababbabbaabbbbbbbabaabaaaabaaabaaabbabaaaabaab
ababababbbbbbabaababbbabbbbaaabbabbababaaaabbbba
babbbbabbaabaababbabbbaabbbaabbbbaabbaab
aabaaababbbbaaabbabaabbaababaababbbabaab
aabaaabbbbaabbbbbbbaabbababbabaabbaaabaa
abbbbbbbaabbbaabbbabbbabbababbaabbababbb
aabababababaaaaabbbababbbaabbbba
aaaababbabaaaabbaabaabbaaaabaaaa
bbbbbabbababbaaaabbbbbabbaabaababbbbbaaa
aabbaaaababbbaaaaaaabbaa
aaaaaaabaabaaabbabbaaaaa
babaaababbaaabbabaabbbbbbaaaababbbaabaab
abbabbbaaaababbbababbbabaabaababbbababab
baabbbaabbabbbabaabbbaaabbaaaabbbbaaabaaabbaabbb
babaabaaaaababababbbbabbbabaabaaaabaaabaababababbbaabbbabbaaaaaababaaaab
aabaaabbaababbaaabbbbbaa
aaababaaaaaaabbabbbbbbba
ababbbabbabaabbabbabbbbababbaabbaabababb
baabaaabbaaaaaabababbaababaaabaaabbbbbbbbaabababbbbabbba
bbababbababbababbbaabbbbbbbababbabbaaabbbbbbaabbaababbba
ababbaaaaaabbbaaababbbaa
ababbaabababbaabbaabbaba
aaaaabbabbabbbabbbaaabbbababababaaababbabababbabaaabbbabbbaaaaba
aabaabaaabbbbabbababbaababaabaaabaababab
bbabbaaaaabbbabababababbababbbaaabbbaaaababbbabbbbbbbbabaababaaa
aabaaabbbbbbababaaabaaaaaababbaaabaaabaaaabaabaabababaabbbbaaaaabbbabaaa
aaabaabaabaabbbabbbbabba
aaabbbaabaabbbabbbababbb
bbbbbaababbbbaabbbabbaabbbbaaaaa
baaaabbbbbabbbababaaaaababbbabab
bbaaaaabbaabaabbaabbaaaaabaaabaaaaababbbabaababa
babaabbaabaaabbabaababbaababaaaa
abbbaababaaabbababbbbaabaaababbbbbbbbbab
abbbbbbbbbaaabbbaabbabaa
baababbabaaababaababbabababbbbabaababbbaaaabaabbabbaaabb
bbababaabbaabbbbbabaabaababbabba
bbbaabaaababababbaabaaba
aaabaaaaaaaaabaabbabaaabbbaabbab
aaaaabbaababbabababaabaabbbaaaaa
ababbabaaaaaaaaabaabbbaaaaaaaaabaaaaaaaababbaaaa
aabaabababbaababaababbabbaabbaabbbaaaabbababbabbbaaabbba
babaaaaababbaabbbbbbabaabaaababababbbabbaabbaaab
bbabbbabbbbaaaabaaaabbaaabbaabaabaaaabaa
baababbabbabbbaabaabbaab
babaabbbabaabbbaabaaabaaabaaabab
abaababbbababbbaaaaaabbababaaabbbaaabbbb
aaaababbaabaabbabbaaaaaa
baabbbbaabababababbbbaaababbaaaabbbbaaababaabbaaaaabbbbbaabbabbbbbaaaaaa
bbbbaaabbabbbaaaaabbbbba
aaabbbaaaabababaababbaabbbbabaaa
baabbbbbbaabaabbbababbaabbbabbabaabbbbab
baaababbaabaaabbbbbaaaaaaabbabbaaaaabaab
ababbabbabbbbbbbabababbaaaabababbaaabbaa
baaabbbababaabbbbaaaaabb
bbaabbbbababaabaaaaaaaba
aabbbabbbbabbbabbbbbabba
abbabbbbaabaaabaaabaabab
aaaaaaaaaaabaababbaaaabbaabbbaabbbbabbaabbabbabbababbbaabbaababbaaaaaaba
abaabbbbaabbbabbabbbbabaabbabbab
bbaabbabbbabbbbaabbbbaabababbbbaaaaaabbabbabbbbb
bababaaabaabbbbbbbaabbbaaaabbbab
abbbabaabaabaabbbaabbababbbababababbbabb
ababaabababababaababbbabbababaabbabbbaababababbb
baabbbbbabaabbbbabbbabab
ababbabbbabababbbbabbaaaaabbabbb
baabbabbbbaabaaabbabbaabbbabaabb
babababbbabaabbaabbbbbba
abaaaaabbbababaaaabaabbbaaaabaab
baaaaaabbabbababbaababbbbaabbabbaabbbbab
abbbabaabbaaababaabbbaabaababaabbababbabaababbba
bbabababaabbbbaaaabaabaaabaababbaabaaaaababbbbabbbaaaaabbabababaaabababababbaabb
aaababaaababababbbbbbababaabbabbabbbbabababbbaba
aabaabbbaaaaaabbbbbaababbabbbbba
bbabbbabbbaaabbbabaabbbababbababbbbaaabaaaaaabaabaaabaabaabbbbaaabbbabab
bbaabbbbbbaabbbbbaaababaaababbabbaaaabba
ababbbbbabbbbaabaabaabbaabaabbab
bbabbbaaaabbbaabbbababbaaaabbbba
baabbbbbababbabababbbaababbabbbaaaaaaaba
abbabbbaaabbbaaabbabaabababbabaaabbaaaaaaaaabaabbbabbbbb
aaabaaabbaabaabbbaababaabababbbbaabaaaab
baabbbaabaabaabbaababaabbbaaabba
abaaabbbbbbbabaababaabaaababbbbaaababbaaaabbbabaabaaaabababbbbbbabbaabab
abaaaabbaaaaaaabbbbbabaaababbabbabaaabaabbaabbba
bbaabbabbbbaabaabbaabbaa
abbbbababaabbbaabbbbbabaababbbaabbbbbaaa
babaaaaabbbbbbbbbbbbbababbbaabaabaaaaaabbbabaaabaabbabaa
bbaaababbabaabbabaabbbbbbababaabaabababbbabbbbba
baaaaaababbabaabaaaababaababbaabaaaaabab
aabaaaaabababaababaaababaaaabbabaabaaabaabbababbbaaabaaabaababaa
babababbababababaaababbb
aaabaaabbbababaaaabaabbabaaabbbabaaaabab
abbabbbaaaabbbaabbaaaabbbabbbabbabaabbaa
bbbbbabbabaaabaabbababaabaabbabbbabbaabbbbbbabbbabbaaaaa
bbbbbabaaabbbabaababbbbbabaabbbbbbaaaabbbbbaabbbabaaabab
bbabababbababaabababbbbbbbbaaabbabbaabbb
aaaaaabbbbbaababbbaaabaabbbaaaaa
aaababbabbabbbaababbabbaabbabaabaaabaababbbabbabbbbbbbbbaabaaaab
abbbbbbbbaaabababaaaaaabbbabbabb
babaabaabaaabababaabbabbbabaabaabbbaabaabbabbbaabbbabaaa
bbaabbabbbabaaabaaaaaabbbbabaaab
baaababbababbaaaabbbbbba
baaababbaaaabaaaaababbaabaabbbbbabaaaaababbaabaaaabbbbaaaaabaaaa
aabaabbbbababaaababbabaabaabbaaabbaaabbbbbbbbbbbabbababb
aabbbaaababaabbabaabaaaaaabaaabbbabbaaabbababbbbabaababb
baaabbabbaaaabaaaabaaababbbbabaaaaabaaba
ababbaabbaabbbabbabbababaaaabbbbaabbabba
abaabbbbbababaaabaababab
baabaaaaabaaabbbaabbaabbaaabbbbb
bbbbbbaaaaabbaababbabbabbbbbbbaa
abaaabaabaabbbbbbabababbbabbbaaaabaabbbaabbbabbbaabaaaaa
bababbaabaaabbababaababb
bbbabaabbababbaabbbabbaababbbbbbbbbbbbab
bbbbbbbbaabaabbaaaabaaabbbaaabbbbbabbbbb
abbabbbabbbbbaabbbaaabbbbaabbbaaabaabbbbbabbabbb
baaabaaababaaaaaaabbbabbbaabbaaababbbbbbbaaaabba
abaaabbaabaabbbabbaaabbbabaaabbbaababaaa
aaaaabbbaabaabbabaabbbbbbbaabbaa
aaaabbbaabbbbabaabbabaaaaaabaabb
aaabaaabaaabaaabbaabbaaababbbbabbabaaaab
aabaaabaaabababaabaaabaaababbaaa
bbbabbaabbabaababaaabbbabbbbaabb
bbaabbbbbaaabaaaaaaaabbaaaabbbbb
abbbabbaababbbbbbbbabaaa
bbbababbababbbabaabaabba
babbbaaababaabbbbbababababbbabaaabbbbaaa
abaaaaabbaaaaaabbabbabbb
ababaababbbbbabaaababbab
abbbabbbaaaaaaababbbaaaa
babaaaaabbaaabbbabbabbbbaabbaaaaabaabbabaaabbabb
babbaabbbbbbabaaabaaabbaabaabaaabababbba
ababbbbbaaabababbbbabbaaabaaaaaa
bbaaaabbbaabbbaababbbbbb
abaabbbaabbbbbbbaaabababbbbbababaaaabbaa
abaaabaaabbabbbbbabbababbabbbaabaaaaaabaaaaaabaabaababab
abaabaabbaaabbbbbbbbbabbaaabababbbaabaaaaaaaabab
aaabbbaabaabbbbbbabaabbabbbbaabb
bababaaabaabbbaabbaaabbababbbaabbbbabaababaabbaababaaaab
aaabaabaaababababbabbbbb
bbbababbaabbbaaaaabbbaabbababbba
baabbbaaabbabbbbbbbbabaaabbbbaabbababbbb
baabaaaaaaabababaaabbbab
babababbaabbbabaabbbbaaa
babaaababbaabbbbbababaaaabbbaababbaaabaa
aabbbabbbabbababaaaabababbbaabba
aabbbaaabbabaabbbbbbabbabbbbbbaaaababaaaabbbaaabbaabbabaabbbabaaababaaaa
ababaabaaaaababbbaaaaaba
bbabbbbaababaababbabbaabbbabbaaaaaaaaaababbbbbbabbabaaababbbbaaabbabbbbb
bbaabbabbaaabaaaaaabbbaabaababbbbaababbabababbababaabaaa
bbbbbaabbababaabbbabbaabbbababaabababbab
baaabbabaababbaaaaabbbaabbbbbaabbabbbaaaabbaaaabaabbbbaa
aababababababbaaabaaaaababbabaabaaaabbbaabaaabaaabbaababbbbabbbbbbbaaaaababbbbab
aaabababaabaaabbaabaaabbaaabbabbaabbaaab
baaabaaabbbbbbbbaaaaaaba
abbbabbbbbbbaababbbabaaa
babababbbbbbbabbaabaabbababbbbba
aaaaabbaaabbbaababaaabbbaabbbbab
bbbaaaaaabbabababaabbbaaaaaabbaaaababbbaaaaabababbabaaaaaaaaababbbbbbaabbbabaaab
aabaabbabababbbaabbaabbbbbabaabbbbabaabb
aaaaaaababbbabbbbababaaababababbaabbbaaabbbabbba
babbabaababbaabbbaabaaaabbaaaaababaaabaabaabbaab
abbbbbbbabbbbabbaabbbaaaabbbbbaa
bbaaaabbbaaabbbbbbbbabbb
aaababaababaabbbababbabbabaabbbabaabbaaabbbbbaaa
bbbababbbaabbaaabbabaaaababbbaaabbabbaba
abbabbbbbbbbbaabaabbaabaababbbaa
baababbabaaaaaaaaabbbbaa
baaabbabaabbbbbbaaaabbabbbbaaabb
bababbaabaabbaaabaabbabbabababbb
bbbbbababbbabbaabaababab
aaaabbababbabbbabbbbbbbbaaabbaab
bbababbaaababbaabbbbbbbbaaaaaababaaaaaba
ababbababaabbabbaaabaaaa
bbabbbaaaaaabbabaaaaaaabbbabaababbbbbbaababbbaba
aaaaabaaababbbaabbbbabba
ababbbbaaabbbbbbbaaaabbbbbaaabbbbbbbbbaa
babbaaaaabbbabbbaabbbababaaaaabaaaabaababababbab
baabaaabbabababbbbbaabbabbbbbbabbbbbbbaa
bbabbabaaaaababbaabaabaaaabbabbabbaaaaaa
aabbbababaabbabbbabaaabaabbaaababbbbaabb
aabbbaabaabaabaaaaaababbbbbababa
abaaaaaaabababbbaaabbaabaaabaabb
abbbbabbaaaaabbbababbabbbabbbaaaabaabbbbabaabbbabbbaaaba
aabbbaaaaaabbbaaaaaaabbbbababaabbbaababaaaabbaaaababaabb
aaababaaababbaaaabbbabaaabbababb
baaabbbabaaaaaababbbabbbbbbbababbbaabaabbabbabbababbbbabbbabaaab
bbabbabaaabbababbaabbbabaabbabab
abaabbbabbbbabaabbbaabba
babaabbbababaababaabbbbbaababbba
abaabbbbabbbabaabbababbb
baaabaaaaaaabaaabbbbbaabaaaabbbb
bbaaabaaababbaabbbaaababaaaabbbbabbaaabaaaaaababbabaaaaa
babbabaaaabbababaabbbaaaabaabbbbbbbaabab
bbabaabaaababaababaababb
aabbaaaabaabbbaabaaababaabbbbbabbbabbabaaaabaabb
baabbbabbaabaabbabaabaabbaabbbbbabababaa
abaabbbaabbaabbaaaabbbbababaaabb
bbbbaaabbbbbbabaaaaabaaabbbabbab
ababbbbaabbbabaabababbbabbababbaaaabaaabaaabaaaabbaaababaaaabbaabbbbaaaa
bbaabbababababbaaabbabbb
babaaababbaaaabbaabbbbab
bbabbbaabaabbabbaabbaaaaaabbbaabaaabbbab
abaabbbbabaaaabbaabbababaaaababaabaabbbabbaababbbbbaaaba
abbbbaabbbaaababbbabbbaaaaaaabaabababaaababbaabb
aabbbabbaaabaaabaabbabba
ababbabbababbaababbbbabaabbbaaab
ababbbbaabaaaaabaabbaaab
babbbaababababbaaaabaaabbaabaaaabbaabaaabbaaabbaaabaabababbaaaba
bbbbbbbbbaabbbababbaabba
aabbababbaabaaaaababbbaa
aabbbbbbababaabaaabaaabbbbabbabaaaaaababaaabbbba
aabaabbaaabaabaabbbaabaaaaaabbbb
abaaaabbbbbbaaabaaaaabaa
baaabbbbbabbabaaababbbaa
baaababaababaaababbaaabbabaabbba
ababaababbabbbabababbababbaababb
baaaaabbbaaababbbabaaaabbabbbababaaababbaaaababbbbaaababbaabababaababaab
baabaaaabaaababbbbabbbabababbabababbabba
aabbbabbababbabbaabbaaaaaabbbbaa
aaaaaaabbbbbaaaabbbabbabbaabababbbaaaaba
aabbbbbbaaaabbbabbbabaaa
aaaabaaaabbbbbbbbbaabbaa
baaaabbbabbbbabbbbbababa
ababaabaaabbaaaaabaabaabbbbbaabb
babaabbbbabbababbbbbabaaaabbaaabbbbaababaabbaaabbbabaabb
baabbbbbbbabbbbabaabbbba
aaababaaababaababbaaababbbababbaabbbbbabbbbaabbabbbbbbab
baaababbbbaabbbbbbaabaaabbbaabbb
baabaabbaaaaabbabaaabbababbaabbb
bbabaaaabbbababbaabbbababaaabbabbbaabbabaababbabbaaaabab
baabaaaabaaabbabbabbabaabbabbbababbbbbababaabaababbbaaaababaabab
abaaabbabaaabaabbbaaaabababbbbaabaaaabba
aaaaaabaaabaaabbaaabbaaaaabbbaabaabbaaaaaaababaa
bbbbabaaaababbaabaaabbaa
ababababbaaaaaaaaaaaaabb
aabbaabaaaabbaababaaaabaabaabbabaaaaabaabbbabbba
aaaababababbababababbbaa
abaaaaaababbbaabaaababbaababbaabbabbabababbbabbabbabbaab
bbabaabaabbbabaabaaabaaababaabbbabaaaabababbaabaaabbabaa
baabaaaabababaaabbbababa
aaaababaabbabaababaaabab
baaaaaaaaabbbabababbabba
abaababbbabbbaaaaaaaabbbbaaabababaababaaabbbbabaabbbaaaaabbaaaababbaaabb
ababbabbaabaabbbababbabaaabaabab
aaaaaaabbbabaaaababaabbaabbababa
bbbabaabbbbbabaaaaaaaaabbbbaabaabbabaaabaabbaaab
ababbabbaabaaabaababababaaaabbbb
aaabaaabaabaabaaaabaaabaaabaabab
abaaabbbaabbbbbbaaaaabaa
bbababababaabbbbbbbbbbbbababaaabaaabbaba
babbabaababababbabbbbbbbbaabbabbaaabbaab
aaabbbbabbbbbbbababaababbabbaaaaaaababbb
bbaaababbbaaabbbababbabbbbbbbbbbaabbabba
babaaabaaabbbabbaaaabbabbaaabaab
babaaaaaaabaabbbabaaabab
baaabbbbababbbbbbabbbaabbabaaaab
abababbbababbaaabbaaabababababaaaabaaabb
babaabbbababaabaabaabbbb
baabbaaaaaabbbaaaabababaaabbbaabbbbaabbababbbbab
bbababaaabaaaaabbabbbaaaaaababbb
bababbaababababbbbbbaabb
babbbaaababbbaaababababababbaaabbbaabaab
aaaabbbabbaaabbbbaabbbbbbbaabaaabaaabaab
baaaabbbababbaaaaabbbabbbabbbabbbabbbbab
bbabbbabaaaaabbbbabaabbbabbabbaa
abbbbaababaababbbaaabababbbbaabababaaaaabbabbbaaaaaabbaaabbbbaab
ababbbbabbabbbaaaabbbaaababaabaabaababbaaaaabbbbaaaabbbbbabaaaab
bababababaaababaababbabbabaabbaaaaabaabb
bbaaaabbabbabbbabbaabaaaaaaaabbbaaaabbababbabbabbabbbabaabbbaaabaabaaaab
bbaaabbbbaaaabbbbabaaaaaabbbaabb
babaabbaaaabbbaaaaabaaababbbabbaabbbbbabaaabbababbaaaababbbaaaaa
ababbabbbaabbbaabaaaabaa
aabaaabaaaaaaaaabbbbbaaa
baabaaabbabaabbbababbabbbababbab
abaaabbaaaaaabbabbaababa
babbabaabaaaabbbbababbab
aaabbbaaaabbbabbababbaaababababbabbbaabbabaababb
aabaaabaaabbbabaabbaaabb
abaaaabbbaaabbbaababbbbabaababab
bbababaabbbbaaabaabbbabbabbbaababbabaaab
abababbabbabbabbaabbabaabbaabbaa
abaaabbbababbbabbbaababa
ababbbabababbabaaaaabbbaabbababa
baababbabaababaabbaaaaaa
bbbbbaabaaababababaabaaa
babbaabbaabbbaaaabbbabbaabbabaaabbabbabaaaaaaaaababbbbaaaabaabab
aabababaababaabababbbaaabbaabaaabaaaabab
bbabaabababababbbabbbaba
aaababbbaabaabaabbaaaabbbbabaaabbbaababb
baaaabbbbababaabbabababaaabbbbbbaaabaaaa
abbbbabbaabbbabbabababaa
aabbbaaabbbababbbbaaaabaabbbaabb
ababbbabaababababaaaabab
bbaaabbabbabbbaaabbbaaaa
bbaabbbbabaaabbaabababbb
abbbaababbaabaaaaabbaaaaaaaaabaa
baabbabbabaaaaabaaabaaaa
aaabababababbbbabbbbbabaabababaa
aaaaabbbaabaaabbbbbabaabaaaabbaa
aaaaabbbababbbabbababbba
ababbbabababbaabbbaaaaabbbbbbbaa
bbbaaaabaababaabbaababbaabababaa
baaaaaabbbbaaaababbabbaa
baabbabbbbababaaabbabaababbbabbaabaaaaababababbb
abaaaaabbbbaaaababbabbaa
abbabaabbaabbbaaaabbaabbaabaabaaaaababbabaabbabababaabaabbbbbbbbbaaaaabbababbbba
aaabaaabbbbabaabbaababaaabbbbbabbaaaaaaaaababaaaaaababbabaaabbaa
aaaaaaabbaabbaaababbbaababaabaaababbbbaa
bababababbbbbabbaabababbbaaabaaaaaaaaaaaaabbbaaa
babababaaaaabaaabbaaabaa
abbbbabbbababbaababbbaabbababbbb
bbabbbabaabaaabaabbabbbbabbaaaaabbbabbba
aabbaaaabaaabaaaabbbbabaaaaaaaba
baabbbbbbaaabaabababaabaababaaaaaabbaaaabbbbaabbabbabbaa
bbaaaabbbbaaabbabaaabaab
bbbbbababaabbaaabbbbbaba
bbabbababaabbabbaaaababbbbbbbabaaaaaabaa
aaabababaabaabbbabbbabbaaaababaabbbabaaabbabbbbbabaaabab
bbbabbaababbababaaaaaaba
bbbbbababbabbaabbbbaaaba
aabaabbbbbabaaaabbaaababababababbabaaaab
baaabbbabbbababbabababaa
bbaaababbabaaaaaabababbb
bbabbaababbbabbaaaababbb
bbabbbbaabababbababaaaab

View File

@ -1,3 +1,47 @@
.#.
..#
###
42: 9 14 | 10 1
9: 14 27 | 1 26
10: 23 14 | 28 1
1: "a"
11: 42 31
5: 1 14 | 15 1
19: 14 1 | 14 14
12: 24 14 | 19 1
16: 15 1 | 14 14
31: 14 17 | 1 13
6: 14 14 | 1 14
2: 1 24 | 14 4
0: 8 11
13: 14 3 | 1 12
15: 1 | 14
17: 14 2 | 1 7
23: 25 1 | 22 14
28: 16 1
4: 1 1
20: 14 14 | 1 15
3: 5 14 | 16 1
27: 1 6 | 14 18
14: "b"
21: 14 1 | 1 14
25: 1 1 | 1 14
22: 14 14
8: 42
26: 14 22 | 1 20
18: 15 15
7: 14 5 | 1 21
24: 14 1
abbbbbabbbaaaababbaabbbbabababbbabbbbbbabaaaa
bbabbbbaabaabba
babbbbaabbbbbabbbbbbaabaaabaaa
aaabbbbbbaaaabaababaabababbabaaabbababababaaa
bbbbbbbaaaabbbbaaabbabaaa
bbbababbbbaaaaaaaabbababaaababaabab
ababaaaaaabaaab
ababaaaaabbbaba
baabbaaaabbaaaababbaababb
abbbbabbbbaaaababbbbbbaaaababb
aaaaabbaabaaaaababaa
aaaabbaaaabbaaa
aaaabbaabbaaaaaaabbbabbbaaabbaabaaa
babaaabbbaaabaababbaabababaaab
aabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba

262
src/bin/day19.rs Normal file
View File

@ -0,0 +1,262 @@
use std::collections::HashMap;
use std::error::Error;
use std::fs::File;
use std::io::{self, BufRead};
use std::vec::Vec;
#[derive(PartialEq, Clone, Debug)]
enum Rule {
Terminal(char),
NoneTerminal(Vec<Vec<u32>>),
}
fn read_rule(rule: &str) -> (u32, Rule) {
let mut parts = rule.split(':');
let num: u32 = parts
.nth(0)
.expect("Missing rule Number")
.trim()
.parse()
.expect("Unable to parse rule numer");
let rest = parts.nth(0).expect("Missing actual rule").trim();
if rest.starts_with('"') {
(
num,
Rule::Terminal(rest.chars().nth(1).expect("Rule char not found")),
)
} else {
let options: Vec<Vec<u32>> = rest
.split('|')
.map(|o| {
o.trim()
.split(' ')
.map(|r| r.parse().expect("Unable to parse sub rule numer"))
.collect()
})
.collect();
(num, Rule::NoneTerminal(options))
}
}
fn match_rule<'a>(input: &'a str, rule_num: u32, rules: &HashMap<u32, Rule>) -> (bool, &'a str) {
let rule = &rules[&rule_num];
match rule {
Rule::Terminal(a) => {
if let Some(b) = input.chars().nth(0) {
if *a == b {
return (true, &input[1..]);
} else {
return (false, "");
}
} else {
return (false, "");
}
}
Rule::NoneTerminal(opts) => {
for seq in opts {
let mut rest = input;
let mut valid = true;
for r in seq {
let (ok, tail) = match_rule(rest, *r, &rules);
if !ok {
valid = false;
break;
}
rest = tail;
// Weird HACK
if valid && rest == "" {
if *r == 11 {
valid = true;
break;
}
}
}
if valid {
return (true, rest);
}
}
return (false, "");
}
};
}
fn main() -> Result<(), Box<dyn Error>> {
let file = File::open("inputs/day19.txt")?;
let mut lines = io::BufReader::new(file).lines().map(|l| l.unwrap());
let mut rules: HashMap<u32, Rule> = HashMap::new();
while let Some(line) = lines.next() {
if line == "" {
break;
}
let (num, rule) = read_rule(&line);
rules.insert(num, rule);
}
let mut input_lines: Vec<String> = Vec::new();
while let Some(line) = lines.next() {
if line == "" {
break;
}
input_lines.push(line);
}
let count1 = input_lines
.iter()
.map(|l| {
if (true, "") == match_rule(l, 0, &rules) {
1
} else {
0
}
})
.fold(0, |x, y| x + y);
println!("Answer1: {}", count1);
rules.insert(8, Rule::NoneTerminal(vec![vec![42], vec![42, 8]]));
rules.insert(11, Rule::NoneTerminal(vec![vec![42, 31], vec![42, 11, 31]]));
let count2 = input_lines
.iter()
.map(|l| {
if (true, "") == match_rule(l, 0, &rules) {
1
} else {
0
}
})
.fold(0, |x, y| x + y);
println!("Answer2: {}", count2);
Ok(())
}
#[cfg(test)]
mod tests {
use crate::*;
#[test]
fn test_read() {
assert_eq!(read_rule("5 : \"a\""), (5, Rule::Terminal('a')));
assert_eq!(
read_rule("3 : 2 4 | 1 2 3 | 5 7"),
(
3,
Rule::NoneTerminal(vec![vec![2, 4], vec![1, 2, 3], vec![5, 7]])
)
);
}
#[test]
fn test_example() {
let rule_str = r#"0: 4 1 5
1: 2 3 | 3 2
2: 4 4 | 5 5
3: 4 5 | 5 4
4: "a"
5: "b""#;
let rules: HashMap<u32, Rule> = rule_str.lines().map(|l| read_rule(l)).collect();
let inputs = r#"
ababbb
bababa
abbbab
aaabbb
aaaabbb
"#;
let in_lines = inputs.lines().map(|l| l.trim());
let mut count = 0;
for line in in_lines {
let (matched, rest) = match_rule(line, 0, &rules);
if matched && rest == "" {
println!("Matched: {}", line);
count += 1;
} else {
println!("Not matched: {} {:?} {:?}", matched, line, rest);
}
}
assert_eq!(count, 2);
}
#[test]
fn test_loops() {
let rule_str = r#"42: 9 14 | 10 1
9: 14 27 | 1 26
10: 23 14 | 28 1
1: "a"
11: 42 31
5: 1 14 | 15 1
19: 14 1 | 14 14
12: 24 14 | 19 1
16: 15 1 | 14 14
31: 14 17 | 1 13
6: 14 14 | 1 14
2: 1 24 | 14 4
0: 8 11
13: 14 3 | 1 12
15: 1 | 14
17: 14 2 | 1 7
23: 25 1 | 22 14
28: 16 1
4: 1 1
20: 14 14 | 1 15
3: 5 14 | 16 1
27: 1 6 | 14 18
14: "b"
21: 14 1 | 1 14
25: 1 1 | 1 14
22: 14 14
8: 42
26: 14 22 | 1 20
18: 15 15
7: 14 5 | 1 21
24: 14 1"#;
let mut rules: HashMap<u32, Rule> = rule_str.lines().map(|l| read_rule(l)).collect();
rules.insert(8, Rule::NoneTerminal(vec![vec![42], vec![42, 8]]));
rules.insert(11, Rule::NoneTerminal(vec![vec![42, 31], vec![42, 11, 31]]));
let inputs = r#"
abbbbbabbbaaaababbaabbbbabababbbabbbbbbabaaaa
bbabbbbaabaabba
babbbbaabbbbbabbbbbbaabaaabaaa
aaabbbbbbaaaabaababaabababbabaaabbababababaaa
bbbbbbbaaaabbbbaaabbabaaa
bbbababbbbaaaaaaaabbababaaababaabab
ababaaaaaabaaab
ababaaaaabbbaba
baabbaaaabbaaaababbaababb
abbbbabbbbaaaababbbbbbaaaababb
aaaaabbaabaaaaababaa
aaaabbaaaabbaaa
aaaabbaabbaaaaaaabbbabbbaaabbaabaaa
babaaabbbaaabaababbaabababaaab
aabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba
"#;
let in_lines = inputs.lines().map(|l| l.trim());
let mut count = 0;
for line in in_lines {
let (matched, rest) = match_rule(line, 0, &rules);
if matched && rest == "" {
println!("Matched: {}", line);
count += 1;
} else {
println!("Not matched: {} {:?} {:?}", matched, line, rest);
}
}
assert_eq!(count, 12);
}
}