2020: day19: part 1
This commit is contained in:
parent
b0d3b805a1
commit
fb9a7e3fc9
|
@ -18,6 +18,7 @@ use aoc2020::day15;
|
||||||
use aoc2020::day16;
|
use aoc2020::day16;
|
||||||
use aoc2020::day17;
|
use aoc2020::day17;
|
||||||
use aoc2020::day18;
|
use aoc2020::day18;
|
||||||
|
use aoc2020::day19;
|
||||||
|
|
||||||
fn aoc2020_all(c: &mut Criterion) {
|
fn aoc2020_all(c: &mut Criterion) {
|
||||||
c.bench_function("day01", |b| b.iter(|| day01::run().unwrap()));
|
c.bench_function("day01", |b| b.iter(|| day01::run().unwrap()));
|
||||||
|
@ -38,6 +39,7 @@ fn aoc2020_all(c: &mut Criterion) {
|
||||||
c.bench_function("day16", |b| b.iter(|| day16::run().unwrap()));
|
c.bench_function("day16", |b| b.iter(|| day16::run().unwrap()));
|
||||||
c.bench_function("day17", |b| b.iter(|| day17::run().unwrap()));
|
c.bench_function("day17", |b| b.iter(|| day17::run().unwrap()));
|
||||||
c.bench_function("day18", |b| b.iter(|| day18::run().unwrap()));
|
c.bench_function("day18", |b| b.iter(|| day18::run().unwrap()));
|
||||||
|
c.bench_function("day19", |b| b.iter(|| day19::run().unwrap()));
|
||||||
}
|
}
|
||||||
|
|
||||||
criterion_group! {
|
criterion_group! {
|
||||||
|
|
450
aoc2020/input/day19.txt
Normal file
450
aoc2020/input/day19.txt
Normal file
|
@ -0,0 +1,450 @@
|
||||||
|
104: 23 105 | 105 23
|
||||||
|
40: 23 39 | 105 35
|
||||||
|
127: 23 3 | 105 49
|
||||||
|
96: 85 23 | 73 105
|
||||||
|
114: 70 23 | 106 105
|
||||||
|
124: 80 105 | 71 23
|
||||||
|
23: "a"
|
||||||
|
97: 105 12 | 23 104
|
||||||
|
18: 23 118 | 105 29
|
||||||
|
89: 121 105 | 39 23
|
||||||
|
13: 23 18 | 105 87
|
||||||
|
122: 50 105 | 24 23
|
||||||
|
6: 58 105 | 59 23
|
||||||
|
101: 105 44 | 23 43
|
||||||
|
31: 105 65 | 23 13
|
||||||
|
36: 64 105 | 68 23
|
||||||
|
74: 105 123 | 23 7
|
||||||
|
38: 19 23 | 48 105
|
||||||
|
118: 105 127 | 23 75
|
||||||
|
130: 23 30 | 105 44
|
||||||
|
59: 105 121 | 23 71
|
||||||
|
112: 92 23 | 97 105
|
||||||
|
91: 25 23 | 66 105
|
||||||
|
46: 30 23 | 39 105
|
||||||
|
111: 105 35 | 23 104
|
||||||
|
28: 105 129 | 23 112
|
||||||
|
25: 105 62 | 23 89
|
||||||
|
125: 23 61 | 105 100
|
||||||
|
120: 105 131 | 23 44
|
||||||
|
102: 43 105 | 48 23
|
||||||
|
105: "b"
|
||||||
|
27: 5 23 | 10 105
|
||||||
|
84: 21 23 | 130 105
|
||||||
|
56: 105 39
|
||||||
|
35: 23 23 | 105 23
|
||||||
|
44: 23 105
|
||||||
|
69: 80 105 | 104 23
|
||||||
|
100: 72 105 | 110 23
|
||||||
|
72: 39 105 | 19 23
|
||||||
|
95: 105 69 | 23 109
|
||||||
|
88: 120 105 | 78 23
|
||||||
|
53: 67 105 | 14 23
|
||||||
|
26: 21 23 | 56 105
|
||||||
|
80: 105 105 | 105 23
|
||||||
|
70: 19 23 | 12 105
|
||||||
|
92: 44 23 | 12 105
|
||||||
|
37: 48 105 | 55 23
|
||||||
|
132: 23 16 | 105 122
|
||||||
|
7: 105 48 | 23 12
|
||||||
|
113: 39 23 | 12 105
|
||||||
|
10: 102 105 | 126 23
|
||||||
|
94: 105 | 23
|
||||||
|
42: 105 128 | 23 132
|
||||||
|
103: 105 89 | 23 57
|
||||||
|
107: 105 79 | 23 76
|
||||||
|
11: 42 31
|
||||||
|
99: 47 105 | 1 23
|
||||||
|
55: 105 94 | 23 23
|
||||||
|
8: 42
|
||||||
|
4: 23 41 | 105 15
|
||||||
|
81: 51 105 | 116 23
|
||||||
|
76: 37 105 | 78 23
|
||||||
|
110: 12 23 | 35 105
|
||||||
|
45: 105 33 | 23 84
|
||||||
|
78: 23 131 | 105 35
|
||||||
|
63: 72 105 | 133 23
|
||||||
|
51: 19 105 | 131 23
|
||||||
|
83: 105 45 | 23 27
|
||||||
|
21: 23 71 | 105 104
|
||||||
|
19: 23 105 | 105 94
|
||||||
|
54: 23 48 | 105 55
|
||||||
|
41: 23 121 | 105 55
|
||||||
|
20: 115 105 | 86 23
|
||||||
|
15: 105 71
|
||||||
|
66: 105 113 | 23 49
|
||||||
|
121: 94 94
|
||||||
|
14: 99 105 | 81 23
|
||||||
|
22: 30 105
|
||||||
|
129: 105 109 | 23 111
|
||||||
|
5: 15 105 | 9 23
|
||||||
|
30: 105 105
|
||||||
|
131: 105 23
|
||||||
|
87: 23 77 | 105 91
|
||||||
|
98: 23 38 | 105 82
|
||||||
|
77: 23 88 | 105 74
|
||||||
|
43: 23 23 | 94 105
|
||||||
|
86: 23 98 | 105 93
|
||||||
|
58: 55 23 | 131 105
|
||||||
|
1: 23 35 | 105 30
|
||||||
|
9: 105 131 | 23 55
|
||||||
|
49: 104 105 | 55 23
|
||||||
|
68: 23 131 | 105 48
|
||||||
|
0: 8 11
|
||||||
|
71: 23 23
|
||||||
|
48: 105 23 | 23 94
|
||||||
|
29: 105 119 | 23 117
|
||||||
|
93: 52 23 | 22 105
|
||||||
|
16: 105 125 | 23 28
|
||||||
|
126: 35 23 | 43 105
|
||||||
|
65: 83 23 | 53 105
|
||||||
|
62: 19 105 | 104 23
|
||||||
|
12: 23 23 | 23 105
|
||||||
|
52: 105 19 | 23 104
|
||||||
|
67: 23 103 | 105 63
|
||||||
|
24: 4 105 | 26 23
|
||||||
|
50: 105 95 | 23 96
|
||||||
|
47: 105 30 | 23 30
|
||||||
|
32: 105 114 | 23 6
|
||||||
|
82: 105 19 | 23 12
|
||||||
|
75: 34 105 | 59 23
|
||||||
|
34: 23 39 | 105 80
|
||||||
|
17: 23 104 | 105 131
|
||||||
|
109: 44 23 | 39 105
|
||||||
|
79: 17 23 | 78 105
|
||||||
|
85: 12 23 | 39 105
|
||||||
|
57: 23 30 | 105 121
|
||||||
|
2: 23 30
|
||||||
|
3: 71 23 | 19 105
|
||||||
|
115: 108 105 | 36 23
|
||||||
|
64: 23 121 | 105 12
|
||||||
|
90: 105 32 | 23 107
|
||||||
|
116: 12 105 | 131 23
|
||||||
|
123: 71 105 | 35 23
|
||||||
|
61: 85 23 | 70 105
|
||||||
|
133: 80 94
|
||||||
|
119: 105 40 | 23 46
|
||||||
|
128: 23 90 | 105 20
|
||||||
|
60: 104 105 | 80 23
|
||||||
|
33: 23 89 | 105 101
|
||||||
|
73: 105 121 | 23 19
|
||||||
|
39: 105 105 | 23 23
|
||||||
|
108: 105 2 | 23 54
|
||||||
|
106: 71 105 | 44 23
|
||||||
|
117: 124 105 | 60 23
|
||||||
|
|
||||||
|
aababbbaaabbaaaabbabaaaabbbaababbbbbaaabbaabbbbb
|
||||||
|
aababbabaababbbabbbabaaabbbbbbababaaabaa
|
||||||
|
bababbbabaaabbaababbabaaabbbaaab
|
||||||
|
baabababaaababbaabbbbabb
|
||||||
|
baaaaaabaaaaababbbabbabbbaaaabba
|
||||||
|
abbabbaaabbbabbaabbbababaabbabbaaababaabbabbabbbaabaabababbaaabbaababababbbbbbab
|
||||||
|
bbbaabbaababaabaabbaaaabbaabaaabababbaababbbaaabaaaaaaabaabbbaabaabababa
|
||||||
|
baaabaaaababbabbbabbababbbbabaaaabaaaabb
|
||||||
|
bababaababbbababababaababbabbabbaabbaabbaaabaabb
|
||||||
|
aabbbbabbabbababbbbaabbb
|
||||||
|
bbbbbaaabbabbabbbaaabbbb
|
||||||
|
bbaaabbabababbaaaabbbabb
|
||||||
|
aaaababbaaaaaabbaaaababbababbbaa
|
||||||
|
baaaabbbabaabbbaabbabbab
|
||||||
|
aabbaabbbbbaaaaaabbaaaab
|
||||||
|
baaaabbbaabbababbbbbbaaababaabba
|
||||||
|
abaaababbbaabbababbbaaaabaabaabbbbbbbaba
|
||||||
|
baaababaaabaabaaaaabbbababbaaaaa
|
||||||
|
bbaabbabaabbbbabaabbbbaa
|
||||||
|
bbabaaaabbbbaaabbbababbb
|
||||||
|
abaaaaabbaaabbabbbabbaab
|
||||||
|
baaaabbbabaabbbaaaabaaaa
|
||||||
|
bbabbbbbbababaaabbbbabaabaaaaaaa
|
||||||
|
abababbbabbbbbbbbbababaa
|
||||||
|
ababaabbbbbabbaaaabaaaaabbbaabbaabbbbaaabbbabaababbbbbbaaaababbaabbaaaba
|
||||||
|
babbbbaabaaaabbbababbaaa
|
||||||
|
bababbbaaaaabaabbbabbaaa
|
||||||
|
babababaaaabbbbbbbababaa
|
||||||
|
aaaaaaaabbbaabbbabbaaabbabaabbbbabaabbaabababbaaaaababbababbabbaaaaabbbbbaabbbbabbaaabba
|
||||||
|
babbaabaabababbbaababbbb
|
||||||
|
baabbaabbaaaabbbbbbbabaabbbababb
|
||||||
|
bbbaaaaaabbbaaabbbabbaaa
|
||||||
|
aababbbabbaaababbaababaabbbaabba
|
||||||
|
bababbbaaabaaabbabbaabba
|
||||||
|
baaaabaabaaabbabbbbaaaaa
|
||||||
|
bbbabbabaabaaabbaaabaaabbaaabbba
|
||||||
|
bbaaaabbbaaabaaabbbaaaabbbaaaabbbabbabbbbabaaaba
|
||||||
|
bbabbbbabbabaaaaaabaabbbaababbbb
|
||||||
|
abaaababaababbabbbbaabba
|
||||||
|
bbbaabaababaaaabbbbababa
|
||||||
|
aaababaaabbaaabbaaaababa
|
||||||
|
bbaababaaaaaabaaaaabaaaa
|
||||||
|
aabbaabaaaaaabababaabaabbbaabaabbbbaabbaabbaaaab
|
||||||
|
babababababababbbbbbabbb
|
||||||
|
aabbaaaabbbaaaabbabababbbbbbbbbbaaaaaaaa
|
||||||
|
babbabaaaaaaababbabaaabb
|
||||||
|
bbbbabaaabaaabbaaaababbb
|
||||||
|
bbabaaaabbaabaaabbbaabaaabbaabba
|
||||||
|
babbbaaaabaaabbaabbaaaab
|
||||||
|
baaababbababbabbbabababaababbabbaaabbbaaababbaab
|
||||||
|
baaaabaabaaabbabbbbababa
|
||||||
|
babababbabbbaaaaaaaaaaaa
|
||||||
|
bbaababbabbaaabbabbbbabbabbbabababbbabba
|
||||||
|
aabbbaabbbabbbbbabaaabbabbabbbbbaabaababbabbbabbaabababa
|
||||||
|
aababbabaabaababbbabbabbabbabaabababbaab
|
||||||
|
abbbbbaabaaabbababbbbbaabaaabbbb
|
||||||
|
abababababaaaabbbaaaabbababaaabbabaabbbbbababaab
|
||||||
|
abaaabbaabababaaababbbbaaabaaabbabbabababababababaaabaabaaaabaaababaaababbaaaaaaabaabbbb
|
||||||
|
baaabbabaababaabbabababbbaaabaaaabbbabbaabaaaabb
|
||||||
|
abaababbababaababaabbbaababbaaaa
|
||||||
|
aaaaaababbbaababbbbaabbb
|
||||||
|
babababbbababbaabbabbbaaabaababa
|
||||||
|
aaabaababbbbabbbbbbbbbaababbabbabbbaabababbbbabbbabaaababaabababaaaaabba
|
||||||
|
abaabaababbbaaaabbaabaab
|
||||||
|
bbbabaaaabbbaababbaaaaaa
|
||||||
|
aabaaabbbbababababaaaabaabbbaaaaaaabaababaabaabb
|
||||||
|
ababbaabbaaaaaabbbbaaabaabbaaaabaababbbbbbaaabbaaababaabbbbababa
|
||||||
|
babbababbbbbbaaaababbaab
|
||||||
|
baaabbabbababaabaaaabbbb
|
||||||
|
baaababbbaabababababbaaa
|
||||||
|
bbaaabbbaaaaabbabbbaaaba
|
||||||
|
babbababbaaaabbbabbabaaabaabbbba
|
||||||
|
babbbaaabbabbbaababaabba
|
||||||
|
bbaabaaaaaabbabaaaabbabaaaaabbabbaaababa
|
||||||
|
aaaaaabaabbabaaaabaabbbaaaabbaaabaaabbbb
|
||||||
|
bababaababaaaaabbaabbaaa
|
||||||
|
aababaabaabaaababbaaaabbaababaaa
|
||||||
|
bbbabaabaaaabaababbbbbab
|
||||||
|
baabaabaaaaababbbbbbabba
|
||||||
|
abaabaabbbbaabaaababaabababbabbbbbbbaaaa
|
||||||
|
bababbaaaaaaabbaaaaaaabbabababba
|
||||||
|
bbabaabaabbabbbbbaaaabaaaabbbabb
|
||||||
|
bbabababababaababbbaaaabbbbbbaba
|
||||||
|
aabaabbbbabababaaabaaaaabbabbbabbbbbaabbbbbabbbbabbbbaba
|
||||||
|
abbaaaaabaababbabaaaabab
|
||||||
|
aabbbaabbbabbbbbbaaaabbbabbaaaaabababbbb
|
||||||
|
abaabbbbbbaaabbabaabbaabaaaaabbbbaabbabb
|
||||||
|
aabaabaababaaaaaabbabaab
|
||||||
|
abbbbbaababbaabbbbaaabaaaaabbbaa
|
||||||
|
aabbaabbaaaaababaabbabaabbbbbbbb
|
||||||
|
abbaaabbbbbabbbbaabbabba
|
||||||
|
bbabababaaabbaabbaaabbabbbbbbaaaababaabaaaaabbaabaabaaaa
|
||||||
|
bbaabaaababababbaaaabaaa
|
||||||
|
babbbbaabaaaaabbabbbaabb
|
||||||
|
babbaabaaaaabaabaabaaabaaabababa
|
||||||
|
aabaabbbaabbbabaabbbaabaababaaab
|
||||||
|
abbbbabbbbaaaabbbbababaa
|
||||||
|
bbbbbaaabbabaaaabbbbabbb
|
||||||
|
abaabababbabaaabaababbaa
|
||||||
|
bbabaaabbaaabbaaabbaaaba
|
||||||
|
bbabbbbaaaabbbbbbaabbbbababbbaabaabbbaaaabbaabababaabaaabaabbbbbabbaabaabbaaabbaaababbaa
|
||||||
|
aabaabbbabbaabaaaaaaaaaa
|
||||||
|
babbbaaababbaabbbbababba
|
||||||
|
bababbababaaaaaabbbbabba
|
||||||
|
baabababaabaabaaaaaababa
|
||||||
|
ababaabaabbabaaabbaabbbbabaaaaabbbbbbaaabbaabaababbbabaaababbaaa
|
||||||
|
bbaabbaaaabbbaabbaaabbbb
|
||||||
|
baaaaaabaabaabaaabbaaaaa
|
||||||
|
aaababaabbabbbbaabbbbbaabbbaaabababaaaba
|
||||||
|
abbbaababaabaabaabbabbaa
|
||||||
|
abbbbbaaaabbabaaabababaa
|
||||||
|
abbbaabababbaabbaababbaabbaaaabbabbbbbbaabbabbbaaaaabbba
|
||||||
|
babaaaababaaabbabbbabaaabaababbbbabbaaab
|
||||||
|
babaaaaababbbbbbbaabaaaa
|
||||||
|
bbbbbaabbabaaaaaabbbbabbaaabbbbbbbabbaabbbabbbbabbbabbbb
|
||||||
|
babababaaaaababbaaababbaabbbbaaa
|
||||||
|
aaababaaaabaabaaababaaaa
|
||||||
|
bbaaaabaabbbbabababbbaab
|
||||||
|
bbbaaaabaababbbaabaaabbababbbbab
|
||||||
|
abbbbaabbaaaaabbbabbaabaabbbaaaabbabbaab
|
||||||
|
abbbababababbabababaaaab
|
||||||
|
aabaabbbabaababbbabaabab
|
||||||
|
bbaaaababaabaabaaabbbabb
|
||||||
|
bbbabbabbabbababaaabaababbbaaabb
|
||||||
|
babababbbbaaababbbbabaab
|
||||||
|
baabbbabbbbbbaaabaabbbabaabaaabaabbaabbb
|
||||||
|
aaaaabbabaaababbbbbababb
|
||||||
|
bbbaabaabababbbababbabbabbbaabbbbbbabbaa
|
||||||
|
bbaaabababaaaaababaaaababbababbbbbbbbbbb
|
||||||
|
aaaaababbaabbbababbaaaab
|
||||||
|
bbbaaaabbaababaabbbbbbbababbbbbb
|
||||||
|
bbbbaaababbbaababababbbaabaababaababbbbbbaababbb
|
||||||
|
bbabbbaabaaabaaabbbababb
|
||||||
|
aabbababaabaaaaabbbabbabbbaaaaaa
|
||||||
|
aaababbaabbaabaaabaaaabbaabbabbababbbabbabbaabbb
|
||||||
|
ababaabaaabaabbbabbaaaaa
|
||||||
|
ababaabbaaababbaabaaaababbabbbabbbbbbbaaaaaabbaa
|
||||||
|
baaabaabbbabbabababaabba
|
||||||
|
aaabaaabaaabaababbbabaabbabbbbbb
|
||||||
|
aabaaabbaabbaabbabbbababbabbaabaabbabbab
|
||||||
|
baaaabaaaabaaabbbbbaaaababaaabbabbbababbabababaa
|
||||||
|
bbaabababbabaaabbbaabaaabaaaabba
|
||||||
|
abaabaabbbbaaaabbabaabaa
|
||||||
|
bbbaababaaaabaabababbbbbaabbbabbbaaaaaaa
|
||||||
|
bbaababbababaababbaaaaaa
|
||||||
|
bbbbbbbabbbbbbaaabaabbaa
|
||||||
|
ababbbbbbabbaabbbbaaaaab
|
||||||
|
bbabbabbaabbabaaaabbbbba
|
||||||
|
ababbaaababbabbabbaabbbabaabbabbababaabbabbbbaabbbbaaabaaaaabbbaaaaabbabbabbabbb
|
||||||
|
aaaaaaabaabbbbaababbbabbababbabbbbabaaaababaabbbbbabbabb
|
||||||
|
baaaabaabababaaaaaabbbaa
|
||||||
|
ababbbbaaabbaabaaabbababbabababaaaaababbbabaabbaabaabbaabbbbbabb
|
||||||
|
aabaaabbaaabaababbbaabaabbbbabba
|
||||||
|
bbabaaabbaabbbaaabbbbbab
|
||||||
|
bbaabaaabbbbaaababbabbba
|
||||||
|
aabbabaaabbbbbbbaabbabbb
|
||||||
|
baabababaabbabababababaa
|
||||||
|
abbbbabbaaabaababbaabbabbbbaabababaaabbabbbbabbbababababababbaaa
|
||||||
|
baabbaababababaaabbaabaaaaaabaaaabbabaaabbababaaaaaabbaaabaaabbb
|
||||||
|
bbbabbbbaaaabaabbbbaaaabbabbbaba
|
||||||
|
abaaababbabbaabbbbbaabba
|
||||||
|
ababbabbbaaaabaaabaaabaaabababbbbbbbbbbbbbbabbba
|
||||||
|
aabbbabaaaaaabaabaaabbbb
|
||||||
|
aaaaaabaababbbbaabaabbab
|
||||||
|
ababaaaaabaaabbbbbbbababbabaaababaaaabaaabbabbbb
|
||||||
|
babbabaaabaaaaabbaaabbaabaaaabaaaababaaa
|
||||||
|
bbbbbbbaaabbbbabbbbbabbb
|
||||||
|
abbbbabbbbabbabbbaabababbabaabab
|
||||||
|
babbbbaabbabaabbabaaabbabaaabbba
|
||||||
|
bbbabbbbbababababaaabbabbbbbaabb
|
||||||
|
bbabbabbbaaabbaaaabbaabbabbbbbbbabbbbbbbbabaabbbbabbabbbabaabaaaabbaaaaa
|
||||||
|
bbabaababaaabbabbbabaabbaabaabbababbbbba
|
||||||
|
bbabaaabbbaaabaaabbbabbb
|
||||||
|
aabaaabbaaaabaabababbaaa
|
||||||
|
abbbaababbabbbaaabbaaaab
|
||||||
|
abaabbbabbabaaaaaabaaabbaaaaaabbbaabbbba
|
||||||
|
bbabaabbabbbbbbbaabababb
|
||||||
|
bababbbaaaaabaabababbbaa
|
||||||
|
abbbaaaabbbaabababbbbbbaabaaaaabbabbbbbabaabbbbbababbbbabaaababbbbbabbaabbbababa
|
||||||
|
aaabaababababbaabaabbbabababbaaabaaabbaabaaabbbabbaaaaabaabaaaabaaaaaaaa
|
||||||
|
abbaaabbababbbbbbaabbaba
|
||||||
|
aabaababbbabbbabbbabaababbaaaabaabbbbbba
|
||||||
|
bbaabbaaabbbbaabababbbaa
|
||||||
|
aababaabababbbbababbbaba
|
||||||
|
bbbbbbbaaabaababaabbaabbbaaaaabababaabbb
|
||||||
|
abbbaaaabbbabbbbaababbbb
|
||||||
|
aaababbaaabbbababaabaaab
|
||||||
|
bbaaabbababbbbaabaababba
|
||||||
|
bbbbbaaaabaabbbbabbbaabb
|
||||||
|
baaabbaabababbabbbbbaaaa
|
||||||
|
abbbbababbbbbbabbaabaaabbbbbbaab
|
||||||
|
baabbbabbbbbbbbabbaaaabaababaaaa
|
||||||
|
aaaaabbaaabbaaaaaabaaabaaaabbbaa
|
||||||
|
bababbaaaabbaaaaaabbbbaa
|
||||||
|
abaaabbbaaabaabbabbbaaabaaabaaaaaababbbb
|
||||||
|
aaabbbbbbbabaaabbbaaabbaababbbbbaabaaaab
|
||||||
|
aaabbaabaabbaaaabbaaaaab
|
||||||
|
bbaabaaaaabaaaaaabbabaab
|
||||||
|
babababaababaabbabbabaab
|
||||||
|
aabaabbbbbbbbbaabbabaaaaaababbbaaaababaaaaabbbbaabaabbabaaaabbaabbaabaab
|
||||||
|
bbaaabaaaabbbbabaabbbbabbbbbabba
|
||||||
|
aaaabaabbaaababbbbbbbbaaabbabaabbbbbbbbb
|
||||||
|
abbaababbbbabaabbaabbbba
|
||||||
|
aaaabaabaababbbababbbabb
|
||||||
|
bbaabbaaaababbabaaabbabaaaaabbaa
|
||||||
|
aaabaaabaabbabaababaaaaaabaaabaa
|
||||||
|
aaabbababbaaabbababaabaa
|
||||||
|
abaaabbaababbbabaabaabbbaabaaaaabbababbb
|
||||||
|
bbaaabbbaaabaabaabbaabba
|
||||||
|
bbaababbbbabbbbbbaaababa
|
||||||
|
baaabbaababbaabaabbbbbbbbabaaaabbbbaabba
|
||||||
|
baaaabbbbaabaaaabbaaaaaabbbbbabababaaaba
|
||||||
|
bbaababaaabbbababababaaaabababab
|
||||||
|
baaaabaabbabbabbbaababbb
|
||||||
|
bbaaaabaabaaabbababbaababbbbbbbbabbabbab
|
||||||
|
babbaaaabbababbaaaababbbbabbabaabbababbbbbbabbba
|
||||||
|
bbabaaabababaabaabbbabba
|
||||||
|
bbbaababababbbababbabbab
|
||||||
|
aabbbbabaaabbbbbaabbbbaa
|
||||||
|
aabaabbbabaaaaababbabbba
|
||||||
|
bbababababbbbabbabbaabbb
|
||||||
|
baaaaabbaabbababbbaaaabbbababbbabbbbbaabaaaabbba
|
||||||
|
bbbaabaaabbabaaabaabaabb
|
||||||
|
bbbbabaaabbbababbbaabaaabbaabbaa
|
||||||
|
babbabbbbaabaaaababaaabababbbaaaaaaaabaaaabbababaabababbabbabbbabbabbbaa
|
||||||
|
aaaaabaaaaaaaabbabbabbaa
|
||||||
|
aaababbabbbabbbbababbababbbbbbbb
|
||||||
|
baaabbaabbbbabaaabbbbabbbbababbb
|
||||||
|
bbabbbbabbbaabaabaabbbabaabaaabbbabaabbababbaaaaaaaabbbb
|
||||||
|
bbabbbabaabaabaabaaabbba
|
||||||
|
ababaabbbbaaabaabbaababaaaaabbaabbaabbba
|
||||||
|
abbbaaaababababbbbbbbbbababbbabb
|
||||||
|
aabaababbbaabaaaabbabbab
|
||||||
|
abaabbbabaabaababaaabbbb
|
||||||
|
baabbbaaabbbbbaabbbabbabaaaaaabaaabaabbbbbaabbaaabbaaaab
|
||||||
|
bbabaaabaabbababaaabaabb
|
||||||
|
ababbabaabbbabababbbbaba
|
||||||
|
abaababaaaaaaabbabbbababaabababaabaabaaa
|
||||||
|
babababbabbaaaaabbbbabbbaababbbbbaabaabaaabbbbabbabababa
|
||||||
|
abbaabbaaababbaabaabbababaabaabb
|
||||||
|
abaabaabbabbabaaabaaabaa
|
||||||
|
aaaaaaaaaabaabaaabbbababbababbbbaababbaaaaaabbabababbabbbabaabab
|
||||||
|
bbaaaabaabbbbbaaaaabaaabbaaaabbabaabaaab
|
||||||
|
ababaabbbaaabaaaaaabbbab
|
||||||
|
bbabbabaabbaaabbbabbbaab
|
||||||
|
aaaabbbbaaaabababaabaabb
|
||||||
|
bbabaaabaaaaabbaaaaabbba
|
||||||
|
abbbababaabaababababaaab
|
||||||
|
bbbaaaababaaabbbbabababaabbaabbb
|
||||||
|
aabbababbaabaababaababaaababaabbbaabbbaa
|
||||||
|
ababababbaaabbaaababbabaababaaaa
|
||||||
|
bbaaabbbbbabaabbaabaabaaabaaabaaabbaaaab
|
||||||
|
bbaababaaabbaaaaaaaaabaaaaaaaababababbababaaaabaaaaaabbb
|
||||||
|
aaaaabaababbbbaabbabbabaaaaabaabaaaaabbabababbbbabbbbaaa
|
||||||
|
abbabaaababaaaabaaaaabbbbbbbaaaa
|
||||||
|
aabbaaaaaabbbaabaabbbbaa
|
||||||
|
abaabaabbabaaaaabbbbbabbbbababaa
|
||||||
|
abbaabaabbbabaaaaabbaababbaaaaababbbaaab
|
||||||
|
bbaabbabaabaabaabaaaabaabbabbaaababaaabb
|
||||||
|
aaababaabababbbabbbaaaabababbbaa
|
||||||
|
abaaabbababbbababbbaabababbababb
|
||||||
|
aababaabaabbbabaabbaaaab
|
||||||
|
abbabaaabaabbababaabbbbaabbaabbabbbaaaaa
|
||||||
|
aaabbabaaaabbbbbaabbbaabaaababaaaabaaabbbaabbaaa
|
||||||
|
babbaabbababaabbaabbabbb
|
||||||
|
aaabbbbbbbabbbaabaabbaba
|
||||||
|
abaaabbaabaababaabbaababbaababbaaaabbabb
|
||||||
|
bbabbbbbaababaabbaabbbbbabbbaabb
|
||||||
|
baabaabaabbabaaabbaaababaabbaaab
|
||||||
|
bbbaabababbbbbaaaabbaaaaaabbbaaa
|
||||||
|
aabaabbbaaabbbabbbbaaabaababababbbabbaabbbbbaababaabbbba
|
||||||
|
abbbbbaaaaabaabababaaabb
|
||||||
|
bbbabbbbbbaaaabbabbaaaba
|
||||||
|
abbabaaaababaabbbaaabbbb
|
||||||
|
ababbabababbbaaaababbbaa
|
||||||
|
bbbabaaabbaaabaabbabbaaa
|
||||||
|
babbaabaabbaabaaaabbabbb
|
||||||
|
babaaaaaabaaababbababbabbbbbaabababbbbbb
|
||||||
|
baabbbabaaabaababaaaabba
|
||||||
|
abbabbbbaabaabababbbabba
|
||||||
|
baaababbbbaababaaabbabaabbbaababaabbabbababbbbab
|
||||||
|
abbbbaababaaabbabbababba
|
||||||
|
bbaabababbaaabbbabbaaaab
|
||||||
|
baabbaabbbbababaababaaaa
|
||||||
|
bbabaaaabaabbaababbbaaab
|
||||||
|
baaaaabbaababaababbaaabbbbaaaaaa
|
||||||
|
bbabbbbaaabaaabaabbbbabbababbaabbaabbbbb
|
||||||
|
babbaabbaabbabaaaabbabbb
|
||||||
|
abaaababbabbbaaabbbbbbbb
|
||||||
|
abaabbbababbabaaababaabbbbaaabbaaaaabbaa
|
||||||
|
aabaabbbbbaaaabbaaabaaaa
|
||||||
|
ababbbbaabaabbbabbbbbabb
|
||||||
|
aabbbbabaabbbabaaaabbbab
|
||||||
|
bbabbbbaaaabaababaabaaab
|
||||||
|
aabbbbbbbbaaabbbbaabbaabaababaabbbababba
|
||||||
|
abaababbabbabaaaababbbba
|
||||||
|
aaabbbbbbbabbbbabbbbbbbabbbbbbbaabbaabbabbaabaabbabaabaa
|
||||||
|
baaabaaaaaababbabababbbb
|
||||||
|
bbaaaabbaaaaaabbaababbaa
|
||||||
|
aaaaababbabbbaaabbabaaaaabbbabbbbabbbbab
|
||||||
|
baaabaabbabbabbabbaaaaaa
|
||||||
|
bababbbabaaaaaabbaaaabababbbaabbbbbaaaaa
|
||||||
|
abaaaaabbaaaabaabbbbbbaabaaabbaababaabbb
|
||||||
|
bbaaabbababbbaaabbbbaaba
|
||||||
|
babbaabbabbbbbaababbbbab
|
||||||
|
abaabbbbbbaaababbabababbbabbabababbbabbbbaaabbbb
|
||||||
|
babbabababbbbaabaaababaaaabaabba
|
||||||
|
abbabbaaabaabaaaabbaabbabbbaaaaa
|
||||||
|
bbaaaababbabaaabaabbabba
|
||||||
|
bbabaaabaaaabaabbbbaaaabaabbbbaa
|
||||||
|
bbabbbbbbbbbbbaaaabbbbbaabaabaaa
|
||||||
|
bbbbaaabaaabbabaaaababab
|
||||||
|
babbbbaabaaaaabbbbaaaababbabbbbbaababbbabbababbbbaaaabba
|
||||||
|
aabbbbabbbbbbaaaabbaaaaa
|
||||||
|
bbaabababbabaaabbabbbbab
|
12
aoc2020/input/day19_provided.txt
Normal file
12
aoc2020/input/day19_provided.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
|
168
aoc2020/src/day19.rs
Normal file
168
aoc2020/src/day19.rs
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use std::fmt::Write;
|
||||||
|
|
||||||
|
use anyhow::{Context, Result};
|
||||||
|
|
||||||
|
const INPUT: &str = include_str!("../input/day19.txt");
|
||||||
|
|
||||||
|
pub fn run() -> Result<String> {
|
||||||
|
let mut res = String::with_capacity(128);
|
||||||
|
|
||||||
|
writeln!(res, "part 1: {}", part1(INPUT)?)?;
|
||||||
|
|
||||||
|
Ok(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_rules(input: &str) -> Result<HashMap<usize, Rule>> {
|
||||||
|
input
|
||||||
|
.lines()
|
||||||
|
.map(|line| {
|
||||||
|
let mut parts = line.split(": ");
|
||||||
|
|
||||||
|
let idx = parts
|
||||||
|
.next()
|
||||||
|
.context("no idx on left side of colon for rule")?
|
||||||
|
.parse()?;
|
||||||
|
|
||||||
|
let rule = parts
|
||||||
|
.next()
|
||||||
|
.context("no rule on right side of colon for rule")?
|
||||||
|
.parse()?;
|
||||||
|
|
||||||
|
Ok((idx, rule))
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part1(input: &str) -> Result<usize> {
|
||||||
|
let mut parts = input.split("\n\n");
|
||||||
|
|
||||||
|
let rules = parts.next().context("no rules before linebreak")?;
|
||||||
|
let rules = get_rules(rules)?;
|
||||||
|
|
||||||
|
let lines = parts.next().context("no lines after linebreak")?.lines();
|
||||||
|
|
||||||
|
Ok(lines.filter(|l| rules[&0].matches(&rules, l)).count())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
enum Rule {
|
||||||
|
Character(char),
|
||||||
|
Chain(Vec<usize>),
|
||||||
|
Either(Box<Rule>, Box<Rule>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Rule {
|
||||||
|
fn matches_rec<'a>(&self, rules: &HashMap<usize, Rule>, mut s: &'a str) -> (bool, &'a str) {
|
||||||
|
match self {
|
||||||
|
Rule::Character(c) => {
|
||||||
|
if s.is_empty() {
|
||||||
|
return (false, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
let res = s.chars().next().unwrap() == *c;
|
||||||
|
|
||||||
|
(res, &s[1..])
|
||||||
|
}
|
||||||
|
|
||||||
|
Rule::Chain(idxs) => {
|
||||||
|
for idx in idxs {
|
||||||
|
let rule = &rules[idx];
|
||||||
|
let (res, new_s) = rule.matches_rec(rules, s);
|
||||||
|
if !res {
|
||||||
|
return (false, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
s = new_s;
|
||||||
|
}
|
||||||
|
|
||||||
|
(true, s)
|
||||||
|
}
|
||||||
|
Rule::Either(r1, r2) => {
|
||||||
|
let (res1, s1) = r1.matches_rec(rules, s);
|
||||||
|
if res1 {
|
||||||
|
return (true, s1);
|
||||||
|
}
|
||||||
|
|
||||||
|
let (res2, s2) = r2.matches_rec(rules, s);
|
||||||
|
|
||||||
|
(res2, s2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn matches(&self, rules: &HashMap<usize, Rule>, s: &str) -> bool {
|
||||||
|
let (res, s_res) = self.matches_rec(rules, s);
|
||||||
|
|
||||||
|
res && s_res.is_empty()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::str::FromStr for Rule {
|
||||||
|
type Err = anyhow::Error;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self> {
|
||||||
|
if let Some(idx) = s.find('"') {
|
||||||
|
let c = s[(idx + 1)..]
|
||||||
|
.chars()
|
||||||
|
.next()
|
||||||
|
.context("couldn't find char after double quote in rule")?;
|
||||||
|
return Ok(Rule::Character(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
if s.find('|').is_some() {
|
||||||
|
let mut rules = s.split(" | ");
|
||||||
|
|
||||||
|
let rule1 = rules.next().context("expected rule on left side of `|`")?;
|
||||||
|
let rule2 = rules.next().context("expected rule on right side of `|`")?;
|
||||||
|
|
||||||
|
let rule1 = rule1.parse()?;
|
||||||
|
let rule2 = rule2.parse()?;
|
||||||
|
|
||||||
|
return Ok(Rule::Either(Box::new(rule1), Box::new(rule2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
let nums = s
|
||||||
|
.split(' ')
|
||||||
|
.map(|n| n.parse().map_err(anyhow::Error::new))
|
||||||
|
.collect::<Result<_>>()?;
|
||||||
|
|
||||||
|
Ok(Rule::Chain(nums))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
const PROVIDED: &str = include_str!("../input/day19_provided.txt");
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1_provided() {
|
||||||
|
let mut parts = PROVIDED.split("\n\n");
|
||||||
|
|
||||||
|
let rules = get_rules(parts.next().unwrap()).unwrap();
|
||||||
|
|
||||||
|
let tests = &[
|
||||||
|
("ababbb", true),
|
||||||
|
("bababa", false),
|
||||||
|
("abbbab", true),
|
||||||
|
("aaabbb", false),
|
||||||
|
("aaaabbb", false),
|
||||||
|
];
|
||||||
|
|
||||||
|
for (test, expected) in tests {
|
||||||
|
assert_eq!(
|
||||||
|
rules[&0].matches(&rules, test),
|
||||||
|
*expected,
|
||||||
|
"input: `{}`",
|
||||||
|
test
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1_real() {
|
||||||
|
assert_eq!(part1(INPUT).unwrap(), 144);
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,3 +18,4 @@ pub mod day15;
|
||||||
pub mod day16;
|
pub mod day16;
|
||||||
pub mod day17;
|
pub mod day17;
|
||||||
pub mod day18;
|
pub mod day18;
|
||||||
|
pub mod day19;
|
||||||
|
|
|
@ -20,6 +20,7 @@ use aoc2020::day15;
|
||||||
use aoc2020::day16;
|
use aoc2020::day16;
|
||||||
use aoc2020::day17;
|
use aoc2020::day17;
|
||||||
use aoc2020::day18;
|
use aoc2020::day18;
|
||||||
|
use aoc2020::day19;
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
let days: &[DayFunc] = &[
|
let days: &[DayFunc] = &[
|
||||||
|
@ -41,6 +42,7 @@ fn main() -> Result<()> {
|
||||||
day16::run,
|
day16::run,
|
||||||
day17::run,
|
day17::run,
|
||||||
day18::run,
|
day18::run,
|
||||||
|
day19::run,
|
||||||
];
|
];
|
||||||
|
|
||||||
aoc::run(days)
|
aoc::run(days)
|
||||||
|
|
Loading…
Reference in a new issue