Completed day 19 part 1

Part 2 is failing the example and I have no idea why :(
This commit is contained in:
Tyler Hallada 2020-12-24 17:46:19 -05:00
parent 77b0b1901b
commit 2fb9b4ed4a
7 changed files with 939 additions and 0 deletions

21
day19/Cargo.lock generated Normal file
View File

@ -0,0 +1,21 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "anyhow"
version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68803225a7b13e47191bab76f2687382b60d259e8cf37f6e1893658b84bb9479"
[[package]]
name = "day19"
version = "0.1.0"
dependencies = [
"anyhow",
"maplit",
]
[[package]]
name = "maplit"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"

11
day19/Cargo.toml Normal file
View File

@ -0,0 +1,11 @@
[package]
name = "day19"
version = "0.1.0"
authors = ["Tyler Hallada <tyler@hallada.net>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = "1.0.36"
maplit = "1.0.2"

613
day19/input/input.txt Executable file
View File

@ -0,0 +1,613 @@
19: 33 53 | 123 7
3: 33 82 | 123 45
92: 47 123 | 91 33
34: 123 60 | 33 63
91: 123 9 | 33 7
20: 33 46 | 123 79
101: 33 27 | 123 56
47: 52 33 | 84 123
115: 116 33 | 7 123
41: 57 33 | 127 123
33: "a"
109: 123 89 | 33 33
106: 33 72 | 123 6
8: 42
104: 92 123 | 41 33
75: 123 22 | 33 100
21: 76 123 | 28 33
102: 95 33 | 81 123
54: 33 44 | 123 2
77: 123 13 | 33 116
1: 33 26 | 123 34
83: 123 90 | 33 66
11: 42 31
58: 9 33 | 63 123
136: 33 74 | 123 109
25: 59 123 | 52 33
17: 123 91 | 33 136
116: 89 89
32: 116 33 | 53 123
72: 9 123 | 111 33
70: 33 9
80: 33 20 | 123 1
18: 111 33 | 74 123
86: 33 122 | 123 55
14: 33 108 | 123 37
84: 33 33 | 123 123
67: 6 123 | 18 33
78: 123 58 | 33 96
38: 111 123 | 52 33
119: 125 33 | 77 123
69: 33 32 | 123 64
10: 110 123 | 3 33
118: 69 33 | 107 123
85: 123 62 | 33 17
61: 33 117 | 123 93
62: 70 123 | 117 33
4: 123 52 | 33 7
52: 123 33
40: 84 123 | 60 33
49: 123 47 | 33 65
79: 13 33 | 84 123
6: 7 33 | 116 123
113: 33 133 | 123 115
98: 116 89
53: 123 123
42: 33 35 | 123 21
44: 33 15 | 123 55
100: 123 67 | 33 121
27: 88 33 | 9 123
76: 33 23 | 123 85
16: 33 24 | 123 73
9: 123 33 | 33 123
26: 109 123 | 59 33
36: 7 33 | 52 123
50: 123 88 | 33 63
65: 59 33 | 84 123
105: 9 123 | 7 33
112: 74 33 | 60 123
120: 111 123 | 84 33
23: 106 33 | 126 123
110: 104 123 | 102 33
128: 33 12 | 123 5
31: 123 114 | 33 10
30: 57 123 | 98 33
82: 33 51 | 123 128
125: 7 123 | 9 33
99: 123 120 | 33 93
87: 52 123 | 59 33
37: 33 101 | 123 16
43: 123 7 | 33 88
117: 123 63 | 33 7
12: 33 88 | 123 53
55: 33 111
2: 123 132 | 33 38
96: 33 116 | 123 7
135: 33 109 | 123 111
126: 112 123 | 36 33
97: 111 33 | 60 123
22: 33 113 | 123 48
24: 74 33 | 84 123
130: 91 33 | 103 123
132: 33 109 | 123 53
59: 33 89 | 123 123
51: 123 40 | 33 50
28: 54 123 | 68 33
66: 33 111 | 123 52
64: 13 33 | 9 123
15: 33 13 | 123 111
114: 14 123 | 75 33
35: 123 131 | 33 39
90: 60 123 | 52 33
124: 33 32 | 123 71
63: 123 123 | 33 123
121: 33 97 | 123 19
71: 116 123 | 53 33
5: 33 53 | 123 63
111: 33 33 | 123 33
74: 33 123 | 33 33
48: 94 123 | 105 33
56: 111 33 | 84 123
29: 30 33 | 130 123
45: 99 123 | 119 33
93: 52 33 | 52 123
122: 33 9 | 123 7
103: 13 33 | 63 123
68: 61 33 | 49 123
94: 33 88 | 123 129
129: 89 33 | 33 123
133: 123 59 | 33 129
127: 33 74 | 123 59
0: 8 11
134: 78 123 | 83 33
73: 111 33 | 116 123
89: 33 | 123
123: "b"
131: 80 123 | 134 33
81: 123 43 | 33 56
7: 123 33 | 123 123
13: 123 33 | 89 123
60: 33 33
108: 124 123 | 86 33
39: 123 29 | 33 118
95: 123 87 | 33 135
88: 33 123
57: 123 60 | 33 9
107: 123 4 | 33 25
46: 123 60 | 33 7
aababbaabaabbaaaaabaaabb
aabbabababbabbbabaabbbaa
aaaaabbababbbabaaabaabaaaaaaabaabababababaaabaabbbbbaaaa
aaaaaababbaabbaaaabbaaab
aabbbaababaabaaaabbbbaba
bababaaaabaabaaabaababba
aaabbabaababbaabaababaabbababababaababbbabaabbababababbb
baaaabbabbaabbaabbbbaabb
aabaaaaaababbaababaabbbb
abaaabbababbabbbbaabbbaa
baababbbbbbbbbabbaaabaaa
aabbbaaabbbaaabababbaaabababbaabbaababaaabbbbbaa
aaababaabbaabbabbaaaaabb
abaaabbbabbabbbbbaabaaabbaaabaabaaaababbaaaaaaba
abbbabbbabbbaabbbbabbabbbabaababbabbbbba
babaaabbbaaabbabaabbbbaabaaababaaaaaabab
babbabaabbaabbbbbbaaabab
baabaabaaaabbbabbbbbbabb
bbabbabbaabaaaaaaabaaabb
bbaaaaabbbaaaaabaababbba
aabbbbaaabbababbaabbaaab
ababbbbababababaababaaba
abbaababaabaaaaabaaaaaba
abbbaababbbabbbaabbbabab
baaaabaababbbbabbaaabaaa
aabaabaabbaaaabbbbbbabbb
aabababbbaabbabaabbbaaab
abbabbbbbbabbaaaababaabbabbaababbabababbbbbaaaaaaababbbaabaabbabbabbbbaaaaababaabbbaabba
bbbaabababbbbbbbaabaabbbaaabaabbbbbbbbbb
aaabbaaaaaaaabaababaaabbbaaaaabb
bbbababbaabbaabbaaaabbaabbabbaba
aaababaababbbbabaababababbaabbaabbabbabbbaaaabababbabaaabbbbaaababbabaaa
bbbababaababbbbbbbababababbbaabbaabaabbabbbaabab
aabbbbaababbbbaabaaaaaaa
baabbabababababaabbbaaaabaaaabbbaaaaabab
aabbaabbbaaabbabaaabbbba
abbaaabbbaaaabaabababbbb
baabaaabaabbabaaaababaabbaaababb
abbabbbbbbbabbbaabaabaabbabaaaab
bbaabbbbbbbbbbabbababbbb
bbaaaabbababaabbaaabbbaaaabbaaaaaabaabaaabbabaab
aababbababaabaaababaaaab
baaababaabbaabaaabbaabbb
bbaabbaaaaaabbbaaaaababb
abbbbaabbbbababbbababaab
baaaaaabbbbabbababaabaaabbbabbbaaaaababb
aabbabaaabaaaababbabaaaa
aaaabbaabbababbaaababbba
aaaabaabaababbabbbbabbba
babaaabaabaababaaabaaaaabaabbbab
aababaaaaabbaaaaaaabbabb
aabbbabbabaaaaaaaabaaaab
babaaabbabaabaabbbaabbaabaabbaab
aaaaaabbbaabbabaaaaaaaba
aabbbbaaabbaabaaaabbabaabbbaaaaabbababbababaabbb
aabbaaaaabaabaaabbabababbbbabbbb
baabaaabbabbbbabaaaaabbbaababbaabbbabbababaaaabbbbabbaab
aababbabaabababaabaabbaa
aababbbbaaababbaabbbbbbaaababaaaabaabbbabbaabaaabbbbbaab
baabaaabbaaababaaabbaaaabaaabababbaabababaabbabb
baaabbbaaaababbbaabbaaab
bbaabbaaabbababbaaabbbbb
aabbababbaababaabaaaaaabaababbaaaaabaaabaabaaaab
aaaaaabbabbabbbbaaabaaaa
babbbbabbabbaaabababaaaa
abbaaaabbaabbbbbbbbbbbbabaabaaababbbbaababaaaaaabbaababa
bbbababaaaababaabbaababa
baabababbbaabbabbaaababaaabbbbabbaabbbab
abaabaabaaabbababaabbbab
baaaabaaabbbaabaaabbbbba
aababaaaaabbbbbbababbaabababaaaa
bbbabbabaabbbaaabbbabbbb
baabbbbbaaaabbabababbaaabaabaabbbaaabaabbaaababbbaaaaaaaabbaabbbabbabaaabbbbaaba
abaaaabaaaababbabbbbbbabbababbaa
bbabbbabbababaabbaababbaababaababaaabaaaabbabaab
aaababbaababbbbaabababaa
aabbaabbbbababbabbabbaaa
bbbabbbabaababbbbabbbbabbbabbaabbbbbabba
abaaaaaabaaabbabaaaabbab
bbaabaabbaaabbabbabbbbabbaabbbab
baaabbbaaaabbbababbabaaa
aabaaaaaababbbbaaaabbaaaaaabbabb
baaababababababbaabaabaabaaaaaabababaaaaababbabbbaaaabab
babbababbbbaaaaaaababaabaaaabaaababbaabababaabbabababbaa
abbbbaabaabbbaaabaabbbbb
babbaabbaaababaabbaaaabbbbaabbaaabaababbbaaaaabaaaaababb
baababaaaaababaaababbababaababaabbabaabaaabbbaba
abbaaabbbaaabbbbabbabbbbababbabaabbabbbababbbbbb
babbaabbbbbabababbaababb
baaabbaabababababbbabbbaaaabaaababaaaabb
bbaaabbaaaabaaabbbaaabaabbabaaabaabbabbaaababbbbbbabbabb
aaabbabababbbbaabbabbbbb
aabbababaaabbbaaabbbbabb
aababaabaaabbbaaaaabaabb
ababbbbbbaabbabaaabbabbb
baaaabaabbabbabbbbbabababbbababb
abbabbbabbbabbbabbbbaabb
bbbaaaabaababbbbbababbbb
aaabaaabababbbababababbabbbababaabbaaabaaaaaabab
bbaaaabaaabbaabaaabaabbbbabbabbbbaabbabaaababaaaaabbaabbbaabaaaabaaabbaabbabaaaa
abbbabbaabaabbbbbbabaaab
abbbabbbbabaaabaaaabbbbb
abaaabbabbbbbbaaabaaabbbbbaababbababbabb
ababbbbaaaabbaaaaabbabbb
bababaaaabbaaabbbbaaaaba
aaabbaaaabaaabbaababaaaa
babaaababbbaabbbbbaaaaba
aaababbabbabbbbabbbaababbbaaaaba
baaaabaabaaababaaaabababaaaaabbbabaaaaaaabababaaabbbabab
aaababbbabbbbbbabbbaaababaaaaaba
abbabbbbbbbabababbbabaabbabbabaabbaaababaabaaabbabbbabab
aaaaabaaaaaabbbababaaabaaabaabaabaaababb
bbabababaabbbaabbaabaaaaabbabbaa
bbbabababaababbbbbbabbabaabbaaab
baabaaaabbababbabbbaabab
bbababbabbbbbbbabaabababbbbaaaaabbbbaaaa
aaabbabaaaaaaaaabbaabaaa
babbababaaababaabbabbbba
baababaabbaabaabababbbaa
bbaabaabbaaabbaaabaaaabb
baaabbaabbbaaabaababaaab
bbbaaabaabaabababbaaaabbaaababbaabbbaabaaaaaabba
babbabaaaabbaaaabaabbbaa
babbaaabbbbaaababaaababaaabbbaaaaababaabaaaabaabbbbbaabbabaaaabbaaaaababbaaaaabb
aabbbaaabbabbabbbbbbaaba
bbabbbabbaaabbabaaabaabb
bbbababaaababbbbaabaabab
bbaabbbbbbbababbabbaaaaa
aaabababbabbbbbaabbabbaaaaaababa
aabaabaaaaaabbbbabbaababaaaaaabbaabbabba
bbbaaaaaaababaaaaaabbaaabbaaabbabbbbbaabbabaabaa
ababbbabbbbbbbaabbaaaaaa
aaaabaabaabbabbbaabbbabaababbabababbbabbababaabbbaaaabbb
aabbbbbbaababbbbbabbbabb
babbbbaaaabaabbaaaaaaabbbabbbaaabbbbaabb
abaaabbabbaabbbbaaaabaabbbbbabbb
bbabbbababbaaabbabbabaab
aaababaaaabbaabaaaaabbaaabbaababbbaaabab
bbaabbbbaabbbbbbaaababbbabbbbbbabbbbaabb
aababbabbaabaababbbbbbbabbbbbaaaaaabbaab
abbaaabbbbbabaabbabaabaa
aaabababbabababbbabbbaabbbaabbabbaababaaabbaaaaa
baaabbbbaabbbbbbbbbaabaabbaaaabbaaaaaabbbbbabbaa
aabaaaaaaaababababaaaabb
bbbbbbaaabbaaabbabbbabba
aaaabbbbaaaabbbbaaababba
baaabbabbbbbbbabbababbaa
aaabbbabbaabbaaabbabbbabbaabaaabaaabaaba
baaaabbbabaaaabaabbaaaaa
aabbabaaaaabbbaaabaaaabaababbbbaaabaaababbbbaaba
bbabaababbbabbababaabbab
aababbaabbaaaabbbbabbbba
bbababbaaabbbabbbbbabaaabaaaabbbabbbabbbaaaabaababbbbbaa
bbbbbbabbbabbbabaaabaabb
babababababbbbaabbaaaaabbbbbbaaa
baaabbbbbabababaaaaababa
bbababbbbbaababbbabaabaa
babaaabbabbbaabbbbabaabaaabbbaababbbaaabaabaabbbabaabbaa
abaaababaaabbbabababbababbbbaaaa
abaaaabaabaababaabaaaababbabababaaaaaaba
abbbaaaabbaabaababbbabab
abbababaaabbbbbbabbaaaaa
baabbaaaaababbbbbbaaabaa
baabbaaaaabbababaababbabbbbbbbbabbabbbabbbbbbababbabbbbbbbaaaabaaaaaaaab
bbbaabbbababbabaaabbbaaabbbabbbbbbabaaaa
aaaaaaaabbbbbbbaabbbbbaa
bababababbbaaaaabbbaaaab
bbabbabbbbaabbaaaabbabaabbbbbaab
bbbaabbbbaaaabbbbbaabbabbbabbbba
baabbabaababaabbaaabbaab
aabbaababaababbbababbbaaaaaaaabbbbbabababaabbbbaabbabbba
bbbaaababbabbbababababba
aaaabaaaaababbabbbbbabababababbb
babbbaabbbbaaaaabbabbbbb
abbbbaabbbbababbbabbaaabaabbabba
babbaabbaaababbbababbbabbabbaabbbabababbaababbbabbbbaaab
abaaabbbbbbaaaaabaabbaaabbaabaaaabababaa
baaaaaababbaababaaaabbbbbbabbbbb
bababaaababaababaaababbbbabbababbbaabbaaaaabbbbb
bbababbbbbaabbaaabaaaaaaababaaab
abaaababaababbababaaaabb
abaaaabababbbaabbbababbaaaabbbbaaababbba
aaaaaabbbababaaababaaaaa
bababaaaaabbababbbaaaabbabaabaabababaabaabbbaaab
bbbbababbbbaabaaabababbb
abaabababababaaaaabababbbabbaaba
abababbbaaaaaabbaababbabaabaababaabbaabbaaabaababbbbbbba
baaaaaabbbaabaabbbababbbbaaabaaa
ababaabbbbaaaababbbbbaab
aababbbbabbaaabbbbbaaaab
baaabbbaabaaabbaaaaaabab
bbbaabbbbabababbbbabaaaa
aaaaabbbabaaabbbababaaab
aaaabaabbaabbaaaaaaabbab
abbaaabbbbbabbabbabaabba
bbbbababaaabbaaaabbbbbab
abaabbbaaababbbbababababbaabababbbababba
baaaabbabbbbbbbaaabaabaabababaab
ababbbabababbababbbbabababbabbbbbbabaaaaabbbbbab
baabaaaabbbbbbababbbaaaabbabbbbb
bbaabaabababaabbbaaaaabb
abbababbbbbabababbbabbbaaaabbabaabbbaababaababaaabbbaaabbbabaaab
baababaabbbabbbabbaaabbabaabaaababaabbab
bbbababbabaaabbaaabaabaabbbaabaabaabaaababbababbbbbbaaaa
baabaaabaabababaabbbaabbbabbaabbbbaabababbabbababbaaaaaa
baabaababaabababbbababbbbbaabbaababaaabbaaaabbab
bababbabaabaabbaabbaaaabbabaaabbababbbabbaababaabaaaaabaaabbbbabbbbbabaa
babbaaabaababaaabaabaabb
ababbbbabbbaabaabaaababb
abbaaabbbbaabbaaaaaabbbababaaaaa
aabbaabaaaaabbaaaaabaaaa
babaabababbabbbabbbaaabb
bbababbbabbbabbbbbaabbabbbbabbbaabbbbbbaabbbbbaa
bbabababbbbabbabbbbabbaa
bbbbbbbaabbababbbabbbbba
baabaaaababbabaaaaaabbaaaaabbabb
abaababaabbbaabaaaabbbaaabaababb
baaaabbababbbbabbababbabababbaabbbabaabaabaababb
abbaaabbbaababaaaabaaabb
babbaaabbbababbaaabbbbab
abbaaabbaaababbbabbbbaba
baabbbabbaaaabbaaaaaabbaabbbbabbaaabaababbaaaaaababaaaaabbbbbaaa
baababbaabbaabbbbbabbbaabbbbaabbbbbbaaaabababbbbaaaababaaaababbbaabbbbbabbbabbaaaabbabaa
baabbaaaaaabbababababbabbaabbbab
ababaabbbbbaabbbbabababbbabbbaaabbababbabaaababbababaaab
bbabababbabbbaaabbabbbba
bbaaaaababbababbaaaaaaaaaaabbbba
aababaaabbbaaababbaabbabbaaababaabaabaaaaabaaaab
babbabaabababbababbbabab
aababbaabaabaaaaaabbaaaaabbbbaabbabbbabb
bbabaababaaabbabbbbbbabb
babaaabbababbababbbaabaaabaabbaa
abbbbbbaaaaaaaaababaaaaa
aabababaaabaaaaabaabbbaa
abbaabaabaabbababbbaaabaaabbbbaabbbaaaaaaabaabaaabbbbababbabaaab
abbabbabbbabaabaababaaaa
babaababbababbabbbbbaaaa
aabaabbaaaaaabaabaabbaaabbaabbbbbabbababaaabbbbaaaaaaabaaabbbababbbbbaaa
baabaababbababbbbbbbbabaaabaaaaaaaabbbbbaaabababbbabbbbbbabbabaaabbbbaba
abbbaabbabbaaaabbabaabaa
aaaabbbbaabababbabbbaabaabbababaabababaaabbbbbababaababb
baabaaaaabaabbbabbbabbaa
abbbbaabbbbabbbaabbabbabaaaaabbbababaaab
aaabababbbababbbbbbbbbbb
aabaaaaababbbaababaabbab
baaabbbaabbbaabaaabaaaaaabbabababbbaaaabbaabbbaa
babbaabbababbaabbbbbaaba
abbbbaababbbabbbaabbbabbabbbbbbbbaabbbab
aaaabbaaaaaababaabaabbababababaa
aabbababbbbabbabbabbbabb
bababbabbbbbababaaaababa
aaaaabaaaabababbabaabbbaabbaababaabaabbabbbabbaaaabaaaba
aabbbabbabaaaababaababba
aaaabbaaabbbbaabaaaababb
bbababbbbabbababababaabbbaabaaaaaaaaabba
aaabbaaaaababbbbbababbabbababbababaabbbaaaaabbab
bbabbbabababbbabbaabbbba
ababbbbaabbabbbbabbbbabb
baaaabbbabaaaaaaabababaa
bbababbabababbabbbabaabb
aabbaabbabbababaabbaaaba
abbbaaaaaaabbbbaababbabb
bbbbbbaabbbaaaaabbabbbbb
aabbabaaabbbaababbaababa
abbbaabaabbaabaaabbbabba
bbbabbabaabbbbaaabbbbbabbabbabbabbaaabab
aababbaaaaaabbbabbbbbbbb
abbabbabababbaabbabbbbbb
baaaabbbbaaaaababbbbaaaaaababbba
bbbbbbababbababaaabbaaab
aabbaaaabababaaaaaababbaabbbbbab
aabababaabbaababababbaaaabbaababbbaaaabbbaabbbba
bbabababbabbabaaaabbbaabaabbbaababaababb
aaaaabbbbbbbbbaaabbbaaab
abbbbaabbaaabbaaabababaa
babbbbaabbaaaaabbbaaaaba
aabbaabababbbaaaaababaaaaababbabbaaabaab
baaaabbaaaaabaaaaaabaaba
bbaaaabbaabbababababaaaa
aaaabbaabaababbbaabbbbba
babaaabaababbaabbababbbb
abbbaaaaaababaabbabbabaaaaaabaabaaabaababaaaaabb
baabaaaabbaaabbaababababbbbaabaabbaaaaaa
bbbbbbababbbaababaabbabb
aababaababaaaababbbabbaa
ababbababbababbbbbaaaabbbaababbabaabbbaa
babbbbaababbaaabbbaaaabbaabbbaaabaaabbbabbaababb
bbbbaabbaaabbbbbaaaaaaabbabaaaab
abbbabbbbaabaabaabbbabaa
ababbaaaaabbaababbaabbbbaabbabbaababaaba
aababbabaaaabaababaabbaa
abbababbabbabbbaaabbbbab
babbbbabbaaaababbababbaa
aaabbbbaabbbbaaaabbabbaabbabbbbaaaabaabb
ababbaaaaabbbabbbbbabbbb
abaaaababbbbbbbabababbabaaabbbabbbbaabbbbbaabbba
ababbaababbaaabbbbbabbaa
baabaabaabaaabbaaaaaababaabaabababbbabbbbbabbbabababbbbabaaaabba
baabbaaabaaabbaaababaaaa
bbababbaaaaaabaabbbabbaa
babbaaabbabaaabbbbabaaab
aaaaaaaaabbbaabbabaaaaaaababbaaabbabaaab
ababbbbbbababbbaaabaaabb
baaabbaaaaabbaaaabbabaab
aaaaabbbbabaababaababaabaababaaaaaabbbba
abaaababaabaaaaaabbbbbbabbbbaabb
abaaabababbababbaababbabbaabbbaa
aabbbaabbababababaababba
abbbaababbbababbabaabbbbabaabbabbabbaaaabbabbbababbbbbbaaabbbabbbaaaabbb
abbabbbabaaabababbaababb
aaabababaabaabbabbaababa
babaababbbbaabaaaaababbbbababbba
babababbababbbbababbaaaa
aaaabbbbabbbbbbabbbbabbb
abbbaabaaaaaabbbbabbabbb
baaabbaaabaaababaabbbabbbaaabbbaaaaaabbb
bbbabaaaaaabbaaabbaaabaa
abbbaababaabaababaabaaaabbaaabbb
babaabababbbaabbbbbababbabbaaabbbbababababbabaaabababbaabbaabaaabbbbbabb
bbbbbbbabaabaaabbababbbb
aaababbbbaabbababbabbbaa
aaabbbabbaaaabaaaaaaabab
babaaabaaababbbbbaaaaabb
abbaaaababbaabaabaabbbbb
aaababbabbaaaabbbaababba
aaababbaabaaaababbaaabab
aaaaaaaabbabbabbbbbaabba
aaabaabbbbabaaababaaaabbbbbbbabbbabaaaaabaabbaaaabaaaabbaaabbbaabbaaabbb
aaaabaaabaabbabaabbababaabaabbbbbbbabbaa
abaabaaaabbbaaaaabbaabbb
aabbbbbbbbbbbbbaaabbaababababaaaababaaab
aaababaabbbaabaabaaabababbbbbbababaabbabbbbbbaaa
aabbababaaaaaabbbabaaabbbabaaabababbbbba
abababbabbbaabbaabbaabbaabaaabbaaabbbaab
babbabaaabaaabbaaabbbaaaababbbababbbbabbabbbbaba
aaababaabbbbababbabbbaabbbababbabbabbbba
aaababbbbaaabbaaaaaababa
aaaabbbbaaabbabababbabaabbaaabaa
bbabaababbaabaabbaabbabaabbbbbbababbbbbababbabba
ababbbabbababbabbabbbbba
abbaaaabaabbbbbbbbabaaaa
baabbaaaaaaaabaabbaababa
bbbabaaaaabababaabbbabbbbaaababababbabaababaaaaababbabba
bbbabbbababaabababbbbabb
aaabbbabaabaabaabbbbbbba
aaaaabaaababbaaabbbaaaab
bbaaabbaaaaabbbaaaaaaaab
baaabbaaabbabbabbaaaaaaa
aaaabbbbbbbababbaababbba
aaaaabaaaababbaaaabbbabbbbabbaab
aabbababaababbbbbaabaaabbaabbbbb
aabbaaaaabbaabababaaaaaaaaabbbaabbbbbabb
abaabbbaababbaaabbbbbbaaaaaaabaabbabbaaa
aaaabbaabaaaabbbabaabaabaaabbbabababaaaabbbbabbabbbbabaa
baaaabbbbaaabbbaabababaa
bbbbababbbbabbabbaaaabbaabbbaaaababbbbbbbbababaabaaaabab
baaabbbbabaaabbbaaababaaabbabbbaaaaaabba
bbabaabaaabbabaabbabbaaa
abaaabbaabbaabaababbbbaaaabaabab
abaaabbaaaabbbaabababbbb
bbabbbabbaabbabaaaabababbbaabbbaaabbbbba
babbbaaaabbabababaaabaaa
bbbbbbbaaaaaabbbbbbbbaaa
aabbaaaabaaaabaabbbaaaaaaabaaaab
baababaabaaabbabbababaaaababbabaabbbbaba
aabbaaaaabbaabaabaabbbaa
abbbaabaababbbabaabbaababababbba
abbbbbbabaaabbababbbbaabbbabbaabbbaaabaa
aaabbaaaaabbbabbbabaabba
aaababbbbaabbaaabaaaabbaaabaabab
baababbbababbbabbaabbbab
abbbbbbaaaaaaabbaabaaaaaabaaaabb
aabaabbaaabbaababbbababbaaabaaab
aabababababbbbabaabaabaabaabbaaaabababbaaabbabbbbbaaabaa
baaabbbaaaaaaaaabbabaaaa
baaaabaaabaaabbaabbabbaa
aabbaaaaabbaaabbbabbbbba
bbbabbbaaaaaabbbbbbbbaaa
aababbaaabaaaaaaaaaabbbababbaaaa
ababbbbabbaabbabbbabbbbb
babbbaabababababbaabbabb
aabbbbaabbbabbbaaaabaabb
babaaabaaabaaaaabbaaabab
aabbabbabbbbaababbabbbbbbbbbababaaabbaab
bbbababbaababaababababbb
bbaabbbbbbbbbbbaaabbbbaaabaabbbaaaabaababbaabaaa
baaabbbaabbaaabbbabbbbba
ababaabbabaaababbbaaaaababbaaabbbaaaabaabaaaaaaa
bbabababbbbaaaaaaabbaaaabaaababbbaabbbab
ababaabbabaabbbababbbbbb
baabaaaabbaabbabbaaabbaaaaaabbbabbaabaaa
babaaabbbaaabbbbbaaaabbbbabbbbbb
abaababbbbaabbbaaabaabab
bbaaabbaaaabababaaaaaaab
abaabababaaaabbbbabaaaaa
bbababbbabbbbbbaaaaaaabbbababaaabbbbbaba
abbbbbbabbaaaaabaabbbaabaaabaaaa
abbaabaabbbabababbbbabaa
bbabbbabaaaaabbbbaaabaaa
ababbbbaaaabbbababbbaaaabbaabbba
babbbaabbaaaaaababbbabab
baabababaabababbbbabababbabaababbbabbaababbbbaaa
bbbaabaabbbbbaabbbabbaabababbabaaabbbbaaaabbbbabbaabbaaaaababbbababaaabb
aabbaabaabbbbaabbbaaabaa
baaaabaaaabababbbbbabbbabbbabbaa
aaaabbbaabbababaaabaaaba
babbbbabaabbabaabaaabaaa
baaababbbbabbabbabaaaaabbaababbaaabaaaaaaabbaaaa
bbababbbbbbaaaaabbbaabbbbbbbababbababaab
aababaabababbaaabbbabaaabbabaabaabaaababbabaabbabbababaa
aaababbbbbababbaaaabababababbabaaabaaaab
bbaaaabbabbaabababbbabbbaababbabbabbbaba
bbbabaababaaabbbbabaababbabbaaababbbbaba
abbbaababbbabaababbbbbaa
ababbbabbaabaaabaaabababaababbba
bbabbbabbabaabbbabaaabaaaaaaaaab
bbaabbaaaaabbababbaaaaabaabbbbaaabaaabaa
aababaaaababbbabbbbabbaa
aabbbaaaaabaabaabbaababb
abaabababababaaaabbabbbbbabbbbbb
bbaaaaabbabaaabbaaabbabaabaaaabbababbabb
ababaabbaabbbabbbbbbbaaa
abbabbbbabbabbbbabbbabab
bbabbabbabbabbbababbabaaabbabbbbaaabaabb
ababbababbbaaaaabbaabbaaabaabababaabababbaaaabaabbbabbaa
bbabababbbbaabbbbbabbbba
abbaabbaabbbbbabbabbababbbbabbbababbbaaaabbbbabbaaabbaabbbbbbaba
aaababbabbbaabbbaaaabbab
aabbaaaaababbabaabbbabbbaaabbbababbaaaba
baaabbbabbbabbababbbaaab
aabbabaabbbaaaaababbbbaaabbababbbbabbaaa
bababaaaaababbaabbaababb
aabbabaababbbaaababbaaaa
bbbabaababaaaabababbbaba
ababbbbbabbbaaaabbbabbbb
babaabaabaabbbbaaaabaabbbaaababaababbaaaaaababaaaaabababaaabaaaa
bbbbabababaabaaaaabbbaaabbaaaaabbabbabbabaaaaaaa
abbaabaaabaabaabbbaaabbb
ababbabaaaabbbabbabaabaa
bbbababbaaaaabaabaaaabaabbbbabaaaabbabba
bbabaabaaabbaabababbabbb
baababababbbaabbbbbbaaabbabbaaba
aababababaaabbaabbbabbbabbbbabba
aaababaabaabaabababbbbabbababababbabaabb
abbaaabbabbbaaaabbbaabaaaababbaabaaaaabb
aabbaabbaabaaaaaabababbb
ababbbbbbbaabbaabbabaaab
bbaaaabbbbabababbaabbaab
aabababbaaabbbabbbabaaaa
abaabaaaabbabbbaaaaabbbababbbbba
baaababaaabbabaaabababba
ababaaaabaaabbababaabbaaabbbbbbabbababbaaaaabbbaaaaaaaabaabbbaaabaabbbba
aababaabbaaabbbabbaaaaba
baababaaabbbaaaaabbbabab
ababbbabaaaabaaaaabaabbabbbababaaaaababbbaaababbabaabbbb
aabbbabbaaababaaabbbbaaa
aaaaaabbaaababbabbbbbaaa
aabbaaaabaaaaaabbbaabbba
abaabbbabbbaabbbbbabbaab
bbabababbaabbaaaabaabbbb
ababaabbaaaaaaaaababaabbabbbaabbbababbbbbbabaaaa
aaabababaaaabbbaaabbbbaaababbbbabbaabababaaaaabb
aaabbbabaaaaaabbbaabbbbb
baaabbbababbabaaaabbbbba
baaabbbabbabbabbbbbabaabababababbabbbbbaabbaaaba
aaaabaaaaababbababbabaab
baaaaaabbbbabaaabaababaaabbabaabaaabaabb
bbabbbababbbaaaabbbbbabb
aaababaabaaaaaababbbabaa
bababaaaaabababbbaabbbaa
aababaaababaaabbaabbbbab
abaababaaaaabbbbabbbbbaa
babaababaababbababbbbaaa
ababbbabbaaaabaababbbbabbaaaabbababaabaabbbbaaabbbbbabba
aabbaabaababaabbaaababaaaaaaaabbaaaaabbbabbabaab

12
day19/input/test1.txt Normal file
View 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
day19/input/test2.txt Normal file
View 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

15
day19/input/test3.txt Normal file
View File

@ -0,0 +1,15 @@
0: 1 | 2
1: 3 | 3 1
2: 3 4 | 3 2 4
3: "a"
4: "b"
a
aa
aaa
b
ab
aabb
aaabbb
aaaabbb
aaabbbb

220
day19/src/main.rs Normal file
View File

@ -0,0 +1,220 @@
use anyhow::{Context, Error, Result};
use std::collections::HashMap;
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::str::FromStr;
use std::time::Instant;
const INPUT: &str = "input/input.txt";
#[derive(Debug, PartialEq, Eq)]
enum Rule {
Char(char),
Seq(Vec<usize>),
Or((Vec<usize>, Vec<usize>)),
}
impl FromStr for Rule {
type Err = Error;
fn from_str(s: &str) -> Result<Self> {
if s.contains("|") {
let mut rule = s.split(" | ");
let left = rule.next().context("Failed to parse OR rule left side")?;
let left = left
.split(" ")
.map(|num| Ok(num.parse()?))
.collect::<Result<Vec<usize>>>()?;
let right = rule.next().context("Failed to parse OR rule right side")?;
let right = right
.split(" ")
.map(|num| Ok(num.parse()?))
.collect::<Result<Vec<usize>>>()?;
Ok(Rule::Or((left, right)))
} else if s.contains("\"") {
let c = s
.chars()
.skip(1)
.next()
.context("Failed to parse rule char")?;
Ok(Rule::Char(c))
} else {
let nums = s
.split(" ")
.map(|num| Ok(num.parse()?))
.collect::<Result<Vec<usize>>>()?;
Ok(Rule::Seq(nums))
}
}
}
fn parse_indexed_rule(s: &str) -> Result<(usize, Rule)> {
let mut rule = s.split(": ");
let index = rule.next().context("Failed to parse rule index")?.parse()?;
let rule = rule.next().context("Failed to parse rule")?.parse()?;
Ok((index, rule))
}
fn string_matches_rule<'a>(
s: &'a str,
rules: &HashMap<usize, Rule>,
rule: &Rule,
ends: bool,
) -> (&'a str, bool) {
if s.is_empty() {
return (s, false);
}
match rule {
Rule::Char(c) => {
if s.len() < 1 {
(s, false)
} else if s.chars().next().expect("non-empty string") == *c {
let rest = &s[1..];
if !ends || (ends && rest.is_empty()) {
(rest, true)
} else {
(rest, false)
}
} else {
(s, false)
}
}
Rule::Seq(seq) => {
let mut rest = s;
for (i, rule_index) in seq.iter().enumerate() {
let result = string_matches_rule(
rest,
rules,
&rules[rule_index],
if i == seq.len() - 1 { ends } else { false },
);
if !result.1 {
return result;
}
rest = result.0;
}
(rest, true)
}
Rule::Or((left, right)) => {
let result = string_matches_rule(s, rules, &Rule::Seq(left.to_vec()), ends);
if result.1 {
return result;
}
let result = string_matches_rule(s, rules, &Rule::Seq(right.to_vec()), ends);
result
}
}
}
fn solve_part1(input_path: &str) -> Result<usize> {
let file = File::open(input_path)?;
let reader = BufReader::new(file);
let mut lines = reader.lines();
let mut rules: HashMap<usize, Rule> = HashMap::new();
loop {
let line = lines.next().context("Unexpected end of input")??;
if line.is_empty() {
break;
}
let (index, rule) = parse_indexed_rule(&line)?;
rules.insert(index, rule);
}
let strings: Vec<String> =
lines.collect::<std::result::Result<Vec<String>, std::io::Error>>()?;
Ok(strings
.iter()
.filter(|s| {
let result = string_matches_rule(&s, &rules, &rules[&0], true);
result.1 && result.0.is_empty()
})
.count())
}
fn solve_part2(input_path: &str) -> Result<usize> {
let file = File::open(input_path)?;
let reader = BufReader::new(file);
let mut lines = reader.lines();
let mut rules: HashMap<usize, Rule> = HashMap::new();
loop {
let line = lines.next().context("Unexpected end of input")??;
if line.is_empty() {
break;
}
let (index, rule) = parse_indexed_rule(&line)?;
let rule = if index == 8 {
Rule::Or((vec![42], vec![42, 8]))
} else if index == 11 {
Rule::Or((vec![42, 31], vec![42, 11, 31]))
} else {
rule
};
rules.insert(index, rule);
}
let strings: Vec<String> =
lines.collect::<std::result::Result<Vec<String>, std::io::Error>>()?;
Ok(strings
.into_iter()
.filter(|s| {
let result = string_matches_rule(&s, &rules, &rules[&0], true);
result.1 && result.0.is_empty()
})
.count())
}
fn main() {
let mut now = Instant::now();
println!("Part 1: {}", solve_part1(INPUT).unwrap());
println!("(elapsed: {:?})", now.elapsed());
now = Instant::now();
println!("");
println!("Part 2: {}", solve_part2(INPUT).unwrap());
println!("(elapsed: {:?})", now.elapsed());
}
#[cfg(test)]
mod tests {
use super::*;
use maplit::hashmap;
const TEST_INPUT1: &str = "input/test1.txt";
const TEST_INPUT2: &str = "input/test2.txt";
const TEST_INPUT3: &str = "input/test3.txt";
#[test]
fn parses_input() {
let file = File::open(TEST_INPUT1).unwrap();
let reader = BufReader::new(file);
let rules: HashMap<usize, Rule> = reader
.lines()
.take_while(|line| !line.as_ref().map_or(true, |line| line.is_empty()))
.map(|line| parse_indexed_rule(&line.unwrap()).unwrap())
.collect();
assert_eq!(
rules,
hashmap! {
0 => Rule::Seq(vec![4, 1, 5]),
1 => Rule::Or((vec![2, 3], vec![3, 2])),
2 => Rule::Or((vec![4, 4], vec![5, 5])),
3 => Rule::Or((vec![4, 5], vec![5, 4])),
4 => Rule::Char('a'),
5 => Rule::Char('b'),
}
);
}
#[test]
fn solves_part1() {
assert_eq!(solve_part1(TEST_INPUT1).unwrap(), 2);
}
#[test]
fn solves_part2() {
assert_eq!(solve_part1(TEST_INPUT2).unwrap(), 3);
assert_eq!(solve_part1(TEST_INPUT3).unwrap(), 6);
assert_eq!(solve_part2(TEST_INPUT2).unwrap(), 12);
}
}