day 19
This commit is contained in:
parent
2f8493d9a3
commit
9eaf76344d
534
data/day19/input
Normal file
534
data/day19/input
Normal file
@ -0,0 +1,534 @@
|
|||||||
|
21: 71 69
|
||||||
|
100: 92 69 | 13 54
|
||||||
|
116: 34 13 | 41 92
|
||||||
|
101: 92 93 | 13 96
|
||||||
|
122: 13 22 | 92 19
|
||||||
|
124: 70 13 | 76 92
|
||||||
|
29: 9 92 | 133 13
|
||||||
|
2: 13 75 | 92 73
|
||||||
|
117: 132 92 | 109 13
|
||||||
|
0: 8 11
|
||||||
|
43: 92 13 | 13 13
|
||||||
|
56: 41 13 | 34 92
|
||||||
|
54: 92 92
|
||||||
|
16: 92 128 | 13 106
|
||||||
|
39: 13 82 | 92 72
|
||||||
|
121: 99 13 | 70 92
|
||||||
|
110: 59 13 | 123 92
|
||||||
|
4: 63 13 | 33 92
|
||||||
|
120: 130 92 | 54 13
|
||||||
|
7: 41 71
|
||||||
|
119: 76 13 | 68 92
|
||||||
|
63: 13 99 | 92 76
|
||||||
|
44: 92 13 | 92 92
|
||||||
|
3: 57 92 | 117 13
|
||||||
|
30: 13 68
|
||||||
|
127: 91 13 | 1 92
|
||||||
|
49: 13 98 | 92 5
|
||||||
|
5: 41 13 | 112 92
|
||||||
|
74: 92 17 | 13 25
|
||||||
|
58: 13 34 | 92 68
|
||||||
|
128: 43 13
|
||||||
|
92: "a"
|
||||||
|
77: 13 37 | 92 128
|
||||||
|
112: 13 92
|
||||||
|
130: 92 92 | 13 13
|
||||||
|
46: 92 83 | 13 122
|
||||||
|
31: 13 3 | 92 26
|
||||||
|
85: 69 92 | 60 13
|
||||||
|
111: 13 41 | 92 70
|
||||||
|
76: 92 13
|
||||||
|
24: 76 13 | 70 92
|
||||||
|
93: 92 84 | 13 50
|
||||||
|
78: 92 21 | 13 135
|
||||||
|
57: 66 92 | 40 13
|
||||||
|
84: 13 45 | 92 41
|
||||||
|
109: 48 92 | 78 13
|
||||||
|
17: 92 60 | 13 43
|
||||||
|
103: 115 13 | 56 92
|
||||||
|
99: 13 92 | 71 13
|
||||||
|
65: 13 95 | 92 120
|
||||||
|
79: 121 92 | 128 13
|
||||||
|
134: 34 13 | 76 92
|
||||||
|
68: 13 92 | 92 13
|
||||||
|
14: 60 13 | 76 92
|
||||||
|
83: 4 92 | 27 13
|
||||||
|
70: 13 92 | 92 71
|
||||||
|
62: 92 79 | 13 90
|
||||||
|
66: 2 92 | 108 13
|
||||||
|
52: 54 92 | 130 13
|
||||||
|
47: 13 38 | 92 52
|
||||||
|
108: 119 13 | 134 92
|
||||||
|
33: 13 130 | 92 45
|
||||||
|
9: 13 43 | 92 69
|
||||||
|
64: 24 13 | 86 92
|
||||||
|
118: 71 70
|
||||||
|
6: 112 13 | 130 92
|
||||||
|
72: 71 43
|
||||||
|
69: 13 13 | 92 71
|
||||||
|
97: 89 92 | 62 13
|
||||||
|
135: 36 92 | 99 13
|
||||||
|
82: 13 70 | 92 54
|
||||||
|
61: 77 92 | 28 13
|
||||||
|
90: 92 125 | 13 100
|
||||||
|
129: 13 45 | 92 54
|
||||||
|
86: 130 92 | 41 13
|
||||||
|
106: 92 99 | 13 54
|
||||||
|
38: 92 99 | 13 69
|
||||||
|
126: 92 74 | 13 105
|
||||||
|
45: 13 92 | 13 13
|
||||||
|
10: 61 13 | 94 92
|
||||||
|
28: 30 13 | 35 92
|
||||||
|
71: 13 | 92
|
||||||
|
27: 118 92 | 9 13
|
||||||
|
1: 88 92 | 126 13
|
||||||
|
11: 42 31
|
||||||
|
105: 13 21 | 92 102
|
||||||
|
41: 92 92 | 13 92
|
||||||
|
34: 13 13
|
||||||
|
125: 60 13 | 112 92
|
||||||
|
55: 13 41 | 92 43
|
||||||
|
20: 13 45 | 92 60
|
||||||
|
113: 43 92
|
||||||
|
96: 13 111 | 92 113
|
||||||
|
104: 92 99 | 13 130
|
||||||
|
87: 54 92 | 112 13
|
||||||
|
132: 103 92 | 110 13
|
||||||
|
12: 124 13 | 20 92
|
||||||
|
133: 13 45 | 92 76
|
||||||
|
50: 54 13 | 76 92
|
||||||
|
26: 46 13 | 97 92
|
||||||
|
42: 13 127 | 92 67
|
||||||
|
131: 119 92 | 121 13
|
||||||
|
73: 92 36 | 13 76
|
||||||
|
19: 55 13 | 129 92
|
||||||
|
8: 42
|
||||||
|
75: 60 13 | 130 92
|
||||||
|
102: 13 68 | 92 99
|
||||||
|
13: "b"
|
||||||
|
22: 92 6 | 13 85
|
||||||
|
80: 13 54 | 92 70
|
||||||
|
107: 14 92 | 80 13
|
||||||
|
48: 92 58 | 13 21
|
||||||
|
23: 92 116 | 13 113
|
||||||
|
98: 70 92 | 69 13
|
||||||
|
37: 54 13 | 41 92
|
||||||
|
59: 13 76 | 92 45
|
||||||
|
35: 71 99
|
||||||
|
40: 92 15 | 13 23
|
||||||
|
81: 13 51 | 92 114
|
||||||
|
89: 92 49 | 13 32
|
||||||
|
94: 92 64 | 13 107
|
||||||
|
36: 71 71
|
||||||
|
18: 92 65 | 13 53
|
||||||
|
53: 92 7 | 13 100
|
||||||
|
15: 119 92 | 87 13
|
||||||
|
60: 13 71 | 92 92
|
||||||
|
115: 60 92 | 41 13
|
||||||
|
91: 92 18 | 13 101
|
||||||
|
123: 76 13 | 44 92
|
||||||
|
51: 47 92 | 29 13
|
||||||
|
114: 13 16 | 92 12
|
||||||
|
25: 60 13 | 99 92
|
||||||
|
88: 13 131 | 92 39
|
||||||
|
95: 92 45 | 13 68
|
||||||
|
67: 81 92 | 10 13
|
||||||
|
32: 50 13 | 104 92
|
||||||
|
|
||||||
|
bbabbaaaabbaabbbaabbabaabbaabbaababaabab
|
||||||
|
abaababbbaaaaaabbabbabaabbabbaaaabaababbababbbab
|
||||||
|
baaabbbaabbabaabbbbbbbaa
|
||||||
|
bbaaaabababbbaaabbbabaab
|
||||||
|
ababbababbabbababaaababaabbbbaaaabbaabba
|
||||||
|
bbaabbabbbbbabbabaaabbbaabbabbab
|
||||||
|
bbabbaaaabbbabbaabbbabbabbabbbaa
|
||||||
|
abbbaaababbaaaaababaabaaaabababbabbaabab
|
||||||
|
abaabbabbbabaaaabaabaaba
|
||||||
|
aabaaabbaaaaabaabbabbbba
|
||||||
|
aabbbaaaaabbbbabbaabbbaabaabbbbbbbbababbbbbbaabbbbbaabaaabbbabbabbabaaaababaaaaabbbabbbabbaabbaa
|
||||||
|
abbaabaaabbaaabbaaaaaaabbbabababbbaabababbbaababaababbabbaabbaaaaaaaabbb
|
||||||
|
bbbbababbabbaabbbabaaabbaaaabbab
|
||||||
|
baaabababaabbbaabaabbaab
|
||||||
|
abbabbbbbbbbbbbaabaaabaaabbbbbababbabaaaabbbaaabbaaabaab
|
||||||
|
bbabababbaaabbbaaabaabbababbaabaaabbababbbbbbaaa
|
||||||
|
aaabbbaaaaaaababaabbaabb
|
||||||
|
ababbababaaabbabbbaaababbaaaaaaa
|
||||||
|
aaaaababbbabbaabbabaaabaabbababaaabbaaaa
|
||||||
|
aabaabbababababaabbabbab
|
||||||
|
babbbbbaaabbaaababbabbab
|
||||||
|
abaaaabbbabaaaabababaabb
|
||||||
|
babbbaaaabaaababaabababb
|
||||||
|
abaaaabbbaaaabaaaabaaaab
|
||||||
|
aabbaaabbaabbbaaabbbaaba
|
||||||
|
babbbaabababbbbbaabbbabbaaababbbbaabababaabaabaaabaaaaab
|
||||||
|
ababbabbbaaabaaaaababbabababbbaababaaaabababababbbbabababaaabaaaaabbbbaa
|
||||||
|
babaaabbbbaaabbabbbababa
|
||||||
|
bbbaababbbababaabbabbabb
|
||||||
|
babbabbbaaaabaaabaabaaaa
|
||||||
|
abaaaaaaaabbbabbbabbaabaaaaabbbb
|
||||||
|
bbaabaaaabaabaaaaabaaaabaabbbbbbbaaaabaaabbbaabababbbbbabaabaabbbbbababaabaababa
|
||||||
|
bbabaabbbababababbabbaabbbbababbaabbbbba
|
||||||
|
aaaabaabbaababbabbabbbaa
|
||||||
|
bbbbaabbbabaaaaaabbaaaba
|
||||||
|
aaaabbaaaabaabbbabbabbaabbbabaaa
|
||||||
|
abbbabaabbaababaaababaabbabbabab
|
||||||
|
bbbabbaabbbabbbabbababbabaaaababaababaaabbaabbaa
|
||||||
|
baabbbababbabbaaabaaababaabbbbba
|
||||||
|
bbbaabbabaabbbaabbaabbab
|
||||||
|
aaabbabbbbaabbabaabababa
|
||||||
|
aaaabaaaaabbbaaaabbaabbbabbabaaabbbabbbb
|
||||||
|
abbbabbbbbababbaababbaab
|
||||||
|
aababbbbbbabbbbbbaabbabaaabbbababbbbbaba
|
||||||
|
aabaabbbbaaababaabababaa
|
||||||
|
baaaaabaabbabbaaabbbbaaa
|
||||||
|
aaabbbabbbabbaaaabbbabab
|
||||||
|
bbababaabbaaabbbaaaaabaababaabaabaaabaab
|
||||||
|
abaabaababaababbbabbaababbaabbbbaabaabaa
|
||||||
|
abaaaabbbbabababaabbaaaa
|
||||||
|
babaabaaaaaabbaabbbbabbbabbabbbaaaabbabaaaabbbbbbabababaababbbbbbaaaaaab
|
||||||
|
abaabbababababbbbbaaabbaaabaaaaa
|
||||||
|
abbbaaabbbabaabbbababbaaaaaaaaba
|
||||||
|
abbabaabbbabababbbbbaabaaabbaabbaabaaabbaaabbbbaaaaabbabaaaaabaa
|
||||||
|
babbaaabbbbbbbbaababbaab
|
||||||
|
ababbabaababbaaabbabaaba
|
||||||
|
abababababababbbabaabbaa
|
||||||
|
abaabababbbbbbbaabbbbaaa
|
||||||
|
bbbbababbbaabbbbbababbab
|
||||||
|
bbaabbabababababbbaaaaba
|
||||||
|
aabaabbabbabbbaaabaaababbaaaaabaaabbbabbbaaabbabbaabbaba
|
||||||
|
baaabbaaaaababbabbbbabababaababaabbaaabbbbbbaaaabbababbb
|
||||||
|
baababbbbbbaaaabbbbbbbaaaaaababaabbaaabaaaabaabababaaaaa
|
||||||
|
bbabababaaabababaabbaabaabaaaabbababbbbaabaaaaab
|
||||||
|
abbabbbababaababaaaaabbbaabaaabb
|
||||||
|
babababbabbbbaabbbaaababaabbbaab
|
||||||
|
baabbbaaaaaabaaabbbaabbaaaabbabbaaaabbbbbaabbaaabbaaaabbbabaababbabbbbabaababbab
|
||||||
|
bbaaabaaaaabbbaababbaaabbabaaabbabbabbba
|
||||||
|
abaaababbabbabaaabababbbababaaaaabbaaaaa
|
||||||
|
abaababaaabbaaababaabbabaabbbbbb
|
||||||
|
abaababbbbbababbbbbaabbaaabbbaaaaabbbabb
|
||||||
|
aaabbbaabbaabababbabbbbb
|
||||||
|
abaaababbabbbaaababbbbbb
|
||||||
|
baaaabaaabbbabaabbaaabbb
|
||||||
|
babbaabbabaaaaaabbbbaabbaaaaaaabbbbbabbabbbbabaa
|
||||||
|
babaabbbaaaaaabbbaaaabbaaaabaaaababbaabbabbaababbbbaaabb
|
||||||
|
babaaabbabbbbababaaaaabababbabbabaaaaaababaabbbb
|
||||||
|
abaaaabababbaabbaabbabaaaaaabaabbbabbbbbabbbaaabbaaaabba
|
||||||
|
baabbbbaabbbbababbbbabaa
|
||||||
|
bbaaaaabbbbbbbbababaabbabbbbaaaaabbaaaab
|
||||||
|
abbbabbbbabababbaaabababaabababbbaaaaabaaaabbaaaabbabaaabbaabbba
|
||||||
|
baaaaabaaaababbbaaaaababbaaabaababaaabba
|
||||||
|
aaaabaabbbaabbababbababbabaaabbbbbaabbabaaabaaab
|
||||||
|
abbabaababaaaababbbbbbaabbaaaaaaaaaaaabb
|
||||||
|
aaaabbaababbabbabbaaabbb
|
||||||
|
baabababbabaabbaaabbabbbbbbbababbaababbaabbaabbbabaaabba
|
||||||
|
baaaabaabaabbabaabbbbbbbaaaababbaaabbaab
|
||||||
|
aabbbbbbabbbbaaaaabbbbbbbbbbabbb
|
||||||
|
baaabbaabbabababaaaabaabbbbaabbabaaaaaaaaabbbbababbbbbabaabbaaaaabaaabba
|
||||||
|
abaaababbabbbaaabaaaabaabbaaaabbaabaabaa
|
||||||
|
babbbabababaaaaaababbbab
|
||||||
|
baababbbbbaaabaabaabbbaaabbaabbaabbbabab
|
||||||
|
abaabbababbbbbbabbababaabbbbbbbaaaabaabbbaaaabbb
|
||||||
|
aaaaaaababaabbaaaabaaaaabbbabbbb
|
||||||
|
abbbabaabaabbbaabaabbaab
|
||||||
|
abbabbaaabbbbbbaaaabbaabbabbbaaababaabba
|
||||||
|
baaabababababaabaabbbabbabaabbabbabaaabbbabbabbbbbababbb
|
||||||
|
aaaaaaabaaababbababaaaba
|
||||||
|
bbaababababaaaabbbbbaaaa
|
||||||
|
bbbbaabbbbbbaabbbbbabaab
|
||||||
|
abaaaabaabbabaaaababababbbabbbbbbabbabab
|
||||||
|
babbaabbabbabbaaabbabbbbaabbbabbaabaaaaaaababbbb
|
||||||
|
babaaaabaaaabaaababbabaabbbbbbaababbaaaa
|
||||||
|
abbaabaaaaabbaaabbaaabbb
|
||||||
|
bbbabbabaaababbaabaabbbaaaaaabaa
|
||||||
|
bbaaabbababaabbbaaabababbabbaababbbbaabaabaabbaaaabaaabbbabaabbabaaabbababbaababbaabbaaa
|
||||||
|
bbbaaabababbabababaaaabaaabbabbbbaaabbabaaaabbbaabbababbbaaaabababaabaaabbbababb
|
||||||
|
babbbaaabbbbabababbbbabb
|
||||||
|
baaaaabbaabbaabaabbaabba
|
||||||
|
babbbaabbababaabaaaabaaaaaaabababbbaabbbababbabbbbabaabababbbabbaababaaa
|
||||||
|
baabbbbaaabaababababbaaa
|
||||||
|
abbbabbbaaabbaaababbabab
|
||||||
|
bbabbaabbbaabaabbbbaaabaabaaababbbabbaabbbabaaaaabbabaaabbababbbaababbaa
|
||||||
|
babaaabbbabaaabbbbabbaabbbbabaab
|
||||||
|
abbbbbaabaaaaabababaabbabaabbbaaabbbaaabbbbabababbabbbbbbaababbbaababbab
|
||||||
|
aaababbbbbaabbbaabbbabbaaaaaaaabbbaaaaaabbaaabbbbbbbbabb
|
||||||
|
ababbabaababbabbbaaabbbababbabbabbbbaaabbaabbaab
|
||||||
|
ababbabaaabaababbbabbabaaabbaaaabaaaabab
|
||||||
|
aabbaaaabaabbbbbaaabaaba
|
||||||
|
babbbbbaaaababbbbbaaaabbbbbbbababaabbbab
|
||||||
|
abbbbbbabababaabbabbbaabbbaabbaa
|
||||||
|
bbaaabaabbbaababbaaabbbb
|
||||||
|
aabbabaaaaabbbaaabababaa
|
||||||
|
aabbaaababbbbaabbaabaaab
|
||||||
|
bbbbbbabaaaabbbabbbbababaabbbaab
|
||||||
|
babbaabbbbbbbbbabbaaaaababbabbabaaaaabaa
|
||||||
|
bbbaaabaaaaabaabbaaaaaaabaabaaba
|
||||||
|
baabbabbbbaabbababbaaabbaaaababa
|
||||||
|
ababaaaaababbaababbbbbaabbbaaaaaaabaaaababbaaaab
|
||||||
|
abbaaabbbbaabbababbbabbaaabaabaaaaaababb
|
||||||
|
ababbaaabbaaaabbabbaaaaabbaabaabbbaaaaba
|
||||||
|
ababbbbbabaaaabaabaaaaab
|
||||||
|
babababbababbbaabbabbaab
|
||||||
|
baaaabaababbbbbaabbbabbaaaabababaaabbaaaaaaaabbbbabbababbbbaabbbabbaaaab
|
||||||
|
bbbbababaaaaaaabbaaabbabaabbabbaaaabbbbaabbbaaba
|
||||||
|
baaaaabaabaaababaaaaabbaaaabbaaaabbbaabb
|
||||||
|
bbbbabbabbabbbaabaabbbaaabaabaabbabbbabb
|
||||||
|
bbaaabaaaabaabbaaaaababb
|
||||||
|
abbababaaababaabbabbbbaa
|
||||||
|
aabaabbaaaaaababbabbaaabaaabaaba
|
||||||
|
abbbbaabbbbabbabaaaaaaaaaabbabbabbaabaaaaabbbbbaaaaaaabb
|
||||||
|
bbaaabbababbaaabbbaaabaaabbaaaaa
|
||||||
|
aabaaabbabbbaababababbaa
|
||||||
|
bbbbaababbabaaaaababbbba
|
||||||
|
abbbbaabbaaaaabbabbabaabbbbbaabbbbaabbabaabaaaaa
|
||||||
|
aaaabbbabaababbaabbbbbab
|
||||||
|
babababbaabbaaaaaabbbbaa
|
||||||
|
babbaaabaaabbabbabaabaababbaaaaabaabbbbb
|
||||||
|
bbaabbbaabaababbbbbaaabb
|
||||||
|
baaababaaabbaabaaabbaabb
|
||||||
|
baaaaabaabbbabbabbbaabbb
|
||||||
|
abaababbbbaabbbbabbbabaabbbaabbaababbbba
|
||||||
|
babababbabaaaaaaaababbbaabbaabbbaabababbaaaabbab
|
||||||
|
aababaabbabbaaabaaaababababaabbb
|
||||||
|
aaaaabbaaabbaaabbbaaaababbbbabbbabbabbbbaabababababaaababbaaabab
|
||||||
|
aaabbbabbbbbaaaaaabababb
|
||||||
|
bbbbbbaaaaabbabbabbbbbabbaaabaababbbaaabbbbbbabaabbbaaaa
|
||||||
|
ababbbbbbaaaaabaaaaabbaabaabbbbaababababbbbabaab
|
||||||
|
bbaaabaaababbabababaabbaaabbaaabaaabaaab
|
||||||
|
baaaabaaababababaababbaaaaaaabababaabbbabbaabaabbbbabbabbaaabbab
|
||||||
|
babbabbabaabababaaaaaabb
|
||||||
|
aaaabababbabbaaabbbbaabababaaaabbbaabababbabbbbb
|
||||||
|
baabbbabbbaaabaaabbbababaabbababbabaaabbbabaabaabaaababaabbabaaaaabbbaba
|
||||||
|
baaaaabbbabbbabaaaaaabaa
|
||||||
|
bbaabababbabbaaabbbaaababaaaabab
|
||||||
|
babbaaabbaaaaaabaabababa
|
||||||
|
bbabbabbbbbabababaaaabba
|
||||||
|
bbabbbaaababababaabaabbbaaababbbbabbbbaa
|
||||||
|
baaabbaaabbaaabbbaaaabba
|
||||||
|
abbbbbaababbbbbaabaaabba
|
||||||
|
aaabbbabbaabbbbabbaaaaaa
|
||||||
|
aaaababaabbbabaaabbabababaabaaabaaabbaba
|
||||||
|
bbbaabbaabaabababaaabbaaababbabb
|
||||||
|
bbbabbabbbaaaaabbaaaaaabbbababba
|
||||||
|
baabbaababbaaabbabbaaaabaabbaabbbaabbaaaabbbaaaa
|
||||||
|
abbabbbbaabaaaabaaaabaaabaaaababababbaaababbbaaaabbabbbbaabbbaaaaaaabaaaabbababbbaaabababbabbbba
|
||||||
|
bbaaabbabbaaabaababaabab
|
||||||
|
bbababaabababaabaaaaabaa
|
||||||
|
bbbaabaaabbaabaaaaaaaabb
|
||||||
|
abbabbaabaabbbaabbbaabbb
|
||||||
|
aabbbabbbabbbaabaabbaaabaaaababbaabbbbbb
|
||||||
|
abbbaaaaabaababbabbbbabb
|
||||||
|
bbbaaabaabbabaabaaabababbbbabbbaaaabbabbaababaabaaabaabb
|
||||||
|
bbbaabbabaaabbabbbaaaaaa
|
||||||
|
baabbbaaababaaabbbabbabaabaabababbbbaaaa
|
||||||
|
bbbbbbababbbabaaabababbbaaaababbabbbaaabaababbbbaabbbababbaaabbb
|
||||||
|
bbbabbabbaababbbbbabbbaaabbababbbabaaaba
|
||||||
|
aaababbabbbbababababbbba
|
||||||
|
bbbbbbabababbbaabbbbaabababaaaababbbaaaabaabbababbbbbbab
|
||||||
|
abaaababbaaababababbbabb
|
||||||
|
abbabbbaabbbbabbbaabbbababaaabbaababbbababaabbaabaaaaaab
|
||||||
|
abbabbbbaaaabaaaaabbbaba
|
||||||
|
bbbaaababbabaabbabaababbaabbaabb
|
||||||
|
aaababababbabbaabaabbaaa
|
||||||
|
babbabaaabbbbababababbaabbabbbbb
|
||||||
|
bbbabbaabbbabbbabaaabbaaaabbabbabbbabaaa
|
||||||
|
babbabaabaaaaaabbbbbbbbababaabaa
|
||||||
|
bbaabbbabaabbbbaababbbbbbbaababaabbaaaabaaabaaab
|
||||||
|
aababbbbbabbababbbababaabaaabbaa
|
||||||
|
aabbabbbbaabbbababaaabbb
|
||||||
|
aaababbbaabaababbbabbabaababaaba
|
||||||
|
abaaaaaaaaaababababbaaabbaaaaaababaaabababbababbbbabbaababbbbabbbbabbbab
|
||||||
|
abaaaabbbbbbbaabbbabbbaaabbbaabb
|
||||||
|
bbabaabbaaaabbbaabbbabbbabaaaaaabbaabbbbaabbaabbbbbaabbbbbabbbab
|
||||||
|
aabbabaabaababbababbbbbaabbaaabbbbbababbbbbababaabbbbabb
|
||||||
|
bbabaaaabbaaabbaabbbabab
|
||||||
|
babaaaabbaababbbbbaabbbabbbbbbbaaaaabababbabbaab
|
||||||
|
abaabbbaabaabababaababbababbbbaa
|
||||||
|
ababbbbbbbaababaaabbabbbababbbbaabaabbbb
|
||||||
|
aababbbaaabbaaabaabaaaaa
|
||||||
|
babbaaaaabbbbababbbaabaabaabbaaa
|
||||||
|
aabbbaaaabbaabbbbaababbababababaabababaabbbbaaaa
|
||||||
|
abaababaababbbaaaababaabbabababbababababaababaaabababbbb
|
||||||
|
aaaabbbaabaabaaaababbaabbbbbbbbb
|
||||||
|
baaabbabaabbabbbbaababbabaaaaaababbabbbb
|
||||||
|
babbaaaababaaaabaabaabbabbbaaabbaabbaabb
|
||||||
|
abbbaabbbaabbbbbbaaabaabaabbababbbbababa
|
||||||
|
aabbaaababbaabaabbabbaaababbaaabbabaaaaaaabbbbbbbabbbbbbabbabbba
|
||||||
|
abbbaababbababababbabbbabbababaaabbaaaaaaaabbbbb
|
||||||
|
aababbbaaaaabaababbaabba
|
||||||
|
abbbbababbbbbbbaabaabbabaaaabababaaaabbbaabaaabb
|
||||||
|
bbbaabbabbaaaaabbbabbbba
|
||||||
|
abbbaaaaaabbabbbaaabaaba
|
||||||
|
abababbbaabbaabababaabbabaaaabbb
|
||||||
|
abbaaaabbaababbbbaaaaababbabbababbbbababbbabaaababaaaabbabbbaabbabbbbababbaaabaaaabbaabbbbaaabaa
|
||||||
|
abaaaabaabababababbaaaaa
|
||||||
|
aabbaaaaaabaaabaaabaaaaa
|
||||||
|
babbbaaaaaaabbbaabaaaabbbababababaaababbbbbbbaba
|
||||||
|
abaaaabbaaaaabaabbabbbabbaabbbbabbabbabaaabaabbababbabbabbaaabbaabbbbbaabbbbaaab
|
||||||
|
bbaabababaabababababbabb
|
||||||
|
abbbbaabbababababbbbbbbb
|
||||||
|
aabbaabaaababaababababaabbbaabbabbbababaabaaabbbabaabaaaaabbbbaabaaabbaaabababbb
|
||||||
|
ababbbbbbbabbababbbbaababbbabbaaaabbabbaaababbaabbabaaba
|
||||||
|
abbaaaabababaabbbabbbbbbbbbaababbbbaabbbabbbaabababaaaabbaababaaabbabaab
|
||||||
|
bbbaaaaabbaaabababababaa
|
||||||
|
babaaabbabbbbbaabbbabbbababaabab
|
||||||
|
bbbbbbabbbbbbbbababbbababaaaaababbbbbaabaaaaabbbbaabaaaaaaaaaabb
|
||||||
|
baabbbbaaabbabbbbbabbbaaaabaaabb
|
||||||
|
aabaababbabbbabaaaabbabbbaabaaaa
|
||||||
|
aabbaababbbaaabaaaabbaab
|
||||||
|
babaaaaaaaabbbabbabbaaaaaaaaabbabbbaababbaaabbab
|
||||||
|
bbabbbbababbbbaaabbbbbabbbabaaaabbbaaababababababaabbbbbbbbaabbaabbbaaaa
|
||||||
|
bbababbabbbaabababbbbaabbbababbb
|
||||||
|
ababbbbbabbbabbbabaabbbb
|
||||||
|
bababaabbbababaabbaaabbaaabbabbabbaaaabb
|
||||||
|
abbaaaabbbabaaaaabbbaabbaabbaabbabaaaabaaababbbabaaaaababaabaabbaabbabbbabbbabba
|
||||||
|
baababbabbbbbaabbbbaaabb
|
||||||
|
bbbabbaaabbabaabaababaaa
|
||||||
|
baaaaabababbabaaaaabbbabbaababbabbbaabaaabbbbaabbbbabaab
|
||||||
|
aabbbbbabaaabaabaaabaaaa
|
||||||
|
abbbabbbaaaaaaababbbaaba
|
||||||
|
abbbabbaabbbbbbabbabbabb
|
||||||
|
bbbaaababbaabababababaababaaaabbabbabbbabbabbabbababbaaa
|
||||||
|
aaaaaaabaabbabaaaabaabaa
|
||||||
|
babbaabababbaaaaabbaabbbbabbabaaabbbbaabbbbbbaba
|
||||||
|
bbabbaaabaabbbababbaaabbbaaaaabaababbababbabbaaababaabbbabbbbbabaababbbb
|
||||||
|
babbbaabaabbabaaaabaabbaabaabbaa
|
||||||
|
bbababbabababaabaabaabbbaabbabaaaababbaaabbabbba
|
||||||
|
aaaaabbababaaaaabaaaaabaabaabaababaaaabbbaaabaaa
|
||||||
|
babaabaabbbbabaabbabaaabaabaaaab
|
||||||
|
bbbbbbabbaaabbbabbbababa
|
||||||
|
bbabbaaababbabaaaaabbbba
|
||||||
|
bbaaabaaaaaabaabaaabaaab
|
||||||
|
bbaabbabbaababaaabaabaabbbbbbaabbabbbabb
|
||||||
|
ababaaabbaabbbbabbbbababababbbbbbababaabbababbaaabbaaaba
|
||||||
|
bbaabbbaaabaaabbbbaaaabb
|
||||||
|
babbabbbabbbbbbababbbabbabaaabbbbbbaababbbbaabbbaabbaabaaaaaaaaababaaaaa
|
||||||
|
babaaabbaabbaabaababaaababbabbaaabbababaabbabbabbbbabaabbbbbbaaa
|
||||||
|
bbbbaaabaababbbaabbaababbbbbabaa
|
||||||
|
baaabbbaaaaabbbabbbbbaba
|
||||||
|
aababaababbbbabaaabaabbbbbbaababbabaaaabbbbbbaabaaababaa
|
||||||
|
bbbbabbaabbbaaaabbabababbbabaabbbbbbababbbbaaabbbbbaaabb
|
||||||
|
bbbaaaaabbabbabbbbabbabaaabbbaab
|
||||||
|
baabbbbabbbbbbbaabbabababbbababbababbabb
|
||||||
|
aabbabbbbbbabbabbaaaabbaaabbbbbbbabbababbbbbbabb
|
||||||
|
abbbabaaabaaaabaaaaabbab
|
||||||
|
aabaabbaabaababbaaaaaaababaabaababbaaaba
|
||||||
|
bbabbabababbabbbbabaabbb
|
||||||
|
bbaaaaabaabbbaaababbabbababbbbbbbbbabaaa
|
||||||
|
aabbaaababbbbabaaabbbbbb
|
||||||
|
aabbaabaaaaabbbbbaaabaaaabbbbbab
|
||||||
|
aaaabbaaaabbaababaaaaabbbaababbbbbbbbbbb
|
||||||
|
abaaababbababababaababbababaabbb
|
||||||
|
aaababbabbbaaabaababbaaa
|
||||||
|
abbbabbaabbbabaababbbabababbabbababbaabbaabaaababbbaaaabbabaabaabbaabaababbabbba
|
||||||
|
babbbbababbaaabaabbbbabbbbabaaba
|
||||||
|
aaaaabaaababaaaabababbbaababaaaaababbbbbbabbbabbbabbbbbb
|
||||||
|
abbaabbbbbbbaabbaaaabbbaabababaa
|
||||||
|
babbbbbaabbabababbaabbbbaabbaabb
|
||||||
|
bbbabbbabbbbaabbabbbaaab
|
||||||
|
babbbaaabbbabaabbbbaaabb
|
||||||
|
bbbbbbbaaaaaaaababbabbba
|
||||||
|
bbbbbbabaaabababbabbbbbabbaabbaabbbabaaa
|
||||||
|
bbaabbababbaaabbaabaababbaaaababaaabaabb
|
||||||
|
aaabbbaababbaabbabaaababbbbbbaabbababaaabbbaabbb
|
||||||
|
bbbabbbabbbaaaaabbaabbbbbabbbaabbabaaaba
|
||||||
|
abababbbaababbbabaababababbbaabb
|
||||||
|
bbbbbaabbabbaababbbababa
|
||||||
|
aaaabbbabbbaaaaaaabaaaba
|
||||||
|
aaaaaaaabbaabbabaaaabbbaababbaab
|
||||||
|
aaababbabbbbaabaabaabbbb
|
||||||
|
abaaabbbbabbbaabababbabababaaaababaaaaababbbababbbbbaabababaababaababbba
|
||||||
|
baaaabbbbbaabaaababbabab
|
||||||
|
aabaabbbbbaabbbabaaabbbbbababbabbaabbabaabaaabababbabaaabbabbaaa
|
||||||
|
baaabaabbabbbbaabbabaaabaabbbbbb
|
||||||
|
ababbbbbbaabbabbabaababaabbbbbab
|
||||||
|
baababbbbbbaaaaabbabbabb
|
||||||
|
babababbaaabbbabaaabababbbbababa
|
||||||
|
baabbaaaabbabaabbabaabaaaaabbabaababaabbabbababaababaaaabbbabbbb
|
||||||
|
aabaababaaabaabbbbbabbbbbabaabbb
|
||||||
|
aaaaabbabbababaaababbabaaabaaabbbabbbbbb
|
||||||
|
baabbababbbabbbaaabaaabaaaaaabbabaabaabaabaaaaaaabaabaaabbbbabbababaaaaa
|
||||||
|
babbabbabbbaabaaaaaaaaabaabbaaaa
|
||||||
|
baababaababbaaababaaabababaababbbbbababa
|
||||||
|
abbaabaaaabbbaaabbaaaaabbbaaaaabaabbaababbbababb
|
||||||
|
baabbbabaaaabbbaabbbbbaa
|
||||||
|
aaabbbabbaabbbbaababbaaa
|
||||||
|
abbabbbaabbbbabaaabaabbbbaabaabbaabababbbbaabbba
|
||||||
|
baabbaaabbbabbabbaaabbbbaaaaaabaaaaabbbabaaaaabbaabbabbaaabbbbbaaaabaaaa
|
||||||
|
baabbbaabbbaaaababbabbbbaaababbabbbbabbbaaaaaabbaaababbaaaaababa
|
||||||
|
baaabbabaabbabaabbbbbabb
|
||||||
|
ababbbbbabbbabaabbaaaabb
|
||||||
|
aaabbaababaababbabbbababbaababbababbbaaabaabbaaabbabbabbbabababa
|
||||||
|
aaaaaaabaabbabaaababbabaababaabb
|
||||||
|
baababaabbabbaaababbbaabaabbbabbaaaaabababaababaababaaaa
|
||||||
|
abaabaabaabbbabbaaaaaabb
|
||||||
|
bbaabbbbbabaaaabbbbbbbabaabbbaba
|
||||||
|
baabbbaabbaaaaabbbbabbbbbbaaabbbaabbbbaaaababaaabaababaa
|
||||||
|
bababababbaaabbabbbbbbbaabbbaaaaababbaaa
|
||||||
|
abbbbbaabbababbaabababab
|
||||||
|
bbaaababbaababaabbbabbabbbbabbababbaaabbabaaabba
|
||||||
|
abbbabbabbaaabbababaaaba
|
||||||
|
abaabbabababbbbbabbabbaabbbabbbb
|
||||||
|
aaaabaaaabaabbabbbabbabb
|
||||||
|
bbbbbbababbaabaaaabbaaaa
|
||||||
|
babbaaababbbaaabaabbbbbbaabbabaaabbbababbbabbababbbaabaaaaabbaabbbbbbbaa
|
||||||
|
babaaaabbabaabbaaaaabaaaababbabb
|
||||||
|
abbbbaabaaabbbabbbaabbbbbbaababaaaaababbaabbaabb
|
||||||
|
bbbabaaabbbbbbabaabaabbabbbbbabababababaabbabbbaabaaabaaaaababbbabbababaabbbbbaa
|
||||||
|
baaaabaababbbaababbbbbaaaaaababaaababbbb
|
||||||
|
bababbaabaaaaaaabbbbbbbbbbbbbbbbabbbbaaa
|
||||||
|
bbbbaaabaabbabbbbabbaabbaaabbbabbbbaaaaaabbaaaab
|
||||||
|
abbabababaababababaaaaaabbbbbbaaabbbbbbaaaaabbbbabbaaaabaaaabbabababaaba
|
||||||
|
baabbbaaabaabbaaabbabbababbaaaaaabababba
|
||||||
|
abaaabaabbabbbaabbbababbaaabaaba
|
||||||
|
baabbbbabaababababbaaaab
|
||||||
|
abbabababbaaabbabbbbaabbaabababa
|
||||||
|
abbabbbbabbbabaaabbbbbbb
|
||||||
|
aaabbbbaabbaabaaababbbbabbbbaabbaababbbaababbaaaababbbbbbbbbaaab
|
||||||
|
abaabababbbaababbabaaaabababababbaaababbaabababb
|
||||||
|
babbabbaabbbbababababbaaaabbbbaabbabbbbaaabbbbbababbbaaabbbbbaaabbabbabb
|
||||||
|
abbaaabbababbabaabaaaaaabbaabbbaabaabbabaababbaabaaaabbabbbababaaababbbb
|
||||||
|
aababaabaaabababbbabaaab
|
||||||
|
aabbabbabbbaababbbaabaaa
|
||||||
|
abbbabaaaababbbabaabababbabbbaaabababaaa
|
||||||
|
abbbbaabbbbaabbaaaaaabbb
|
||||||
|
aabaababbbabababbaabbbbaabbbaaaabaaabababababbabaaabaaaaabbbaababaaabbbb
|
||||||
|
aaaabbaabbababaababababaaababbbb
|
||||||
|
bbaaabaaabbaaabbbbbbbaaa
|
||||||
|
bbaabbbbbbbbaaabbabbbbbaabbbaaba
|
||||||
|
abbabaabaaabbaaaaaabbbaa
|
||||||
|
baababaabbbbbaabbaabbaba
|
||||||
|
aabaabaaabaaaabaabbbabbabbbabbbaaabaaaabaaababbb
|
||||||
|
babbbaabaaabbaaaaabaabbababababbaaaaabbbabababaabbabaaab
|
||||||
|
abababaabbaaabbbaaabbaabaabababa
|
||||||
|
abaababbbbbabbbabbabbbba
|
||||||
|
bbbbbbabbbbabbabaaabbbaaababaaaa
|
||||||
|
aabbbabbaaabbbababbabbba
|
||||||
|
baababaabaaaaababbaaabaaabbabbbbbabaabab
|
||||||
|
aaababbabaababbbbbbbababbbbbaaabbaaabbaababbabab
|
||||||
|
aaabbaaaabaababbaaaabaaababbaababaaabaaa
|
||||||
|
baabbbaababbabbabbabbbab
|
||||||
|
abbbabbaabaabababaaabbbb
|
||||||
|
aaabbaaaabaaaabaaabbbaaaaaabbbaabbbaababaaaababbbaabaabbaabbbbbb
|
||||||
|
babbabaaabbabbbbbbbbbabbaabbbbbabbaaabbabbaaaabaabbbbbabbaaaabbbbbaabbbbaabbabbaabbabaaa
|
||||||
|
aaabbaaababaabbaaaaaaabb
|
||||||
|
abaaaabbabbabaabaaaabbab
|
||||||
|
bbbbabababbbbabaabaaaaaaaaaabaaaababbabbabbaabbabbbabbbbabbababb
|
||||||
|
abbabaaaaababbbababbaaaaaaabbbaaaaaaabbb
|
||||||
|
bbbaabaababaaabbbbbbaaabababaabb
|
||||||
|
abbbabbabbbabbaaaaababbabaababbaaabaaaab
|
||||||
|
bbbabbaababaabbaaababbaa
|
||||||
|
bbbbbbbababbbbbababbaabaaabaaabbaababbaaabbbbbabbabbbabbaababbaa
|
||||||
|
baabbbaaaababaabaabbbaab
|
||||||
|
bbaaabaaaaaabbaaabaaabaaaabbbbbabbbabbbb
|
||||||
|
abbaabaabababaabbabbabaaabbababa
|
||||||
|
babbbaababbaaabbbaaababb
|
||||||
|
bbbbaababaaaabaaaaabbbbb
|
||||||
|
aabbbaaabbababaaaaaaaaabbaaaaaaa
|
||||||
|
abaababaaaababbabbbabbaabaabbabbababaaabaababaabababaaaa
|
||||||
|
ababbbaaaaabbbaaabbbabab
|
||||||
|
bbbabbaabaaabbbabaabaaaa
|
||||||
|
bbbbababbaaaabbbbababbbbbaabbbaabaaaaabb
|
||||||
|
abaaababbaababbababababbababababbbbbabbb
|
||||||
|
babaaaaaaabaaaaaabaabaaa
|
||||||
|
babbaabbbbbbababbabbbbbb
|
||||||
|
bbbaabaababababaaaaaaabb
|
203
src/bin/day19.rs
Normal file
203
src/bin/day19.rs
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
use std::collections::{HashMap, HashSet};
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
const INPUT: &str = include_str!("../../data/day19/input");
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
enum Rule {
|
||||||
|
Char(char),
|
||||||
|
Chain(Vec<u32>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Rule {
|
||||||
|
fn parse_part(alt: &str) -> Self {
|
||||||
|
let alt = alt.trim();
|
||||||
|
if let Some(alt) = alt.strip_prefix('"') {
|
||||||
|
let alt = alt.strip_suffix('"').unwrap();
|
||||||
|
assert_eq!(alt.len(), 1);
|
||||||
|
Self::Char(alt.chars().next().unwrap())
|
||||||
|
} else {
|
||||||
|
Self::Chain(alt.split_whitespace().map(|s| s.parse::<u32>().unwrap()).collect())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_line(line: &str) -> (u32, CachedRule) {
|
||||||
|
let colon = line.find(": ").unwrap();
|
||||||
|
let id = line[..colon].parse::<u32>().unwrap();
|
||||||
|
let alts = line[colon+2..].split(" | ").map(Self::parse_part).collect();
|
||||||
|
(id, CachedRule::Alternatives(alts))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn _make_combs(target: &mut HashSet<String>, current: &mut String, list: &[Arc<HashSet<String>>]) {
|
||||||
|
if list.is_empty() {
|
||||||
|
target.insert(current.clone());
|
||||||
|
} else {
|
||||||
|
let old_len = current.len();
|
||||||
|
for s in &*list[0] {
|
||||||
|
current.push_str(s);
|
||||||
|
_make_combs(target, current, &list[1..]);
|
||||||
|
current.truncate(old_len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
enum CachedRule {
|
||||||
|
Alternatives(Vec<Rule>),
|
||||||
|
CachedStrings(Arc<HashSet<String>>, HashSet<usize>),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
struct Grammar {
|
||||||
|
expansions: HashMap<u32, CachedRule>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Grammar {
|
||||||
|
fn parse(rule_lines: &str) -> Self {
|
||||||
|
let expansions = rule_lines.lines().map(Rule::parse_line).collect();
|
||||||
|
Self { expansions }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn _build_sets(&mut self, recursive_check: &mut HashSet<u32>, ndx: u32) -> Option<Arc<HashSet<String>>> {
|
||||||
|
let rules = self.expansions.get(&ndx).unwrap();
|
||||||
|
let alts = match rules {
|
||||||
|
CachedRule::Alternatives(alts) => alts,
|
||||||
|
CachedRule::CachedStrings(cs, _) => return Some(cs.clone()),
|
||||||
|
};
|
||||||
|
|
||||||
|
if recursive_check.contains(&ndx) {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
recursive_check.insert(ndx);
|
||||||
|
|
||||||
|
let mut result = HashSet::<String>::new();
|
||||||
|
|
||||||
|
let mut found_recursion = false;
|
||||||
|
for rule in alts.clone() {
|
||||||
|
match rule {
|
||||||
|
Rule::Char(c) => {
|
||||||
|
result.insert(c.to_string());
|
||||||
|
},
|
||||||
|
Rule::Chain(parts) => {
|
||||||
|
let mut comb = Vec::new();
|
||||||
|
for part_ndx in parts {
|
||||||
|
// abort if nested lookup loops
|
||||||
|
if let Some(cs) = self._build_sets(recursive_check, part_ndx) {
|
||||||
|
comb.push(cs);
|
||||||
|
} else {
|
||||||
|
found_recursion = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found_recursion {
|
||||||
|
_make_combs(&mut result, &mut String::new(), &comb);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if found_recursion {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let lengths: HashSet<usize> = result.iter().map(|s| s.len()).collect();
|
||||||
|
let result = Arc::new(result);
|
||||||
|
recursive_check.remove(&ndx);
|
||||||
|
self.expansions.insert(ndx, CachedRule::CachedStrings(result.clone(), lengths));
|
||||||
|
Some(result)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn optimize(&mut self) {
|
||||||
|
let mut recursive_check = HashSet::new();
|
||||||
|
self._build_sets(&mut recursive_check, 0);
|
||||||
|
recursive_check.insert(0);
|
||||||
|
for id in recursive_check.clone() {
|
||||||
|
if let Some(CachedRule::Alternatives(alts)) = self.expansions.get(&id) {
|
||||||
|
for alt in alts {
|
||||||
|
if let Rule::Chain(chain) = alt {
|
||||||
|
recursive_check.extend(chain);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let rule_ids: HashSet<u32> = self.expansions.keys().cloned().collect();
|
||||||
|
for id in rule_ids.difference(&recursive_check) {
|
||||||
|
self.expansions.remove(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn simple_match(&self, data: &str) -> bool {
|
||||||
|
match self.expansions.get(&0) {
|
||||||
|
Some(CachedRule::CachedStrings(cs, _)) => cs.contains(data),
|
||||||
|
_ => panic!("not simple enough"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn _complex_match_chain<'data>(&self, chain: &[u32], data: &'data str) -> Vec<&'data str> {
|
||||||
|
if chain.is_empty() {
|
||||||
|
return vec![data];
|
||||||
|
}
|
||||||
|
self._complex_match(chain[0], data).into_iter().map(|rem| {
|
||||||
|
self._complex_match_chain(&chain[1..], rem)
|
||||||
|
}).flatten().collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn _complex_match<'data>(&self, start: u32, data: &'data str) -> Vec<&'data str> {
|
||||||
|
let cr = self.expansions.get(&start).unwrap();
|
||||||
|
match cr {
|
||||||
|
CachedRule::Alternatives(alts) => {
|
||||||
|
alts.iter().map(|rule| {
|
||||||
|
let chain = match rule {
|
||||||
|
Rule::Chain(chain) => chain,
|
||||||
|
_ => panic!("only chains here"),
|
||||||
|
};
|
||||||
|
self._complex_match_chain(&chain, data)
|
||||||
|
}).flatten().collect()
|
||||||
|
},
|
||||||
|
CachedRule::CachedStrings(cs, lens) => {
|
||||||
|
lens.iter().filter_map(|&len| {
|
||||||
|
if data.len() >= len && cs.contains(&data[..len]) {
|
||||||
|
Some(&data[len..])
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}).collect()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn complex_match(&self, data: &str) -> bool {
|
||||||
|
self._complex_match(0, data).into_iter().any(str::is_empty)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let input_grammar;
|
||||||
|
let data;
|
||||||
|
{
|
||||||
|
let split_pos = INPUT.find("\n\n").unwrap();
|
||||||
|
input_grammar = Grammar::parse(&INPUT[..split_pos]);
|
||||||
|
data = INPUT[split_pos+2..].lines().map(str::to_string).collect::<Vec<String>>();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
let mut grammar = input_grammar.clone();
|
||||||
|
grammar.optimize();
|
||||||
|
println!("Lines matching simple grammar: {}", data.iter().filter(|line| grammar.simple_match(line)).count());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
let mut grammar = input_grammar.clone();
|
||||||
|
grammar.expansions.extend(vec![
|
||||||
|
Rule::parse_line("8: 42 | 42 8"),
|
||||||
|
Rule::parse_line("11: 42 31 | 42 11 31"),
|
||||||
|
]);
|
||||||
|
grammar.optimize();
|
||||||
|
/*
|
||||||
|
println!("{:?}", grammar.expansions.keys());
|
||||||
|
for (rule_id, rule) in grammar.expansions {
|
||||||
|
match rule {
|
||||||
|
CachedRule::Alternatives(alt) => println!("{} -> {:?}", rule_id, alt),
|
||||||
|
CachedRule::CachedStrings(_, lens) => println!("{} -> string with lengths: {:?}", rule_id, lens),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
println!("Lines matching complex grammar: {}", data.iter().filter(|line| grammar.complex_match(line)).count());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user