Monster parser! Or Day 19. Whatever.
This commit is contained in:
598
inputs/day19.txt
Normal file
598
inputs/day19.txt
Normal file
@@ -0,0 +1,598 @@
|
|||||||
|
108: 117 50 | 63 64
|
||||||
|
124: 50 64 | 64 64
|
||||||
|
123: 64 119 | 50 85
|
||||||
|
45: 60 64
|
||||||
|
32: 20 50 | 79 64
|
||||||
|
36: 97 64 | 70 50
|
||||||
|
97: 50 64 | 64 50
|
||||||
|
21: 50 104 | 64 83
|
||||||
|
59: 50 124 | 64 83
|
||||||
|
10: 115 64 | 34 50
|
||||||
|
118: 50 124 | 64 4
|
||||||
|
60: 12 50 | 4 64
|
||||||
|
84: 29 64 | 99 50
|
||||||
|
111: 64 27 | 50 14
|
||||||
|
18: 64 101 | 50 29
|
||||||
|
13: 64 45 | 50 1
|
||||||
|
62: 64 97 | 50 83
|
||||||
|
117: 124 64 | 70 50
|
||||||
|
98: 50 4 | 64 124
|
||||||
|
15: 64 114 | 50 12
|
||||||
|
7: 100 64 | 56 50
|
||||||
|
78: 99 50 | 52 64
|
||||||
|
82: 114 64 | 97 50
|
||||||
|
22: 6 64 | 4 50
|
||||||
|
63: 12 50 | 114 64
|
||||||
|
16: 64 52 | 50 70
|
||||||
|
76: 50 46 | 64 13
|
||||||
|
31: 64 69 | 50 67
|
||||||
|
37: 21 50 | 128 64
|
||||||
|
95: 68 64 | 16 50
|
||||||
|
12: 64 50 | 50 30
|
||||||
|
26: 50 12 | 64 83
|
||||||
|
112: 113 50 | 72 64
|
||||||
|
33: 104 64 | 52 50
|
||||||
|
25: 70 64 | 114 50
|
||||||
|
96: 51 64 | 105 50
|
||||||
|
51: 50 47 | 64 26
|
||||||
|
91: 103 50 | 9 64
|
||||||
|
65: 66 64 | 23 50
|
||||||
|
116: 64 114 | 50 97
|
||||||
|
42: 64 54 | 50 40
|
||||||
|
4: 50 64
|
||||||
|
79: 50 97 | 64 29
|
||||||
|
110: 64 116 | 50 118
|
||||||
|
0: 8 11
|
||||||
|
73: 50 12 | 64 101
|
||||||
|
70: 50 50 | 64 50
|
||||||
|
74: 61 50 | 65 64
|
||||||
|
27: 50 107 | 64 90
|
||||||
|
101: 30 30
|
||||||
|
105: 17 50 | 24 64
|
||||||
|
61: 58 64 | 102 50
|
||||||
|
17: 50 83 | 64 29
|
||||||
|
72: 30 97
|
||||||
|
88: 64 38 | 50 2
|
||||||
|
14: 50 36 | 64 2
|
||||||
|
125: 64 50 | 64 64
|
||||||
|
127: 95 64 | 28 50
|
||||||
|
83: 64 64
|
||||||
|
80: 64 107 | 50 81
|
||||||
|
106: 50 101 | 64 29
|
||||||
|
56: 88 64 | 49 50
|
||||||
|
52: 50 50 | 64 64
|
||||||
|
46: 80 50 | 120 64
|
||||||
|
94: 68 64 | 33 50
|
||||||
|
47: 50 114 | 64 6
|
||||||
|
69: 44 64 | 57 50
|
||||||
|
54: 74 64 | 3 50
|
||||||
|
89: 50 83
|
||||||
|
48: 106 64 | 59 50
|
||||||
|
87: 86 50 | 37 64
|
||||||
|
35: 64 73 | 50 55
|
||||||
|
115: 50 99 | 64 70
|
||||||
|
44: 111 50 | 109 64
|
||||||
|
75: 78 50 | 22 64
|
||||||
|
20: 64 101 | 50 6
|
||||||
|
41: 50 4 | 64 101
|
||||||
|
6: 64 50
|
||||||
|
66: 50 93 | 64 115
|
||||||
|
90: 64 101 | 50 124
|
||||||
|
23: 50 82 | 64 77
|
||||||
|
81: 50 114 | 64 101
|
||||||
|
30: 50 | 64
|
||||||
|
100: 122 50 | 75 64
|
||||||
|
86: 50 73 | 64 18
|
||||||
|
92: 64 48 | 50 71
|
||||||
|
68: 6 50 | 114 64
|
||||||
|
121: 50 70
|
||||||
|
8: 42
|
||||||
|
85: 64 112 | 50 110
|
||||||
|
38: 64 104 | 50 4
|
||||||
|
120: 84 50 | 55 64
|
||||||
|
67: 64 7 | 50 53
|
||||||
|
64: "a"
|
||||||
|
55: 50 52 | 64 125
|
||||||
|
28: 89 50 | 84 64
|
||||||
|
71: 50 39 | 64 16
|
||||||
|
109: 43 64 | 94 50
|
||||||
|
99: 50 50
|
||||||
|
43: 41 64 | 77 50
|
||||||
|
119: 64 108 | 50 35
|
||||||
|
57: 87 50 | 96 64
|
||||||
|
39: 64 97 | 50 6
|
||||||
|
104: 50 64 | 64 30
|
||||||
|
29: 50 64 | 50 50
|
||||||
|
34: 83 50 | 125 64
|
||||||
|
2: 99 64 | 124 50
|
||||||
|
11: 42 31
|
||||||
|
114: 64 64 | 30 50
|
||||||
|
93: 50 97 | 64 101
|
||||||
|
58: 50 33 | 64 121
|
||||||
|
113: 64 99 | 50 70
|
||||||
|
128: 64 4 | 50 125
|
||||||
|
40: 123 64 | 76 50
|
||||||
|
107: 50 52 | 64 83
|
||||||
|
102: 126 50 | 25 64
|
||||||
|
126: 50 125 | 64 97
|
||||||
|
19: 50 124 | 64 114
|
||||||
|
24: 114 64 | 29 50
|
||||||
|
49: 20 30
|
||||||
|
1: 64 19 | 50 15
|
||||||
|
103: 26 50 | 18 64
|
||||||
|
9: 64 117 | 50 62
|
||||||
|
50: "b"
|
||||||
|
53: 91 64 | 5 50
|
||||||
|
77: 6 64 | 99 50
|
||||||
|
5: 32 64 | 10 50
|
||||||
|
3: 64 92 | 50 127
|
||||||
|
122: 115 64 | 98 50
|
||||||
|
|
||||||
|
bbabbaaabbabbaaaabbbbbbb
|
||||||
|
bbaabaaaaabbbaaaabaaabba
|
||||||
|
baabababbbbaaaaabbabaaba
|
||||||
|
baaabbbabaabbaaababaabbaaaaabbbb
|
||||||
|
bbbbaabbbabaabbabaabaaaa
|
||||||
|
aabaaaabaababbbbababaabb
|
||||||
|
bbabbbaaabbbbabbbbabbabbbbbbbbabaabaaaabaabaabbabbabbbbbaabaaaba
|
||||||
|
baaaaaaabaabbbaaaaaababb
|
||||||
|
aaabbabaaabbabbbabaaabba
|
||||||
|
abbbbbabbababaabbaaabbbaababbbbaababbabb
|
||||||
|
bababbaabbbbbbaababaaabaaabababbabababba
|
||||||
|
babbaabbbabaabbbbbaaabba
|
||||||
|
abbbbbabbbbaababbababaaa
|
||||||
|
aaabaaababbaaabbbbbabbaaaabbbbba
|
||||||
|
bbaabaaaabbbaaaabbabbbab
|
||||||
|
baabaabababbaaababbababa
|
||||||
|
abbbbbabababaaabbbbbbbba
|
||||||
|
aababbbababbababaaababababbbbbbabaaabaaa
|
||||||
|
bbbbabaabbabaabbbbabbbaa
|
||||||
|
aabaabbbbbbababbbabbbaba
|
||||||
|
abbababaabbbaabbbabaaaababbbaabababbaaaaababbaabbbaabbabbbabaaabbaabaabbbbaaabaa
|
||||||
|
baababaaabababaabaaabbabbbaaaabbabbabaab
|
||||||
|
bbbaaaaabaababaaaaabbaaabbbababbaaabaaba
|
||||||
|
bbababbabbbbbbabbbbabbbbbaabbbabaabbbbababbabaab
|
||||||
|
abbbbbabbbabaabbbabbaabaaababaab
|
||||||
|
bbbbabbbbaababaaaaabbbbabbabbbbbbabbbbaaabaabbabaabbabbb
|
||||||
|
abbaabbabaaabaaaaabbbbaaaaabbbbb
|
||||||
|
aabaababababbbabbbabbbaabaaaabaaaaabbbbbaabbbabbaaabbbab
|
||||||
|
abaabaaabababbaababbabab
|
||||||
|
aabaaaabbbaababbbbabaaab
|
||||||
|
bbbababbabbbbabaaaabababbbabbbabbbbaaaabaaabbbbbaabababbbbababbbbbabaabb
|
||||||
|
aabbaababaabaaaaabbbbbabbbaaabaaaabaabab
|
||||||
|
baabbaaaaaaabbabbbababab
|
||||||
|
abbbabaabaabbbabbabaaaabaabaaaababaabbbb
|
||||||
|
aabbbabaaabababaabbababb
|
||||||
|
abababbbabaaabbaaaaaaababbabaabbbabbaaaabbbbbaab
|
||||||
|
abbabbaabbbaabbbabbaabaa
|
||||||
|
baabababbaabbaaabaaababb
|
||||||
|
aababaabbbabbababbaabababaaaabbabaabbaab
|
||||||
|
bbaaaabbbbbbababaabbbaaaabaabaaabbbbbbba
|
||||||
|
abbaabbbbaababaaaabaabaa
|
||||||
|
aaaaaabbabbaabbbbaabbabb
|
||||||
|
bababababababaabaaabbaabbababaababaabaabababbaba
|
||||||
|
ababbbbabbbbabaaabbbbbba
|
||||||
|
babaaabaaabbababbabbbbaa
|
||||||
|
bbabbbbabbbbbbabaaababbbaaabbabbbabbabbababbabbbbaabbbaabbababaa
|
||||||
|
bbaabaaaaabbbabaabbabbba
|
||||||
|
babababababbaabaaabbbbbb
|
||||||
|
baabbbabaabaabbabaabbbbb
|
||||||
|
babbbbababbaaabbbaaabbaabababbaabababaabbbbbaaabaaaaaaaa
|
||||||
|
aabbbabbababbbbaaaaaabaa
|
||||||
|
bbbababbababbbbabbaaabba
|
||||||
|
aabbabbaababaabbbbaababa
|
||||||
|
abbabaaabbbaaaaabbbababaaabbababbabbbaab
|
||||||
|
babaaaaaaababababbbabbbbbbbbbbaa
|
||||||
|
abaaababbabbbbbabaabaabb
|
||||||
|
babbbabbabbbbbabababbbbaaababbab
|
||||||
|
aaabbbbabababaabababbbbaabababab
|
||||||
|
baaabaabbabaaaabbababbaabbbabbbaabbbabbb
|
||||||
|
babaaabbabbabbabbabbbaba
|
||||||
|
bbaabbbababbbbabaaaabaaaaabbabababaabaab
|
||||||
|
abaaabaaabaabababbaaaabbbabbabab
|
||||||
|
bbbaaaababbabbabaaaaabab
|
||||||
|
bbbbababbaaabbaaabaabbbb
|
||||||
|
abbbbabbbaaaaababbbbbbba
|
||||||
|
bababbabaababbbbbababaaa
|
||||||
|
bbababbabbbbabbbbbababaabbbbbbbbabbbbabbbbaababa
|
||||||
|
baaaaababaabababaabaaabb
|
||||||
|
baabaababaaabbaaabababab
|
||||||
|
baaaaaaabbbababbbbbaabbbaababaaa
|
||||||
|
ababaaabbabaabbbabababba
|
||||||
|
baaabbbaabbabaaabbaaaaabaaaabbabbabbbbbbbbbaabaa
|
||||||
|
bbbababbabbbaaabaababaab
|
||||||
|
aaaaaabbaabbbaaabaaaaabb
|
||||||
|
babaaabbbbabbaaabbabbaab
|
||||||
|
aaabbaabbbababaaabaabaababababab
|
||||||
|
aaabaabbbabbaaaaababaaabababaabb
|
||||||
|
bbaaaabbbaaabbbaaababaaa
|
||||||
|
bbabbbbabbbaababbabbabba
|
||||||
|
baabababaaababaababaaaaaaababbab
|
||||||
|
baabbaaaaaabaaabbbbbaaaa
|
||||||
|
babbaaababaabaaaaaaabbbb
|
||||||
|
babaaaaaaaaabbabaabbababaabbabbaababaaabbbaabbaaaaabbbbb
|
||||||
|
abababaabbabaabbbaabbaaabbaaaaaa
|
||||||
|
bbbbbbaaaaabbabbbabbaaaabaabbbaababbbbbbbaabbbbaabbbababaabbaaababaababbabbbbaaaaabaaaaaaabaabab
|
||||||
|
bbababaabbbbaabbbbaabbbbbbbbbbbabbbaabbabbbbbabbabaaabaaaaabaaaa
|
||||||
|
abbbaabbbbbaabbbbabaabaabababbbbabaabbab
|
||||||
|
babaababaaababaabbaabbbbaaabaaabaaababbbabbbaaaabbabbbbbbbaababaabaabbbbbbbbbaaaaaababaa
|
||||||
|
babaabaababaabaabbaabbbb
|
||||||
|
bbbbbaaabbababaaabaabbaaaaaaabbbabbabaabbaaaabba
|
||||||
|
babbbbbbaaabbbabbbbabaaa
|
||||||
|
abaabaaababbbbabaababbab
|
||||||
|
bbaaabaabaaaaaaaaaabbbabaabbbbbb
|
||||||
|
aaabbbabaaaaaabbaabbaabbbaabaabaaabbababaaabaaababbbabab
|
||||||
|
aaabbaabaabbabaabbbbabbabaaabaabbaabbabb
|
||||||
|
babababaabaabaaababbaaba
|
||||||
|
babbbbbbabababaabaabbaba
|
||||||
|
baabbbabbbaaaaabababbaabaabbbbaaababaabaabbaabaaaaaabbaabbaaabba
|
||||||
|
abbbabaaabbbaabbbbaaabba
|
||||||
|
baabbbabaabbbbaaaabbbbbb
|
||||||
|
bababbabaaaabaaaaabbbbaaababaaaaaaababbaaaabbbbbabaabbab
|
||||||
|
abbaabbbbbabbbbbaabbbaab
|
||||||
|
ababbbabababbbaaaabbbabbbbaabaabbbbaaabbbaababbaaaaabbbbbaabbabb
|
||||||
|
aaababaaabbaabbbabbbbaaa
|
||||||
|
bbbababbbabbbaaaaabbbbaabaaabbaabbabababaaaaabaa
|
||||||
|
babaabaaabbaabbbbbbbabaaabbaaabbbaababbaabbbbbbbbaabaaaa
|
||||||
|
bababaabaabaaaabbaaaabba
|
||||||
|
baabbbbabaabababbaaabbabbbaabbbaabbbbabaababaaaaababbabaaabaabaaaaaababb
|
||||||
|
aabbbabbbbabbaaaaaaaabba
|
||||||
|
bbbaaabbaabbababbaabaaaa
|
||||||
|
abbbbbababbaabbbbaaabaaabbbbbabbbaaababaaabbaaababaabaaabbbabbaabbbbbbababaababb
|
||||||
|
babbbbbbababbbaabbabbbab
|
||||||
|
abbaabbaaababbbabbaababa
|
||||||
|
aaabbbabbabaabaaabbaabbbabbaabbbaaaaaaaa
|
||||||
|
abbbbabbbbbbabababbaabab
|
||||||
|
bbbbababaaabababbbbbbbba
|
||||||
|
bbbabaabababbbabbaaaabbbbababbabbabababa
|
||||||
|
aababababbbababbbbaabaaaababbababbbbaaaaabbbbabaabaababbabbbaaabbabbaaaabbbbababbabaabab
|
||||||
|
aabbaaabababbbaaabbaabaabababaaaaaaabababbabaaab
|
||||||
|
bbaaaaabbabbbbbabbabbbab
|
||||||
|
babbaababbbbabbbbbabaaab
|
||||||
|
aabababaaabbababbbbbaaba
|
||||||
|
babbaaaabbbaabbbbbbbabaaabbbbbba
|
||||||
|
bbaabaabbbabbbbaabaaababbaabababaabaaaaa
|
||||||
|
abaaababbababbaaabbbbbbb
|
||||||
|
bbaaaabbabbabaaaababbabb
|
||||||
|
aaabababaababababaaabbbb
|
||||||
|
ababbaaaabbbaabbbaabababbaaabbababbabbbabbaaabbb
|
||||||
|
aababbbaabababbabbabbbabbbaabababbbaababbabaabbabaababaa
|
||||||
|
baaabbbababbbabbbbaabaababbbbabbbabababbaabbbbba
|
||||||
|
aabababbaababbbbabbbaaaababbbbabbbbaaabbbabbbabaabaababb
|
||||||
|
baaabbabababbaaabaaaabab
|
||||||
|
aababbbaaabaabbaababbabb
|
||||||
|
aaabbaaaaababbbbbaabbbbbbaaaabaa
|
||||||
|
bbbbbaaababaabaaabbaabbbbbabbbabaaaaabab
|
||||||
|
aababbbbaabaabbabbabbaab
|
||||||
|
bbbaaaabaaaabaababbbbbbb
|
||||||
|
abbabaaaaaaabaaababaaabaaaababbbabaaabbb
|
||||||
|
abbbaaabbabababaabbbbbaa
|
||||||
|
baababaaaaababababababaabaaabbbaabaabaaa
|
||||||
|
bbbbbbbbababbbbabbabbaab
|
||||||
|
ababbaabaabaabbbabbbbbbb
|
||||||
|
babaaababaabbaaaabbabbaaababbababbabbbaaababbbabbbabbbabbabbbabb
|
||||||
|
babaabbabbbaaababbaaaaaa
|
||||||
|
bababbbaabababaabababaabaaaaaabbbbbababa
|
||||||
|
bbbbaabbababaababaaaaaab
|
||||||
|
ababbabbbabbbbaabaabbbbb
|
||||||
|
aabababbabababbaababaabbbbbaabaaabbbbbababbbbbabbbbbabbbbababbabbaababaa
|
||||||
|
ababbbababbabbaabaaaaabb
|
||||||
|
babaabbbbabbabbbaaabbaabbaabbbababbbabba
|
||||||
|
abbbaaabbaababaabbabaaba
|
||||||
|
bbbabaabbabaabbbaabaabab
|
||||||
|
ababbaaaaabaaaabbbaaabab
|
||||||
|
baababababbabbaabbababab
|
||||||
|
abbbbbabbbbbaabbaaaaaaab
|
||||||
|
baaaabbbaababaaaaabaaabbababbababaaaaabbbaaaabaa
|
||||||
|
bbbaaabbabbbaaaababaaaaa
|
||||||
|
bbbbaabbbbabbaaabbaaaaba
|
||||||
|
aaaabbabaaabbabbaaaabbba
|
||||||
|
abaabaaabbbaaaababbaaabaabbbaaabbbababaaaabbaabbabbabaababbabbbb
|
||||||
|
aaabaabbbbaabaababbbaaababbbaaba
|
||||||
|
baaabbbbbabbababbabaabab
|
||||||
|
babbbabbabbabaaaaaaaaabbbbaaaaaa
|
||||||
|
ababbaaaabaababaaaabbbbb
|
||||||
|
bbbaaabbbaabaababaaabbaabbbbbbaaabbbbbaa
|
||||||
|
ababaaaabbbbbbbbabaabbaa
|
||||||
|
bababaababbbabaaaabbabaa
|
||||||
|
babbabaababbaaabbabbbbaababaababbbbaaaaaaaabaabaaaaaababbbabbbbaaaabbbaa
|
||||||
|
baaabaaaabbbabbabaababbb
|
||||||
|
babaaaaabababababaabbaabbaabbbbabbabbabbbbaaaabababbabbbaabbbaaa
|
||||||
|
baabaababbaabbbaaababbab
|
||||||
|
aabaabababaabbbabbbabaaaabaaabaababbabbbaaabbbbbbaabbbaabaaabbbbaababbbbaabbaabb
|
||||||
|
aabbbabbbbaabaaabbbbbabb
|
||||||
|
aaabbaabaabbabbabaaaabba
|
||||||
|
baaabbbaaaabbaaababbabba
|
||||||
|
abaabbbababbbbababbaaaaa
|
||||||
|
bbaaabaaabbbbababbbaababbbbbbaaaabbaababaaabbbbb
|
||||||
|
ababaaaabbbbbaabbababaabbbabbaaabbbbaaba
|
||||||
|
aabbabaaaabbbabbbaabbbbaababaababbbabbbbabaaabaabbaaaabbaabaaaaa
|
||||||
|
bbbabbababbaaabbbaabbaaabaabbbaaaabbbbaabbababaaaabababb
|
||||||
|
babaaababbbbbaaaaabaaabb
|
||||||
|
abbbabbabbbbaabbbbabbbaa
|
||||||
|
bbbbabbbababbaabbbabaaaa
|
||||||
|
abbbaabbbbbbbaaaabbababa
|
||||||
|
bababaabbbbbbbbbaaaaabbb
|
||||||
|
babaaaababaabababbaabbaa
|
||||||
|
abbbaabbabaababaabaaabaaabbbabaabbaababa
|
||||||
|
bababbababbabbaabbaaaaaa
|
||||||
|
babbaaaababbaaabbbabaaaa
|
||||||
|
bbbbbaaaaabbababaaaaabaa
|
||||||
|
abaababaabaaabaaabaababb
|
||||||
|
baabbbbababbaabbbbbbbaba
|
||||||
|
bbabbbbbbbaaaaabbbaaaaabbaabbbaabbbbaaabaaaabbaa
|
||||||
|
aaabbbaaaaaaabbbaaabaabbaaaaaaaabbbaaabbbbbbbaba
|
||||||
|
aabbbababbababbaaaaaabbb
|
||||||
|
bbaabaaaabbaaabbabbabbababaaabbabbaaabba
|
||||||
|
babbaabbabbbbabbbabbbaaabbbaabbbbabbbaababaabbabbabbbbaa
|
||||||
|
bbbaabbbaababababaaaaaab
|
||||||
|
bbaaabaababaaabbaabbabbb
|
||||||
|
aaabaabbbbabbbbbababaabb
|
||||||
|
babaabbbbbbaababaabbbabbabbbabaabbabbaaababbabba
|
||||||
|
babbbbbabaaabbbaaaaaabab
|
||||||
|
aaabbbbabbababaaababbbbb
|
||||||
|
abbbaaaabaaaaababbabbaba
|
||||||
|
baabaaabbbbabbbbaabbbbaababaaabbabaaabba
|
||||||
|
ababaababaababaaaaabbbaa
|
||||||
|
baaabbabaaabbaabbbbbabaaaaaabbaaaaaabaaabaabaabaabaaabbaaabbababaaabbababbaaaaba
|
||||||
|
baabaabaaaaaaabbabbabaaabbabaabbbbabbbbabbabbaabbbabbbabbaabaabb
|
||||||
|
aabbbaaabbbabbbbbbbbbbba
|
||||||
|
aaabaabbaababbbabbabaaaa
|
||||||
|
aaabbabbabbbbbbaaabbbbbbabbbbaaa
|
||||||
|
aabbbbaaaabababaaababbbaaaabaaaa
|
||||||
|
bbaabaabbbbbbabababaababbbbbabaabbbbabaaabbabaab
|
||||||
|
aaabaabbaabbabbabaaaaaab
|
||||||
|
baaaaabaababbbabbbbaaaaa
|
||||||
|
ababbaabaaabaabbabaaaaba
|
||||||
|
baabaabaabababaababaaabbbbabbabb
|
||||||
|
baabbbabbbababbaaababaaa
|
||||||
|
aabaaaabaabaaaabbabababb
|
||||||
|
babbaababaabaaabaaaabbba
|
||||||
|
abbaabbbaabbbaaabaaababa
|
||||||
|
aabbbabbaababbbbbbaababbbbbbbbaaabaaaabb
|
||||||
|
babbabbaababababbaaaabbbbaaaaaabbaaabbbbababbbabaabababa
|
||||||
|
baabaaabbababbabbbaababa
|
||||||
|
babbbabbbbabbbbbabbababa
|
||||||
|
aabbababbbbbbbbbabbaabab
|
||||||
|
bbbbbaabaabbabbaabaaaabb
|
||||||
|
babbbbbbbabaaaabaabbbabbbabaabbbbbababaabbbbaabbabaaabbb
|
||||||
|
bbabbbbaaaababbabaaaaaab
|
||||||
|
abaaaabababaabbaababaabb
|
||||||
|
aaabbbabababbaaaaabaabbaababbbaabaaabbab
|
||||||
|
aaaabbabbababbbabaabbaab
|
||||||
|
bbaaaaabbbaabaababbabbba
|
||||||
|
baaabaaabaabbbbaaabaaabb
|
||||||
|
aababbbbbbbababbbaaabbbbbbaaabba
|
||||||
|
aaaabaaabbbbbbbaabaabbab
|
||||||
|
aabaabbabbbaabbbaabbabbababaabbababbaaabaabaabaaabaaabba
|
||||||
|
baababaabababababbbbbaba
|
||||||
|
bbaabaaabaaabbababbababa
|
||||||
|
abbbaaaaaaababaabaaabbaabaaabbaaaabbaaba
|
||||||
|
abbabbabbbbaaabaabaababb
|
||||||
|
babbabbbaabbbaaaaaaababb
|
||||||
|
bbbabababbaabaabaaabaaaa
|
||||||
|
bbbabaaabaababbabbaaabbaabaabbaa
|
||||||
|
baaaaababbbbbaabbbabbabb
|
||||||
|
baabababbaaabbbabababbaaababbabbabbbbbbb
|
||||||
|
abbbaabbabaaaaaaabaaaaaaaaabbbbababbaaaaababbababaabbbbbbabbbaababbbbaaa
|
||||||
|
aaabbabbbaaaaaaabababaababaaaaab
|
||||||
|
babaaaaaaabbbababbbbabbbabbaabbbaaabbaaaaaaaaaab
|
||||||
|
aabbbabbbababbaabbbababaabbaabbabaaaaabb
|
||||||
|
babbaaabbaabbbaabaabbabb
|
||||||
|
abbaabbaaabababbababbaba
|
||||||
|
abbbbbabbbbbbbbbbaabbabb
|
||||||
|
bbbaabbbbabaabaababaababbabbbabaaabaaabb
|
||||||
|
baabbbbabbbbbbbbbbbbaabbababbabb
|
||||||
|
aaabbbbaabbabbaaaaaababa
|
||||||
|
aabaabbabbbaaabababbbbbaaaaaaababaabbaba
|
||||||
|
abbabbabbaabbbabaaaabbaabaabbabbababbbbbbbaaaaaaaaaababbbbbaaabaaabaaaaabaaaabaa
|
||||||
|
aaababaaaabbababbaabbbaabaababaaaabaaabaaaaabbaa
|
||||||
|
baabaaabaaaaaaaaaabaaabbbbbbaaab
|
||||||
|
abaaabaaaaaaaabbbbaaaaba
|
||||||
|
babbaaabbbaaabaababbbaba
|
||||||
|
babbbbbabbaabaababbababbbabbabbabbbbbaba
|
||||||
|
aaaaaabbbaaaaaaaabaaaabaabbaabbaabbabbbbbbababbbaaaabbbb
|
||||||
|
bbbaababababbaabbbbabaaa
|
||||||
|
aaaaabbabbaaaaabaaabbaabbbabbabaababaabbababbaaababbabaabbbaaabbabbbbabb
|
||||||
|
babaabaaaabbbaaaaabbaaab
|
||||||
|
bbbbabbbbaaabbbabbbaababaaabbaabbabbbaba
|
||||||
|
aabaabaaabaaaabbabbabababaaabbabbbaaaabbbbbbaaaaababbaabaaabaabaabbababb
|
||||||
|
ababbaaaababbaabbaaaabbabababaababbaaabb
|
||||||
|
abababababbbabbbaabbbaababbabaab
|
||||||
|
babbbbabbbbababbbbbbbbabbbababbb
|
||||||
|
aababbbbabaaaabaaabaabab
|
||||||
|
bbbaaababababbababaababb
|
||||||
|
bbbabbbbbabbbabbaabaabab
|
||||||
|
baaababbaaabbbaaabbbabaaabaabaaaaaaabaaaabaababa
|
||||||
|
bbbbbbbbbbabbbbbbbbbbbabaaabbbaaabbbbaab
|
||||||
|
babbabbbbbbbabbbbbaaabba
|
||||||
|
babaaababbbbabaaaaabaaabaababababbabaaab
|
||||||
|
abaababaababbaaabbabbbbbabbabbab
|
||||||
|
bbbabbbbaabaaaabbbabaabbaaababbaaababbbbabaaaabbbbbabbbabaaaabab
|
||||||
|
babbbbbbaaabaabbbbbabbbbbabaabaaabaaabaabaaababa
|
||||||
|
abbabbababbbbababbabaaab
|
||||||
|
ababbaaaabaaabaabbaababb
|
||||||
|
aabaaaabababaaaabbbbaabbabbbaaaaabbaaaab
|
||||||
|
babaaaaaabbbaaaabababaababbbabbababaabaababbbbaaaabaabab
|
||||||
|
abaaaaaababbaabaabbaaaaababbaabbbabbbbbbbaaaabbbabaabbabbbabababaaababba
|
||||||
|
aabbbabababbaabbababbabb
|
||||||
|
aaabbaaaabaabbbaababaabb
|
||||||
|
bbaabbbabbbbababaaabbbabbbbbabbabaaaaaabaabbbbaaaaabbaabbaaaaaaa
|
||||||
|
babaaaabaaabbabbaaabbaba
|
||||||
|
aabbbbaabbbabbaabbbbbbba
|
||||||
|
bbaaaaaaabaabbaaaabaaaba
|
||||||
|
abbbaaabbabbbbbbbbbbabaababaaabbbbaabaaaabbbbbbaabaabbaaabbbababbbbabbba
|
||||||
|
abbaabbbaabbabababaaaabaabbababbabbbabbb
|
||||||
|
abbaaabbbbaabaaabbbbabbbbabbbbbbbaababbb
|
||||||
|
bbabbbbaabbbaaaabbbaababbbababbababbabba
|
||||||
|
abaaabaaabaabaaabbabbbaa
|
||||||
|
aaabbbabbbbbababaaabaaba
|
||||||
|
aabaabbabbbaaaabbabbabba
|
||||||
|
abbaaabbbbaabaabbababaaa
|
||||||
|
aabbabababbaaaaaaaaaabbbabababaabbbaaabbbbbaaaaa
|
||||||
|
aaaabbabbaababaabaaabaab
|
||||||
|
bababbaaaaabbaaaabbabbbb
|
||||||
|
abbaabbbabaaababbbbaababbabbaaaaabbbaaababbaaabaabbbbbba
|
||||||
|
aabbbabaaaabaaabbaaaabaa
|
||||||
|
bababbaabababbaabaabbaba
|
||||||
|
bbaabbbbbbbbaaaaabaabbbb
|
||||||
|
bbbbbbabbabbbbbaabbbbaaa
|
||||||
|
bababbbabaaabaaabbbabaab
|
||||||
|
baaaabaaaabbbbabbabbabbaaaaabbaa
|
||||||
|
bbbbbbabbaabbbabaabbbaab
|
||||||
|
baabaabaabbbaabbaababbab
|
||||||
|
aaabbaaabbbbababaabbababbabaabbaabaabbbabbbabaab
|
||||||
|
baaaaaababbbbbbabbabababbbaaabbbaabaaaababbbabbbaababaabbbaaaaabbaabbbbbabbababb
|
||||||
|
abbbabbabbaaabaabaaabaab
|
||||||
|
abaabbbabababbabababaabaabbabbabaabbaaaabbbbaaaa
|
||||||
|
bbabbabbbbbbaaabaabaababababaabbabababba
|
||||||
|
abaabbabbababaaabbabbababbabaaaababaaaaaaaaaabaabbbbaabbbbbbabaaaaaababbbbabaabaaababbba
|
||||||
|
bbaabbaabbbbbbabbabaaaabababaabbabbabbabbabaaabb
|
||||||
|
abbbaabbbbbaabbaabbbabab
|
||||||
|
bbbbbaabaaaabaabbaaababbabaaaabbabababbb
|
||||||
|
aabbbbbabaabaababaaabbaaaabaabbaabababbbaaabbbbb
|
||||||
|
aaaabaaabbbabababaaabbaaaabbabababbaababaababbaaabaaabba
|
||||||
|
bbbbabaaababbaaabbabaabbbabbaaaaaaaaaaab
|
||||||
|
babbaaaababbbbbabbbabababaabaabb
|
||||||
|
baabababbbbbabbbabbabbba
|
||||||
|
babaabaaaaabbaaaaaaaaaaa
|
||||||
|
bbbaaaabbabbaabbbabbbaba
|
||||||
|
abbaaabababbbaaabbaababb
|
||||||
|
aaababaabbabaabbbababaaa
|
||||||
|
baaabbaaababbabbbabaaaaaabaabbbbaaabaabaababbbbbbbaaaabbaabbbaabababbabbababbaaa
|
||||||
|
bbaabaabbbbababaaabbaabbaaabababbbbabaaaaaaaaaabbaaaaabbababbbbb
|
||||||
|
aaababbaabababaabbbaaabbbbabbaab
|
||||||
|
aabbbabaabbbabaabaabaaaa
|
||||||
|
ababbaaababbaababbabbaba
|
||||||
|
babbabaabbaaabbbabbbaaaaaabaabababaabaaaabaaabbbabbaabbbbabbabbbabbbaaab
|
||||||
|
ababbaaaababbaaabbbbaaba
|
||||||
|
bababbaabaabaaababbaabab
|
||||||
|
babaabbaaabaabbaabbbbabbaababbbabaaaabaaaababaab
|
||||||
|
babbbaaaabbbbbabaabaaaabbbabaaaa
|
||||||
|
abaabaaabababbabbbabaaab
|
||||||
|
babaabbabbbbabaaabaaaabaabbabbabaaaabbab
|
||||||
|
aaabaabbaabbbababbabbbbbaaabaaaa
|
||||||
|
ababaababbbaabababbaaaaabababbbbaabbaaba
|
||||||
|
aabbbabbabbabaaaabaabbab
|
||||||
|
bbabbaaabababbaabbababbb
|
||||||
|
baabbababbababbaaaaabbbbaabbbabaabaabbbbbabaabaabbbbbaaa
|
||||||
|
aababbbabaaaaaabbaaabaab
|
||||||
|
bbbbabbbaaaabaaaababaaaabbaaaaaaababbabb
|
||||||
|
baababbbaabaababbbababbbbbbaababbbbbaaabaaabbababbabaaaaababaaabaaaaabbabbbababb
|
||||||
|
baababaabbbabbbbbaaaabab
|
||||||
|
abbaaababbbaaabbbabababb
|
||||||
|
bbaaaaabbabbaabbababbabb
|
||||||
|
aabaabbaababaabaaaabbaba
|
||||||
|
bbbaababaaabbbbaabbaabbbbaaabababbbbbaba
|
||||||
|
bbaabbbabbaabaabaaaaabaa
|
||||||
|
aabaaaabbaaabbababaabbbabbbaaabbaabaaabaaaaabbba
|
||||||
|
babbaaabbaaabbaabbabbabb
|
||||||
|
bbbaababaaabbbabbabaabab
|
||||||
|
aaababaabbaaabaaaabaabbaabaabbab
|
||||||
|
aaababbaabaabaabbaaaaabbbbabbaaaaaaabbababbbaaaabaabbaabaabbaabbbbbabbab
|
||||||
|
aaaaaaaaabbaabaababbbbbababaababbabbaabbababbbabaaaaaabaabbbabab
|
||||||
|
baaaaabbabaaaabbaaababbabaabbaababbbbbabaaababbbbbbbbaaaabaaabababbababbabbabaababababab
|
||||||
|
abaaaaabbaabababbabaaaababbbaaaabbaaaaaa
|
||||||
|
ababaaaabbbbbaaaababaababaabbabbbbaaabab
|
||||||
|
bbaaaabbaabbbabbabbaabab
|
||||||
|
baabaabaababaabaaaabaaba
|
||||||
|
baabbbabbbaabbaabbababaabbbaaabbbaaaabaabaabbbbbaabbabaaabbababbbbbbbaabbabbaaabababaabb
|
||||||
|
aaaabaaaabbaaababbabbaba
|
||||||
|
aabababbaaabbbababaababb
|
||||||
|
ababaaabababbbabbbabbbab
|
||||||
|
abbbabbaaaababaabaaabbaaababbbbaaabbabbaaaaaabaabaaabbbbbbaaabbaaaaaabba
|
||||||
|
baaaabbbbaabbababbabbbabbabaaaba
|
||||||
|
baabaabaaaaabbabaabaabbbbaaaabbaabaaabbb
|
||||||
|
abbaabbbababbaaababaaababbbaaababaaaaaabbbababab
|
||||||
|
aabbbbaaaaaabaababbaaaababaaabbbaabbbaaaabbbbbababbbaabaaaaabbabaaaaaaaa
|
||||||
|
baaaaaaabababaabababbaba
|
||||||
|
bababbbaaabbababbbaaaaba
|
||||||
|
aaababbaaabbabbaababbbbb
|
||||||
|
aabababbabbbbabaabbabaaaabaabbbabbababbabababbabaaaaabba
|
||||||
|
abbababbbaabaabbbaabbaaaabaaabbaababbbbbbbbbbabbaababbaabaabaababbbabbabaabbabbbbbaaaabbbbbababb
|
||||||
|
aabbabbaabaababaaaaaabba
|
||||||
|
aabbababaaababbaabaabbab
|
||||||
|
abbbbbaababbaababbababaabbaaaaaabaaabababaaaabbbbbaaabbb
|
||||||
|
aaaaabbabaababbaaabaabaa
|
||||||
|
babbbaaabaabbbbababaabbaabaaaaabbbabbbaaabbbabbbbabbbbaa
|
||||||
|
aaaabaabbabaaaababababba
|
||||||
|
abbbabbbaaaaabbbbbaabbaa
|
||||||
|
bbbaaaabbbaabbbababaaabbbbababaabbaaaaaa
|
||||||
|
aaaabaabbbbaaaabbbbabbab
|
||||||
|
aababbbbbaabababbbaaabba
|
||||||
|
baabbbbababbbabbaabbabbabbbababbaaaaabab
|
||||||
|
bbabbbbabaabbaaabaabbbbb
|
||||||
|
ababbaabbbababbabbababab
|
||||||
|
aaabababbbbababbabaaababbbabaaba
|
||||||
|
aaabababbaaabbbabbabbabb
|
||||||
|
bbbbbbabaabaaaabbbaaabab
|
||||||
|
abbabbaabbbabbaaabbaabbbaabaababaababbab
|
||||||
|
abbaabbababbaaaaabbaabbaaabaabbaaabbaaba
|
||||||
|
ababbbabbaababbbbabbbbaaaabbaaabaaaaaaab
|
||||||
|
baabbbbaaaababbbaabbbbbaaabaaaaa
|
||||||
|
bbbababababbaabaaaaaabaa
|
||||||
|
baabababbbbaabbababbbbbaaaababbaabaabbbaaabbabaabbaabbbb
|
||||||
|
aabbbaaabbbbbaabaaabbaba
|
||||||
|
babbbabbaabbaabbbaabbaab
|
||||||
|
bbbabaabbbbaabbaaaabbabbaaabababbbabbaaaabbbaabbbaaabaaababababb
|
||||||
|
bbbaaaabbbabbbbabbbabbba
|
||||||
|
aabbbabababaaaaabbbabbaaaabaaaba
|
||||||
|
bababbaababababaabaaaabb
|
||||||
|
bbbaaabbbbbaabbabbbbbbaabbaabbbb
|
||||||
|
abbbaabbbababaabbbaaaaba
|
||||||
|
abababaabaaabbbabaaabbabbabaaaabbbaaabab
|
||||||
|
bbbabbbbbbbaaaaabbbbababbbabaaabababbbbb
|
||||||
|
abaaaaaaababbaababbaaabaabbaaaab
|
||||||
|
bababaababbbabbabbabaaba
|
||||||
|
babbaababababaabbbbbbbbbabbababbbababbbb
|
||||||
|
bbbaaabbbbababaababbbaba
|
||||||
|
aaabbbbaabbbababbababaaaaaabbbbaababbbbbabaaababbbabbbaaaaaaaabaaaaaabaa
|
||||||
|
bbaabbbabbbbbbaaaaaaaaab
|
||||||
|
baaabbbabbbaaaaaaabbaaaa
|
||||||
|
aaaabaaaaabaabbaabbabbbb
|
||||||
|
abbbbabbbaababaaabababbbbaaabaabaaaaabaabbbbabbaabbabbbb
|
||||||
|
aaaabaabbbababbababbaabbbbabaabbbbbbaaab
|
||||||
|
bbbbbaaabbbaababbbbababbbbabaabbaabbbbba
|
||||||
|
aaabbbbababbbabbbbbaababbbbbbbbbbbabaabbaaaaabaa
|
||||||
|
aabbbabaababaaabbabbbaba
|
||||||
|
bbbaababbbbbbbbbabaabbaa
|
||||||
|
ababaaababbbbbabaaaaabab
|
||||||
|
bbbababbbababbbaabbababa
|
||||||
|
bababbbaabbbabbababbabaa
|
||||||
|
bbbababaabaaaabaaaaabbbb
|
||||||
|
ababaaabbbbaaaabbbabaaba
|
||||||
|
aaababaabbbaaabbbbbaaaababbabbbb
|
||||||
|
babbbbabbababbaaababaaaaabaababbabbbabbb
|
||||||
|
bababbabbabbabbbaabbababbaabbaaaaabbbaabaabbaabbbbaaabbaabbabbbabbbbbaab
|
||||||
|
babbaababaaabbaaababaaaabbbaabaa
|
||||||
|
bbabbbbabaabababbaaabaab
|
||||||
|
abbbaaabaaababbaabaabbab
|
||||||
|
bbbababbbbbabbbbbbabbabb
|
||||||
|
bbbbbaababaaaabaababaabb
|
||||||
|
abbabaaaabbbaaaababbbbab
|
||||||
|
ababbbabaaabbbabaabbbbaaaaabbbbbaabaaaba
|
||||||
|
bbaaabaaaaababaaabaabbbb
|
||||||
|
abaaabaababaaabbbaaabbaabbbbabaabbabbaab
|
||||||
|
bbbbbababbabaababaababbbaabbaabaaabaaaaaaabbbbba
|
||||||
|
aabbbabbabbaaababbababaabbbabababaaaaaaaaabaabaabaababba
|
||||||
|
abaaaababbbbbbababaabbbabbbaaaaaababbabb
|
||||||
|
babbbbbaaaaabbabbaaaaabb
|
||||||
|
aaabaababbaabbaaabbbbbabbbbababbaabbbbbababbbaab
|
||||||
|
abbabaaabbbabbaababbaabbaabbbbba
|
||||||
|
babaaabaabbbabbaaaaabbaa
|
||||||
|
baabbbbabaaaaababbbaabbbaaaabbbb
|
||||||
|
aabbaabbbbbaaaabbbbabbaaabbabbababbbbaababaababb
|
||||||
|
abaaaabbbbaaababbbbbbabb
|
||||||
|
abaaaabaababbbabaabaaabb
|
||||||
|
abaababbaabaababbaaabbbb
|
||||||
|
bbabbabbabababbaaaabbabaabababab
|
||||||
|
aaaaaabbbabaaaabbbbbbbaabaaaaabbaababbabbabbbababaaaabba
|
||||||
|
bbababbabaaababbababbbbbbabbabab
|
||||||
|
bbabbaaababbbbaababbaaab
|
||||||
|
baaaaaaaaabababbaabaabaa
|
||||||
|
abbaaabbabbbaaaababaaabaababaabaababaabb
|
||||||
|
abaaaaabaaababbaaaabaaab
|
||||||
|
abaaaaaabbaabaaaaaabbaabababbbaaabbbabbbbaabbaab
|
||||||
|
abbaaabbbbaabbaaaabbbaaabaabaaaa
|
||||||
|
aabaaaabbbbaaaabaaababbb
|
||||||
|
abbaabaabbbbababbabbaaababaaabbaaabaaaabbabababababababb
|
||||||
12
inputs/day19_test1.txt
Normal file
12
inputs/day19_test1.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
0: 4 1 5
|
||||||
|
1: 2 3 | 3 2
|
||||||
|
2: 4 4 | 5 5
|
||||||
|
3: 4 5 | 5 4
|
||||||
|
4: "a"
|
||||||
|
5: "b"
|
||||||
|
|
||||||
|
ababbb
|
||||||
|
bababa
|
||||||
|
abbbab
|
||||||
|
aaabbb
|
||||||
|
aaaabbb
|
||||||
47
inputs/day19_test2.txt
Normal file
47
inputs/day19_test2.txt
Normal file
@@ -0,0 +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
|
||||||
218
src/bin/monster_messages.rs
Normal file
218
src/bin/monster_messages.rs
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
use advent2020::errors::{GrammarParseError, TopLevelError};
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use std::env;
|
||||||
|
use std::fs;
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
|
struct Grammar {
|
||||||
|
rules: HashMap<usize, Rule>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Grammar {
|
||||||
|
fn new() -> Grammar {
|
||||||
|
Grammar {
|
||||||
|
rules: HashMap::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn add_rule(&mut self, number: usize, rule: Rule) -> Result<(), GrammarParseError> {
|
||||||
|
if self.rules.insert(number, rule).is_some() {
|
||||||
|
Err(GrammarParseError::DuplicateRule(number))
|
||||||
|
} else {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parses(&self, s: &str) -> Result<bool, GrammarParseError> {
|
||||||
|
self.accepts(0, s)
|
||||||
|
.map(|x| x.iter().filter(|x| x.is_empty()).count() > 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn accepts<'a>(&self, rule: usize, s: &'a str) -> Result<Vec<&'a str>, GrammarParseError> {
|
||||||
|
match self.rules.get(&rule) {
|
||||||
|
None => Err(GrammarParseError::UnknownRule(rule)),
|
||||||
|
Some(v) => self.rule_accepts(v, s),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn rule_accepts<'a>(&self, rule: &Rule, s: &'a str) -> Result<Vec<&'a str>, GrammarParseError> {
|
||||||
|
match rule {
|
||||||
|
Rule::Alternatives(alts) => {
|
||||||
|
let mut results = Vec::new();
|
||||||
|
|
||||||
|
for item in alts.iter() {
|
||||||
|
let mut news = self.rule_accepts(item, s)?;
|
||||||
|
results.append(&mut news);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(results)
|
||||||
|
}
|
||||||
|
|
||||||
|
Rule::Sequence(seqs) => {
|
||||||
|
let mut results = vec![s];
|
||||||
|
|
||||||
|
for item in seqs.iter() {
|
||||||
|
let mut new_results = vec![];
|
||||||
|
|
||||||
|
for early_result in results.drain(..) {
|
||||||
|
let mut nexts = self.rule_accepts(item, early_result)?;
|
||||||
|
new_results.append(&mut nexts);
|
||||||
|
}
|
||||||
|
|
||||||
|
results = new_results;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(results)
|
||||||
|
}
|
||||||
|
|
||||||
|
Rule::Nonterminal(new_rule) => self.accepts(*new_rule, s),
|
||||||
|
|
||||||
|
Rule::Terminal(term) => {
|
||||||
|
if let Some(rest) = s.strip_prefix(term) {
|
||||||
|
Ok(vec![rest])
|
||||||
|
} else {
|
||||||
|
Ok(vec![])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn rewrite(&self) -> Grammar {
|
||||||
|
let rule8 = Rule::Alternatives(vec![
|
||||||
|
Rule::Nonterminal(42),
|
||||||
|
Rule::Sequence(vec![Rule::Nonterminal(42), Rule::Nonterminal(8)]),
|
||||||
|
]);
|
||||||
|
|
||||||
|
let rule11 = Rule::Alternatives(vec![
|
||||||
|
Rule::Sequence(vec![Rule::Nonterminal(42), Rule::Nonterminal(31)]),
|
||||||
|
Rule::Sequence(vec![
|
||||||
|
Rule::Nonterminal(42),
|
||||||
|
Rule::Nonterminal(11),
|
||||||
|
Rule::Nonterminal(31),
|
||||||
|
]),
|
||||||
|
]);
|
||||||
|
|
||||||
|
let mut rules = self.rules.clone();
|
||||||
|
rules.insert(8, rule8);
|
||||||
|
rules.insert(11, rule11);
|
||||||
|
Grammar { rules }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
enum Rule {
|
||||||
|
Alternatives(Vec<Rule>),
|
||||||
|
Sequence(Vec<Rule>),
|
||||||
|
Nonterminal(usize),
|
||||||
|
Terminal(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Rule {
|
||||||
|
fn new(s: &str) -> Result<(usize, Rule), GrammarParseError> {
|
||||||
|
let mut parts = s.split(": ");
|
||||||
|
let rule_num_str = parts
|
||||||
|
.next()
|
||||||
|
.ok_or_else(|| GrammarParseError::BadRule(s.to_string()))?;
|
||||||
|
let rule_num = usize::from_str(rule_num_str)?;
|
||||||
|
let definitions = parts
|
||||||
|
.next()
|
||||||
|
.ok_or_else(|| GrammarParseError::BadRule(s.to_string()))?;
|
||||||
|
let mut alternatives = Vec::new();
|
||||||
|
|
||||||
|
for alternate in definitions.split(" | ") {
|
||||||
|
let trimmed_alternate = alternate.trim();
|
||||||
|
let mut sequence_members = Vec::new();
|
||||||
|
|
||||||
|
for member in trimmed_alternate.split_ascii_whitespace() {
|
||||||
|
let item = if member.starts_with('"') && member.ends_with('"') {
|
||||||
|
Rule::Terminal(
|
||||||
|
member
|
||||||
|
.strip_prefix('"')
|
||||||
|
.unwrap()
|
||||||
|
.strip_suffix('"')
|
||||||
|
.unwrap()
|
||||||
|
.to_string(),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Rule::Nonterminal(usize::from_str(member)?)
|
||||||
|
};
|
||||||
|
sequence_members.push(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
match sequence_members.len() {
|
||||||
|
0 => return Err(GrammarParseError::BadRule(s.to_string())),
|
||||||
|
1 => alternatives.push(sequence_members.pop().unwrap()),
|
||||||
|
_ => alternatives.push(Rule::Sequence(sequence_members)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match alternatives.len() {
|
||||||
|
0 => Err(GrammarParseError::BadRule(s.to_string())),
|
||||||
|
1 => Ok((rule_num, alternatives.pop().unwrap())),
|
||||||
|
_ => Ok((rule_num, Rule::Alternatives(alternatives))),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! run_parser {
|
||||||
|
($parser: ident, $line: ident, $count: ident) => {
|
||||||
|
if $parser.parses($line)? {
|
||||||
|
$count += 1;
|
||||||
|
"YES"
|
||||||
|
} else {
|
||||||
|
"NO"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn rewrite_test() {
|
||||||
|
let line = "aaaaabbaabaaaaababaa";
|
||||||
|
let contents = fs::read_to_string("inputs/day19_test2.txt").unwrap();
|
||||||
|
let mut grammar = Grammar::new();
|
||||||
|
for line in contents.lines() {
|
||||||
|
if line == "" {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
let (num, rule) = Rule::new(line).unwrap();
|
||||||
|
grammar.add_rule(num, rule).unwrap();
|
||||||
|
}
|
||||||
|
let rewritten = grammar.rewrite();
|
||||||
|
assert_eq!(Ok(false), grammar.parses(line));
|
||||||
|
assert_eq!(Ok(true), rewritten.parses(line));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<(), TopLevelError> {
|
||||||
|
let filename = env::args().nth(1).expect("No file argument given.");
|
||||||
|
let contents = fs::read_to_string(filename)?;
|
||||||
|
let mut grammar = Grammar::new();
|
||||||
|
let mut lines = contents.lines();
|
||||||
|
|
||||||
|
for line in &mut lines {
|
||||||
|
if line == "" {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
let (num, rule) = Rule::new(line)?;
|
||||||
|
grammar.add_rule(num, rule)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut matched_orig_lines = 0;
|
||||||
|
let mut matched_rewritten_lines = 0;
|
||||||
|
let rewritten_grammar = grammar.rewrite();
|
||||||
|
|
||||||
|
for line in &mut lines {
|
||||||
|
let orig = run_parser!(grammar, line, matched_orig_lines);
|
||||||
|
let rewritten = run_parser!(rewritten_grammar, line, matched_rewritten_lines);
|
||||||
|
println!("{} ==> {} / {}", line, orig, rewritten);
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("{} lines matched originally.", matched_orig_lines);
|
||||||
|
println!(
|
||||||
|
"{} lines matched after it was rewritten.",
|
||||||
|
matched_rewritten_lines
|
||||||
|
);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
@@ -54,6 +54,8 @@ pub enum TopLevelError {
|
|||||||
BitmaskCommandParseError(#[from] BitmaskCommandParseError),
|
BitmaskCommandParseError(#[from] BitmaskCommandParseError),
|
||||||
#[error("Ticket parsing error: {0}")]
|
#[error("Ticket parsing error: {0}")]
|
||||||
TicketParseError(#[from] TicketParseError),
|
TicketParseError(#[from] TicketParseError),
|
||||||
|
#[error("Bad rule parse: {0}")]
|
||||||
|
GrammarParseError(#[from] GrammarParseError),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Error, Debug)]
|
#[derive(Error, Debug)]
|
||||||
@@ -194,3 +196,15 @@ pub enum TicketParseError {
|
|||||||
#[error("Bad field definition: {0}")]
|
#[error("Bad field definition: {0}")]
|
||||||
BadFieldDefinition(String),
|
BadFieldDefinition(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Error, Debug, PartialEq)]
|
||||||
|
pub enum GrammarParseError {
|
||||||
|
#[error("Bad rule reference: {0}")]
|
||||||
|
ParseIntError(#[from] ParseIntError),
|
||||||
|
#[error("Reference to unknown rule: {0}")]
|
||||||
|
UnknownRule(usize),
|
||||||
|
#[error("Bad rule definition: {0}")]
|
||||||
|
BadRule(String),
|
||||||
|
#[error("Duplicate rule definition for {0}")]
|
||||||
|
DuplicateRule(usize),
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user