[TASK] Solved day 19 (haven't solved day 18 yet tho, coming up!)

This commit is contained in:
2020-12-19 10:55:48 +01:00
parent 9967283916
commit ff2a2c5bb3
5 changed files with 712 additions and 7 deletions

578
input/day19.txt Normal file
View File

@@ -0,0 +1,578 @@
77: 30 112 | 20 13
121: 43 20 | 123 30
42: 57 30 | 101 20
30: "a"
50: 65 20 | 134 30
37: 89 20 | 43 30
106: 16 30 | 54 20
17: 30 84 | 20 35
129: 89 20 | 96 30
123: 30 30 | 20 95
20: "b"
115: 20 70 | 30 93
112: 30 90 | 20 123
4: 20 55 | 30 5
72: 20 90 | 30 123
51: 30 20 | 20 95
24: 131 30 | 7 20
94: 121 20 | 15 30
117: 133 30 | 102 20
92: 28 20 | 43 30
70: 87 30 | 96 20
88: 109 20 | 36 30
35: 20 36 | 30 61
96: 30 95 | 20 20
47: 96 20 | 66 30
6: 20 55 | 30 123
130: 30 29 | 20 88
68: 5 20 | 89 30
66: 95 95
75: 96 30 | 55 20
3: 20 90 | 30 5
7: 20 53 | 30 123
86: 30 5 | 20 53
105: 20 87
46: 134 20 | 87 30
102: 30 111 | 20 103
93: 87 20 | 87 30
79: 116 20 | 71 30
8: 42
33: 5 20 | 87 30
107: 96 20 | 123 30
90: 20 30
110: 20 59 | 30 32
16: 30 68 | 20 39
52: 4 20 | 38 30
71: 96 30 | 51 20
38: 96 20 | 90 30
28: 20 30 | 30 30
27: 30 64 | 20 24
91: 30 27 | 20 113
1: 20 90 | 30 134
54: 105 20 | 18 30
0: 8 11
73: 65 20 | 55 30
132: 30 17 | 20 19
41: 20 51 | 30 22
45: 22 30 | 53 20
14: 124 20 | 73 30
22: 30 30
23: 87 30 | 55 20
10: 30 89 | 20 134
120: 56 30 | 9 20
11: 42 31
109: 95 134
127: 30 53 | 20 123
61: 20 53 | 30 90
103: 127 30 | 23 20
116: 90 20 | 87 30
134: 20 20 | 30 20
114: 20 63 | 30 41
64: 20 118 | 30 25
12: 30 48 | 20 3
111: 20 23 | 30 72
60: 79 30 | 120 20
59: 20 28 | 30 87
65: 20 30 | 20 20
44: 89 30 | 28 20
18: 65 20 | 43 30
32: 95 123
83: 30 66 | 20 22
63: 20 123 | 30 55
48: 30 134 | 20 43
99: 20 12 | 30 125
43: 20 20
133: 20 100 | 30 110
80: 20 50 | 30 44
125: 20 98 | 30 86
135: 128 30 | 130 20
131: 20 55 | 30 134
122: 97 30 | 60 20
25: 30 43 | 20 51
95: 20 | 30
55: 30 95 | 20 30
13: 43 20 | 43 30
21: 20 76 | 30 80
98: 89 30 | 65 20
81: 106 30 | 85 20
53: 30 30 | 20 20
78: 45 30 | 37 20
89: 20 30 | 30 20
9: 96 30 | 43 20
31: 2 20 | 82 30
56: 5 20 | 96 30
76: 1 20 | 23 30
62: 92 30 | 10 20
58: 30 22 | 20 43
85: 77 20 | 67 30
26: 30 58 | 20 6
101: 30 81 | 20 91
29: 83 30 | 47 20
126: 20 53 | 30 55
2: 122 20 | 135 30
15: 5 30 | 51 20
34: 20 37 | 30 116
82: 30 104 | 20 132
19: 40 20 | 62 30
108: 21 20 | 119 30
36: 30 22 | 20 87
104: 69 30 | 99 20
100: 20 7 | 30 61
39: 89 20
87: 30 20
113: 52 30 | 34 20
5: 30 30 | 30 20
40: 4 30 | 107 20
97: 20 26 | 30 78
67: 30 131 | 20 126
118: 20 134 | 30 66
124: 96 30 | 22 20
128: 30 114 | 20 14
119: 30 49 | 20 74
84: 129 30 | 33 20
74: 30 6 | 20 46
49: 30 38 | 20 75
57: 117 30 | 108 20
69: 20 94 | 30 115
aaabbaababbababbabaabbbaaabbbbaa
baabaabaaaabbabbbbbaaabb
aabbbaaabaaaabbbbaabbaaa
bababbbabbabbaaaaabababbbbaaaaaaaaabbaabaaaaabababaaabbaababbaab
baababbbbbbaaaababaaaababbabbaaaaabbbbbbbabaabaaaaabbbbb
abbaaabababbaaaabbaabababbbabbaa
aaabaaabaaabaaaaaaabbbab
abaaabaabbababababaaabba
aabbbbbbaaabbaaaabbabbbb
aabbbabaaaababaabbbababb
aaabbabbbaabbabbabaabbba
bbbaaaabbbabbbaaababbaabaaabaaaabbbbabba
babbbbaaaaabaaaabaaababbbabbaabbbaababbaabaaabab
aabaaaaabbaaaaaabbababbbbabaaaaabbaaaabb
bbbbababaaabbaaaaababbaa
baabaaabbbbbababababaabbaaabbabbaabbbaab
bbaabbabbbabbbaababbbbbabaabaabbbababababaaabaaa
baabbbbbaaaabbbabbbbbbbb
bbabbaabbbabbaaabbbaabaabaaabbbbaababaaa
babbbaababbbabbababaabbb
aabbbbbabbbbaaaabbbaabababababbb
aabbabaababababababbaaabaaabaabb
aabababbaaaaaaaababbbbaaabaaaaaa
abbbababaaabbaabababababbaaabbbbaaabaabb
baabbabaaabaaaaabbbbbaabababaaaa
abbbbabbbababbababbaabbbbaaaabba
abababbababaaabbabaabbbb
aaaabbbaaaaaabaabaaabbba
bbaabaababaaaabbaaaaaabb
aaabbabbaabaabbbaabbaaba
aaaaabaabbaabaababbabaaa
bbabbbbabbbaabbbabbbbaab
aaabbabbbaaabbbbbaabaabbbabababbaaaaaababbbbaabb
abaabbabbabaaabababaababaabbabbbabbbbaaaaabbbbaabbaaaaababbbabbaabbbbbabaabaabbabbbbbaabaaaabbab
bbbaababaaaabababaaaaaab
bbbbabbbaaababbbaabbbbbb
babbbaabaababbbaabbbbbaa
abababbabbbabbabbbbabaaa
abaabaaaaabaabbabaaabbbbbbababab
abababbaaabababbbababaaa
baaabbabbbbbbabababbaaababbbbabbbaababbbaabbbbabbbaaabbabbbbbbab
aababbbaabababaaaaaaabab
baaabbababbaaaababbabbbabaaabaaabaabbbbaaabbabaabbbaabbbabbabbabaabbaaab
baaaabaabbababbbbbbbbababaaabaab
bbabbaababbabaabaaabaaabaaaabbaaabbbbaab
bbbaaaaaabbaaaaabaaaaaaa
bbabbbaababbbaaaababababbbaabaabbbbbababbaaabbbaabbaaaabbaaaaaaa
abbbbabbaabbabbbaaaaabba
babbababbaaabbabbabbaabaaaaaaaba
bbbbababbababbbbabbababbaaababab
abbaaaababbabbbbbabbaaabaababaab
aabbbbbbabaabababbbabaaa
aaaaaaaababaaabaabaabbaaabbabbbaabaaaaaabbaabbba
abbbababaaaaabaaaababbbaaaabbaaa
bbbbbabbaabaaaaaaabaabbaaaaabbaa
ababbabababbbaabababbbaaabaabbbb
ababaabaabbabbbabbbabbbabbaaaababaabbaaa
ababaabaaaababbbbaaaabaabababbaaabbababb
aaabbbaabaabbbbbbaaababbaaaabbbabbbbbbbb
aaababbbaaaabaabbababaab
aabbbabaababbbabbaaaabab
abaabbbbbbabaabaaababababbbabaabbaabbaabaabababbabbaaaababaaaaaa
abbaaaababaaaabaabbbbbabbbaaabaaaabbabaa
babaaaaabbbaabababaaabbb
abbbbbbaabaabaaabbaaaaaabbabbbaabbabbbbbaabbbbababbababb
baabbababbbabbababbbbbaa
bbabaababbbabbabaabbbaab
ababbbabbbbbabaabaaaaabb
babbbbbbbaaaabbbabbbbaba
babbabaabaaabbababaababaababaaab
aaaababaaaababaaabbbabbaabbaaaabaaaabbab
abbaabbbbbabbabbababbbbbbbbabbaabaaaababbbbaabbabaaaabbbbabaaaabaaaabbab
baabbbbabaabbbbabaaabaaa
aaabbaaaaaabbabaabaaaaab
abbabaabbaaababbaabbabab
aabaabbbbaababbabbbbbaaabbbaaabb
aaaaaaaaaabbabbbaabaaabbabaaabababbbaababbaaabababbbbaaaaaabbbababaaaaaa
babbabababaaaababaaaabba
abbaaaaaaaabbaaabbbaabaaabaaaabbabaabaaabbbaabbbbbbaabbbbbaabababababaab
bbabaababaabbabbbbaaaaba
bbabbbaaaabaaabbbbbabbbaaabbbbba
babbbaaaaabbaaaababbbabb
bababbabbbaabaabbbbaaaaabaabbbab
bbbaaaaabababbaabaaaaaab
babababbbaabaaaaaaaabbbaabbbabbb
aaaaabaabbabbababbaabbba
aabababbabbabbaabbbaabbb
baaababbaabbaaaaaabbbabb
bbaababbaaabbbaababababbaabbaaabaaababab
baaaabaaababababaabbabbbabababbaaababbbbbbbaabba
babbbbabbbabbababaabaaabbbbaaaabababaaab
baaaaabaaabbbbaaabbaabbaabaabbbabababbabbaaabaaaaaabaaababaabbabbabaaaaaaaabbbbb
babbbaaaabbbbbbbaaaababbaabbbbbbbbbaaaabbbabbbbabaababaa
baabbbbbabababbaabababaabaabaabaaababbbbbbaabbaa
babaaababaaaaabaaabaabbabaaabbabbaaaabaabbbaabbbbbabaaabaaaaabbabbbabaab
abbabaaababaabaaabaaabaaababbbaababbababbaaabaaababbaaaa
ababaabaabbababaaaabbbbb
baababbabaabbbbbbbbaabaaababaaabbbbbbbaa
aabbaaabbbbababbababbaaa
babaabbabbbbbabbabbbbaba
abbbabbbbaaababbabaabbaabbbabaaa
babbbaaabaaaabaaaaabaaabbaaabbbbbabbaabaabaaabba
bbbbabbbbabbaababbabbbbb
bbbbaaaabaabbbabbbbabbaaaabbbaab
babbbbbababababaaaaabaaa
babbaabbbabaabbababaaaab
abbbabbabbababbbaabbbbaa
aaabbaababbbabbbbbaabaaa
babbaabaabaabaaaaaaaaaaabababbba
aabaaaababaaaabaababbbababbbababaabababa
bbbabbbbaaababbaabbbaaaabbbbbaabbabbbbbaaaabbbbaabbbaabb
abbabababbabbaaaabaabbba
abbaaaabbaaaabbabbbababaabbbabaa
abbaaabbbbaaababbbbaaaabbabbbbbabbbababbaababbab
baaababbababaababbbbabaaaabbababbaaabaaa
babbaaabbaabbbbbaabaaaaababbabaabaaabaabaabbbabbbabaabaa
aaababbbaaaababaababbaab
baaaabbbbaabbbaaabbaabbb
babbbaabaabbabababaaaaabaabbaabababaabbb
abbabbbbabababbababbaabaaaaaaaababbaaabbabbbbbaabbbabbabbbbababb
baaabbbbabbbaaaabbbaabba
abababaabaabaabbbbbabbbaaaabbababaabbbaabbababab
aaaabaababababbaaababbbabbabbaabaabbbbabbbbbbbaaabaaaaaa
aabaaabababbbaabbbbbbbaa
aabaaaabbaabaaaaaaaaabba
babababbaabbbaaaabbaaaba
abbabbbaaaababaaaabaaaaaaabbbbbbabaaabbb
bbbaaabaaabaababbbbaabba
bbabaababbbbbabbaaaababaaabaaaaaabbbbaaabbaabaaa
aaaababbbababbababbbbbbaaaabaaaaabbaaabaabbbbbaabababaab
baabbbbbaabaaaababbabbaaaaaabaaa
bbbbbaabbbbbabaababbbaaabababbbbbbbaaaaaabbbbaba
ababbaabaabbaabbaaaabbbb
bbbbbaabaabbbbbbbaaaaaaa
bbbbbaaabbbbabbbaabaaabbbabaabbb
bbbbbaabaaababbaaaabbaaabbbbababbabaabbabbbaaabbaaaaabbb
baabbbaabaabbababbababbabaaaabab
abaababbabbabbaaababbbba
aaabbaababbabababababaaabbabbbbb
aaababbbbabbabaaabaabaaabbbbaaba
baaababbbabbaaabbaabaaaabbbababb
abbbbbbaabbbabbaaabaaaabbbababbbaaabbbab
bbbbbababbbaababbababaab
aaaababababbbaaaabababbb
bbabbaababbababaaabaaababbbbababbbbbbbabbbaaabbb
abbbbbbbaabaabbaaabbbaab
bbbaababbbbbbaaaaaaabbab
babbbbbaaaaababbaaaaaabb
baabbbaabaabbababbabbabb
baabbababbbaababaabbabba
baababbabaaabbabbaaababbbabbbbbbbaababbbbabbbabbbababaab
bbaaabaaaaababbaaaabbbab
babaabbaabbbbbbbbabaabbb
ababaabaaaabbbaaabababaaaabaaabbbaaaaabb
baabbabbaabbaabbaaaabababbabaaab
aabaabbbaaababbbabbbbaab
bbbbbaaaaaabbabababbbbaaaabbbabb
baaabaabbaaabbbabaabaaababaabababbbababababbaaababaabaabbbbabbabaaabbabbaabbaaabaaabaaab
aabbbbbbaabaaabbbbabbaaabaaaaabaabbbaaaababaabaa
aaaabaabbababbabbbbabbbbaabbbababbbaaabaababaaaaabbabbab
babaababaaaabaabbaabaabbbaabbababbabbbbb
bbbaababbbbaabaaabbbabbbabbaaaba
baaaabbabbbbaaaaaaaaabbbbbabababbbbababaaababbbabbababababbbbbba
abbbabaaabaabbbaaabaabaabbbbbbab
babaaaaabaabaabaaaabaabb
aabababbabaabaaaaaaabbbabbaabbabaaaabbabbaaabbba
ababbbabbbbbbaaaaaabbaababbbaaaaaaaaabba
baabbabbbbabbaababbabbaaabaabbba
bbaaababbabbabbabbabbaabaaaaaababaabaaabaababaaa
baabbbbbbbbaabaaabbabaaa
abbabababaaabbabbaaaabab
ababbababaabaaabaabbbbbbbbbabaab
baabababbaaaabbababbaaaaabaabbaa
abbaaabbabbabbabaaaaabbbbabbbbaaababbbbbaababbabbaababbaabbbabba
abbbbababbabaabaabbaaaabbaabbabaaabbaababaaabaababaaaabbabababba
babbaaabbbabbabaaaabbbab
aabbbaaaabbbbabbaaabbbbb
baababbbbaaabbababbbabbbbbaaabaaaabbaaaaaaaabbab
babaabababababbababbbbbaabbabaaa
babaaabaaaabbabbaabaaababbaabaabbaababbbabaabbbabbbbabbaabbaabaa
baababbabababbabbbabbaabbaabbbaabbbababb
baabaabbababaabbaabbaaaaaaaaabba
aaaababbbabbaababbbbaaba
bbbabbbaaaaababbaabbbbaa
abaaaabaaaaaaaaaaaabbaaaabaabbab
ababbaabbabbaaaabbbbaaab
baaabbbbabbbaabababaabababaabbbb
baabaabaaabaaabbbbbaabaaaabaababaabbbbba
bbbbabaababbbaabaaaaaabbbaaababa
abbabababaabbabbababbabb
babababababaaaaaabbbbbaa
aabbbbbbbabaaaaabbbaaaaaabababbbabbbaabbababbaaa
babababaabaababaababaaab
baababbabaabbbbaaaabbbaabaaabbabababaababaaabaabababbbbbbbabababbaaabbaa
abbbaabaaabbbabaaaabbbbb
bbabbabaabbabbbaaabbabbbaababbababbabaaa
abbaababaaababbbabbbbbab
aaababbababaaabbabbababb
baaaaabababaaabbbaabbbaabaaabaaa
aabaaaabbbbbababaaababbb
abaaaabbbabbabbaabbbbbbbabbaabbb
bababaaababbbbaaaaaabababaaaababbaabbbabbaaabbabaabaaaaababaaaabaabaabbabbbaaabbaababaab
aabbabbbabbaaaaaaaababab
bbbaaaaaababbaabababbbba
ababababbbababbbaaabbaabbababbbabbaabbaa
aabbabaabaaabaabaaabaabaaaabaabbbbababbaaaababababbbbbabbbaabaaababbaabababaaaabbaaaaaba
abbbbabbbbaaaaaabbaabaaa
aaaababbbabaaabbbabaababaaabaaabaaaaabbb
ababbbaaabbabbaabbaaabbb
abaaaabbbaabbbaaaaabaaabbbabbbba
aaabaaaaaaabbabaabbabbaababbbbbaabaabbbb
aaabbabbbabbbaababaababbaaaaabbbaababbbb
aabaabaabaaaabbabaaabbaaabbabaaaaabbabbbbbabaaaabbbababbaabaabbb
abaabbaababbaaabbabaaabbbabaabbabbabbabaabbbbbabaababbaa
ababbbabbbbabbbbbaaaabbbabbabbbaaaaaaaab
abbbabbabaaabbababbbababaaabbaabaaaaabba
abaaaabababaaaaabbaabaabaababaaa
bbbbbbabbabbbbaaaaabbbabbbaaaabaaabaabab
bbbaaaaaabbbbbbbaabababa
baabaaaabbbabbbaabababbb
aabbbabaaaaaabaabbbabbaa
babaaabbaaaaabaaabbbbbbbbabaaabbaaaaabab
bababbbbbaabbabbbbaaabbb
bbaabbbaabbabbbbaabbbabb
abbabaabbabbaabaaababaaa
bababbaabaabaabbabbabbab
bbbaababbabbabaabaabbbbabaaaaabbbbbbaaab
bbbaababbabbbbaabababbba
babbaabbbabbabaaaabbabbbbabaaaabbbbababb
bbaabaababaabaaaababaaababaaabbaababbbbb
abbbabbbaababaaaaaabbabbabababaaaaababaaaaababbabbaababb
abbaaabbbaabbabbabaabbaaaababbbabbaabaabababbbabaaabbbab
abbbaaaaaabbbaaabbaaabbb
bbbbbabbabbabbaaabbabbbb
baabbabaaaaabababaaaaaab
aaaababbbbbabbbaaaababaabababbbb
abbbabaabbbababbbbabbbaaaaaaabaaaaaaabbbaaababab
baaabbbbaaabbaabbaaabbababbaababbbbaaaba
bbaababbbbbbbababaaababbabbabbbaaabbbabaabbbabbbbaaabaabaaabaaba
aaabaaaabbbbabbbbabbbabb
bbabbaababaababababbabbb
babbaaababbbbabbabbbaaabaabbabba
bbabbaabbabbabaababaaaaaaababbabbaaabbaababbbbbaababbbabaababbabbbabbbaabbbabbbbabaabbab
baabaaaaabaaaabbabbbbbbbaabbbaaabaaabbabbabbabbaaaaaaababaaababaaaaaabbb
bbaabbabbbaaabaabbaababa
aababbbabbbaabaaaaabbbab
baabbbbaabbabbaabbaaaabb
bbabbaabbaaaabaaaaaabbbb
baabaabaaabaabbaabababbb
abaabbaabbaabaabbbaabbabaaabbbaaaaaaabbb
bbbbbababbaaababbaabbaaa
bbaabbabbbabbaaabaabbbab
bbbaaaaaabbbbbbbaabbabaa
bbaaababbbabaabbaabbaaaaaaabbbbbbaaababaabbbbbbbbabaabaaaabbabab
aabbaabbbabbaaabaabbaaaabbababab
abbbabbaaaababbaabbaaaaa
aaabbabbbbaabaabbbabbaaaabbaaabbbabbbaba
abaabaaababbababaaababbbaabbbabb
abaaaabababbbbbbaaabaaaaabababbaaabbbbab
abbaabbbbbabbbbabbbaaababbabaaabbbabbbab
babbbbbbbabaabbabaababbaabaabaaaabbbabaababbbbab
bbbabbbbaabbaaaaabbaabaa
bbbbbaaababababbbaaababa
baabbbaabaabbababbbaababbbababbbabaabbbb
bbaababbbabaaabbabbbaaab
baabaaaaabbaaaaabbbaaaabbabbabbaaabbbaaaaabaabbbbbbbaaba
abbbababaaaaabaaababbabb
aaaaabaababbaaabaaaababbbaaabbbbababaaaa
ababbaababbabbbababbabbabbabbaababaaaaabbbbbaaaabbbaaaba
baaabaaabbbbabaaaababbaabbbaaabaababbabbaaabaaba
bababbaaababababaabbabbbaabaabaaabaaabbaabbbaaaaabbbabaa
abbaaabbabbaababbbaaaaaabbaaaabb
bbaabaabbbbaaaaabababababbabbbaaaaabbbba
bbaababbabbababaabbbaababbabbabbbbabaaab
abababaaabbbaaaabababbaaabbbaaababaaaaab
abbabaababbbbabbbbaabbbb
ababbaabbabbabababaaabbb
aababbbabababaababbbbbbaababbabbaababbbbbbbbaaaababbaabbbaaaaabb
abbbaaaaaabababbababbbba
babbabaaaaabbbaabaaabbaa
aabaaababaabbbaaaabaaababaaababbabbbaaaaaaaabbaa
bbaabbabbbabbabaaabbaaba
bababbaabbbaababbaaaabaaabbbbaab
bbbabbbabbbabbababbbaaab
abbbbbbbaabbabbbaaaabaabaabbaaabaaaabbbb
bbbbbabbbaababbbaabbaaba
ababababababababababbabb
baaaaaaabbabbaababaaabbb
bababbaaabbabababababbabaabaabbabbaababaababbbbb
bbabbaaabbbbaabaababababaabbbbabbabaabbbbaabbbaabbaaaababaabaabb
abbababaabaaaabbbabaaaab
bbabaabababbaabbbabbbbbbabbbbaabaabaabaa
bababbaaaabaaaaabbbbaabb
bbaabbabaabaabbbbabaabbaababaaababbaaaab
babaaabaaabaaaabababaabababbbaba
babbbbbaabababbaaaabbaabbabbabaabbaabbbb
abbababaabababaababaaababbbabbaa
aabaaaaaabbabbaabbabaababaababbaabaaabbb
abaabbaabbbbbaaaabbaabba
babaabbabaabbbbbbbabbbaababbbaabbbbababbaabbbaaabababbbbbaaababaabbbabbabbaaaabbaababaabaaaabbba
aaaabbbabbaaababaaabbaaaabababaababbbbababbaabbb
baabbabaabbaababaabbabab
ababaabbaabaaabaabbababb
aabbbababbaabbabaaaaabaa
ababaababbbabbbbbaaaabab
ababaababaaaaababbbabbbaabbbabaa
abaabbaaabbabababbbbabba
babbbbbabbaaaaaaaaaaabab
bbabbababbbabbbbababbbbb
abaababbabbaaabbbbbbababbbbbaaaa
abaaaabbbababbbbaababbbb
baabaababababbbbababbabb
baaaabaaaaabbabbabbabababaabbababbbbabaaabaaababbabbaaaa
aaaaaaaabbbabaaabbabbabaaabbbbaaabaaababababbabbabababab
bbbaaaabaaabaaaaaabaabbbbababaab
baabbbbabaaaaabaabbbaabb
abaaaabaabbaaaaaabaababbbaaabbba
ababbbaabbbaabaaaaababab
aaababbabbbbbabbabbbaaaabababaab
bbbbabbbbababbabaabbbbba
baaabbbbbbbbbaaabbaaabaaabaaabbaaababbab
bbabbaabababbbbbbbbaaabbabbbaaba
aaabbababaabaaabbaababbbbbaabbababbaaabbbbabbabbaabbbbab
abbaaaaabbabbaaaabbababb
baabaabbbaabbabababbaaabbaaaaababaaaabbabbbbbbaa
babbaabaaabababbbabbabaaabaaaaabbbaaabbb
babababbaabbaabbbbbbaaab
babaaababbbaabaaaaaabaabbbbaaaabababbaaa
aaabbbbbbbabababaabbabba
baaabbaaaaabbbbaaababbaaabbaaaaabbabbbbbabbbabbbbbbaaaaabbaaaababaaabbbbbaabbaababbbbbbababbaaaa
ababbababaabbabaababbbababaababbabbbaaaabbbbbbaaabbababb
babababababababaaaaabbab
aaabbaaaabbbbabbabaaabbb
babbbaaabababbaabaabaabaabbaababaaaabaaaababaaab
babaaaaaabbbbabbbbaabbba
bbabbaabaabbbaaaaabaaabaabbbababaabbaabaababaaaaababbbba
aabbbabaabbabbbababbaaaa
baaaabaababbabaabbbaabbb
aaabbabaaaabaaabaabbaaaabbaabbaa
abaabaaaabbabbaabbaababbabababbabbbbaabbbbaabbba
bbbaaaaabbabbabaabaaabaa
ababbbabbabbaababbaabbaa
aaabbaaaababbbabbaabbaaa
aaaaabaaabbabbaaabbbbaab
bbbaaaababaabaaabbbabbbabaabaaaabaabbbaaabbabaabaaaabbbb
babaaabababbbbbaaaaabbaa
baabaabbbabaabaabbaaaaab
baababbbbaaabbabaababbbb
bbaababbbbababbabbabbbbb
abbaababaabaabbaabbbbbbbbbaabbbbbbaababa
babaaaaaaaababbaabaaabab
babaaaaabbaabbaabaabbaabbbaabaaabbbbaabbbbbaabba
bbbaaabaaabbbabbabbaabbb
bbbbabababbaaaaaaabbbaaabbbbabaabbaaaaaabbbbaaaa
bbbaaaaaabaabaaabaaababa
aaabbababaaabbabbabaaaaaaaababababbbbaab
babbbbbabababbababaaabbb
aabababbaabbabbbbbbbbbba
abbabbaaabaababbbabbabbaaaaabaabaabbbbba
babbabbaabababbabababbbbaaababaaabbaaabbaabaabaa
aaaaaaaabbbabbbaabaaabba
baaaabaaabbbbbbaaabaabbbbbbbaaaa
abbbaaaabababaaabbbbbabbabaaabaaaaababbbabaababaabaaaaaa
abaababbabbbbbbaaabbabbbabbaaaab
abbabbbababbaaabbbabaaaabaababaaabbaabba
aaaabaabbbababbbbabbbbaabbbabbababaaaaab
abbaaabbabaababbbaabaababaaababa
abababababbaaabbbaaabbababaabaab
baaabbabaabaabbaaabababa
bbaaabaaaaaaabaababbaabb
ababbabaaabbabaaaabababa
babbbbaabbbbbaabbbaababa
babaaaababaabbababbabbbaabaaabababbabbaaaabbaabb
baaababbaaabaaabaabbabbbbaaaaaab
abaabbaabbabbaabaabababbabbabbbb
bbbaababaababbbabbababab
baababbabaaaabaaabababbababaaaab
babbaababbabaaaaababbaaa
aababbbaaabababbaabaabab
bbaabbabaabbbbbbbbababbbaaaabbbabbbbaaba
bbaaababbbaaabaabbbaaabaababbbbababbbabbababbbbaabaabbba
bbabaaaaaabbbababbaaabbb
baaaabaabaabbababaabaaababbbaabbbbabbaabbbbabbabaaababaaaabbaaaaaaaabbabaabbbabaabbabbaa
abaaaabbaabbabaaaabbbababbabaaaaaabbaaba
baaaaaabbbabbbbaabbbbbbbbbabaabbbabbabababaabababbbbaaabaaaabbbababbbbaa
aaaaaaaaaabbbabaaabbaaab
aababbbababaabbaaaabbbababbbaabb
abbbbabbaaabbbaaababaabbbabababa
aaaaabaabaaaabaaabbaabaa
bababbabbabaababbabbbabb
abbbbabbbaabbbabbbbaabaabbbaabbaaaaababaaaaaaaaababaaaba
aabaaababbbaabaabaabaaaabbbbaaababbbbaba
abbabaabbbaaababaaabaaba
bbaaababbbbbbaababbbabaa
bbabaaaababbbaaaabaaaaaa
aaabbaaabbabaababaaaabba
baabbabaaabbaaaaabbbbaba
baabaabababbaabbbbababaa
aaaabaabbbaaababaabbaabbabbbaaaaabaabaab
aaababbbaabaaaabbaaaabbbbabbbbba
aaabbbaababbaababbaaaaba
bbbabbbababbbaabbbaababa
abbbaaaabbabbbaaabbaabaa
aaaaaabbbbabbaaaabbabbbabaabbbabbbaaabaabaaaabaa
abababaaaaaaaaaaabbbaababaaaabbabbaabbabbabaabaaaabaabaababaabbabaabbbbb
ababbbaaabaabbaaabaababaabbbbbaa
abbabbbaababbababbbbbabaaabaabbabaabbabbbbaaaabaabaaabaa
ababbaabababbbabbbbbaaab
babbabaababaaabbbaabaabb
bbababbbaaabbaabbabbabaaaabaabaa
abaababbbaabbababaaababbbabaababbaaaaabaabbabbbb
ababababaaababaabbaaaabb
bbbaaaaaababbaababaabbba
babbbaababbbabbabbabaababaababbabbaababa
baabaabbbbaaaaaabbbaaabb
abbbaababbbbbabababbaabaaaaaabaaabbaaaaaabbbbaabaabbbbaaaabbbbabaababaab
ababaabbaabababbbbabbaabaaababaabaaaaababaaaabba
ababbbbbaabbaababababaababaaaaaaabbaaaaabbabbbaa
abbaaabbabaaaabbbbbabbbbbabbaabbbbbaaaaaabbbabbbbbbaabba
aaababbaaaaabaabbbaaababaaaabbbb
aabaaababbbbbbabaaabbabaabbaaaaabbbbbbbbababababbbaababbbabbabab
bbbaababbaaabbaabbbbbbaaabaaaaabaabbaababbaaaaab
aaaabbbaababbaabbabaabbababaaabbbaabbaab
bbbabababbababababbaabaa
bbbbabaabbaababbaaaabbbaabbbbbab
aaabbaaaaaaabbbaabbbbbbaabaaaabababbbaaabbaababbbaaaaaaaababbbbabababaaa
aaaaabbababbababbbababbbbaaababbabaabbaaaababbaabbaabbaa
bbabbabaaaaaabaabababbbbaaabbbba
ababbbaabbababbaaaaaaaab
babaaabbbaabbabaaaabaabb
babbababbbbbabaabababaab
bababbabbbaabaabbbbabaab
abbbaabaaabbbbbbaabbbbbbaabaaabbbbbbbaaaababbaaaaababaaabaaabaaa
abaabaaaabaababababaaabaaaabbbaabbabaaab
ababbbabaaaaaaaababbbbab
bbabbbbaabbbbabaaaaaabbbbababbaaabbbbbbbbbaabbbabbaaababababbbbbabbaabbabbabaaaabbbabbba
abaaaabbaaabbaabaaabaaaabbbabbbbababbbaabaabbbab
aabbbbbbbabbaababaabbababaabbbba
baaaabbbbababbabbbaabbba
abbbaaaaababbbababbabaaa
bbbabbbaaaababbaabaabbaaabaababaabbabababbaaabbaaaaaaabbabaabbabbbbaabbb

12
input/day19_example.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

View File

@@ -13,7 +13,7 @@ pub fn solve() {
let lower = Vec4::of(-cycles-1, -cycles-1, -cycles-1, -cycles-1);
let upper = Vec4::of(initial_width + cycles+1, initial_height + cycles+1, cycles + 2, cycles + 2);
let mut initial_state = BoolGrid3D::new(lower, upper);
let mut initial_state = BoolGrid4D::new(lower, upper);
for y in 0..initial_height {
let mut line_chars = lines[y as usize].chars();
@@ -36,7 +36,7 @@ pub fn solve() {
println!("Day 17 Part 2: {}", part2);
}
fn run_conway_cube_simulation(initial_state: &BoolGrid3D, cycles: u32, restrict_fourth_dimension: bool) -> BoolGrid3D {
fn run_conway_cube_simulation(initial_state: &BoolGrid4D, cycles: u32, restrict_fourth_dimension: bool) -> BoolGrid4D {
let mut prev_state = initial_state.clone();
let mut next_state = initial_state.clone();
@@ -120,7 +120,7 @@ impl Vec4 {
}
#[derive(Clone)]
struct BoolGrid3D {
struct BoolGrid4D {
data: BitArray,
lower: Vec4,
@@ -128,9 +128,9 @@ struct BoolGrid3D {
size: Vec4,
}
impl BoolGrid3D {
impl BoolGrid4D {
fn new(lower: Vec4, upper: Vec4) -> BoolGrid3D {
fn new(lower: Vec4, upper: Vec4) -> BoolGrid4D {
assert!(lower.x < upper.x && lower.y < upper.y && lower.z < upper.z);
@@ -141,7 +141,7 @@ impl BoolGrid3D {
w: upper.w - lower.w
};
return BoolGrid3D {
return BoolGrid4D {
data: BitArray::new((size.x * size.y * size.z * size.w) as usize, false),
lower, upper, size
}

112
src/day19.rs Normal file
View File

@@ -0,0 +1,112 @@
use super::util;
use regex::Regex;
use crate::day19::RuleType::{Letter, Options};
use std::collections::{HashMap, HashSet};
pub fn solve() {
let lines = util::read_file("input/day19.txt");
let mut rules_map = HashMap::new();
lines.iter()
.take_while(|s| s != &&String::from(""))
.for_each(|s| {
let mut line_split = s.split(": ");
let idx = line_split.next().unwrap().parse::<usize>().unwrap();
let rule = Rule::parse(line_split.next().unwrap());
rules_map.insert(idx, rule);
});
let messages: Vec<&String> = lines[(rules_map.len() + 1)..].iter().collect();
println!("{:?}", try_match(&messages[0], &0, &rules_map));
let part1 = messages.iter().filter(|m| try_match(m, &0, &rules_map).contains(&m.len())).count();
println!("Day X Part 1: {}", part1);
// We update the rules to include the loops:
rules_map.insert(8, Rule::parse("42 | 42 8"));
rules_map.insert(11, Rule::parse("42 31 | 42 11 31"));
let part2 = messages.iter().filter(|m| try_match(m, &0, &rules_map).contains(&m.len())).count();
println!("Day X Part 2: {}", part2);
}
/// Calculates and returns until when the string was matched
fn try_match(message: &str, rule_idx: &usize, rules: &HashMap<usize, Rule>) -> HashSet<usize> {
let rule = rules.get(&rule_idx).unwrap();
if rule.rule_type == Letter {
if message.starts_with(rule.letters.as_ref().unwrap()) {
let mut res = HashSet::new();
// Note: kind of a hack here, all the "letter" based matchers are of length 1
res.insert(rule.letters.as_ref().unwrap().len().clone());
return res;
} else {
return HashSet::new();
}
} else {
return rule.options.as_ref().unwrap().iter()
.flat_map(|options| {
let mut try_from = HashSet::new();
try_from.insert(0);
let mut next_try_from = HashSet::new();
for option_rule_idx in options {
for start_idx in try_from {
try_match(&message[start_idx..], &option_rule_idx, rules)
.iter()
.for_each(|m| { if m != &0 { next_try_from.insert(start_idx + m); () }})
}
try_from = next_try_from.clone();
if try_from.is_empty() { break; }
next_try_from.clear();
}
return try_from;
}).collect();
}
}
#[derive(Debug, Clone)]
struct Rule {
rule_type: RuleType,
letters: Option<String>,
options: Option<Vec<Vec<usize>>>
}
impl Rule {
fn parse(input: &str) -> Rule {
lazy_static! {
static ref LETTER_RULE_MATCHER: Regex = Regex::new(r###"^"([a-z])"$"###).unwrap();
}
return if LETTER_RULE_MATCHER.is_match(input) {
Rule {
rule_type: Letter,
letters: Option::Some(LETTER_RULE_MATCHER.captures(input).unwrap().get(1).map(|m| String::from(m.as_str())).unwrap()),
options: Option::None,
}
} else {
let options =
input.split(" | ")
.map(|s| s.split(" ").map(|o| o.parse::<usize>().unwrap()).collect::<Vec<_>>()).collect::<Vec<_>>();
Rule {
rule_type: Options,
letters: Option::None,
options: Option::Some(options)
}
}
}
}
#[derive(Debug, PartialEq, Clone)]
enum RuleType {
Letter, Options
}

View File

@@ -19,8 +19,9 @@ mod day14;
mod day15;
mod day16;
mod day17;
mod day19;
const MAX_DAY: u8 = 17;
const MAX_DAY: u8 = 19;
const BENCHMARK_AMOUNT: u32 = 100;
fn solve(day: u8) {
@@ -42,6 +43,8 @@ fn solve(day: u8) {
15 => day15::solve(),
16 => day16::solve(),
17 => day17::solve(),
// 18 => day18::solve(),
19 => day19::solve(),
_ => println!("This day is not yet implemented")
}
}