2020 Day 19 & 20 Complete
This commit is contained in:
parent
069d03004d
commit
e9e89e0a42
600
2020/day19/input
Normal file
600
2020/day19/input
Normal file
@ -0,0 +1,600 @@
|
|||||||
|
126: 116 104 | 107 95
|
||||||
|
28: 104 | 95
|
||||||
|
25: 116 95 | 33 104
|
||||||
|
17: 98 104 | 14 95
|
||||||
|
69: 120 104 | 86 95
|
||||||
|
78: 49 95 | 57 104
|
||||||
|
124: 95 36 | 104 74
|
||||||
|
61: 104 39 | 95 30
|
||||||
|
27: 99 95 | 41 104
|
||||||
|
114: 50 104 | 102 95
|
||||||
|
76: 83 95 | 116 104
|
||||||
|
22: 95 133 | 104 53
|
||||||
|
9: 104 71 | 95 63
|
||||||
|
72: 65 104 | 90 95
|
||||||
|
125: 77 95 | 60 104
|
||||||
|
130: 104 44 | 95 69
|
||||||
|
106: 33 95
|
||||||
|
77: 104 20 | 95 101
|
||||||
|
118: 95 104
|
||||||
|
99: 95 32 | 104 54
|
||||||
|
15: 95 116 | 104 116
|
||||||
|
92: 104 132 | 95 23
|
||||||
|
120: 66 95 | 37 104
|
||||||
|
94: 53 104 | 16 95
|
||||||
|
3: 104 107 | 95 10
|
||||||
|
40: 95 36 | 104 38
|
||||||
|
54: 95 104 | 104 95
|
||||||
|
21: 97 104 | 16 95
|
||||||
|
12: 104 54 | 95 49
|
||||||
|
109: 104 16 | 95 33
|
||||||
|
26: 76 95 | 106 104
|
||||||
|
105: 49 104 | 133 95
|
||||||
|
84: 104 131 | 95 72
|
||||||
|
34: 104 91 | 95 112
|
||||||
|
23: 126 104 | 15 95
|
||||||
|
86: 104 81 | 95 113
|
||||||
|
67: 104 107 | 95 49
|
||||||
|
20: 95 53 | 104 16
|
||||||
|
46: 97 95 | 107 104
|
||||||
|
47: 95 33 | 104 53
|
||||||
|
134: 104 10 | 95 32
|
||||||
|
58: 95 32 | 104 116
|
||||||
|
70: 2 95 | 40 104
|
||||||
|
60: 95 96 | 104 19
|
||||||
|
75: 129 104 | 122 95
|
||||||
|
102: 124 104 | 26 95
|
||||||
|
123: 104 53 | 95 118
|
||||||
|
49: 104 95 | 28 104
|
||||||
|
41: 104 43 | 95 16
|
||||||
|
43: 95 104 | 104 104
|
||||||
|
50: 95 119 | 104 64
|
||||||
|
31: 95 7 | 104 130
|
||||||
|
29: 62 95 | 79 104
|
||||||
|
103: 55 95 | 56 104
|
||||||
|
2: 22 95 | 123 104
|
||||||
|
91: 85 104 | 13 95
|
||||||
|
93: 95 30 | 104 134
|
||||||
|
6: 104 33 | 95 57
|
||||||
|
96: 53 104 | 97 95
|
||||||
|
4: 95 27 | 104 75
|
||||||
|
101: 49 104 | 118 95
|
||||||
|
90: 56 104 | 100 95
|
||||||
|
85: 10 28
|
||||||
|
18: 95 32
|
||||||
|
81: 104 35 | 95 110
|
||||||
|
11: 42 31
|
||||||
|
80: 95 108 | 104 110
|
||||||
|
10: 104 28 | 95 95
|
||||||
|
95: "b"
|
||||||
|
16: 95 95 | 104 104
|
||||||
|
115: 95 114 | 104 17
|
||||||
|
0: 8 11
|
||||||
|
33: 104 104
|
||||||
|
14: 104 9 | 95 93
|
||||||
|
30: 104 43
|
||||||
|
133: 28 28
|
||||||
|
53: 104 95 | 104 104
|
||||||
|
63: 116 95 | 116 104
|
||||||
|
68: 74 95 | 25 104
|
||||||
|
1: 95 32 | 104 118
|
||||||
|
110: 95 33 | 104 107
|
||||||
|
111: 87 95 | 80 104
|
||||||
|
5: 32 95 | 97 104
|
||||||
|
79: 45 104 | 4 95
|
||||||
|
88: 95 54 | 104 118
|
||||||
|
122: 53 104 | 33 95
|
||||||
|
32: 104 104 | 95 28
|
||||||
|
42: 29 104 | 115 95
|
||||||
|
129: 95 16 | 104 32
|
||||||
|
7: 84 104 | 24 95
|
||||||
|
112: 128 104 | 78 95
|
||||||
|
119: 127 104 | 88 95
|
||||||
|
82: 33 104 | 32 95
|
||||||
|
45: 59 104 | 89 95
|
||||||
|
37: 104 3 | 95 117
|
||||||
|
100: 16 95 | 54 104
|
||||||
|
59: 95 82 | 104 18
|
||||||
|
98: 68 95 | 61 104
|
||||||
|
132: 104 129 | 95 6
|
||||||
|
83: 95 28 | 104 95
|
||||||
|
44: 104 125 | 95 70
|
||||||
|
62: 104 73 | 95 111
|
||||||
|
107: 95 95 | 95 104
|
||||||
|
38: 10 95 | 43 104
|
||||||
|
8: 42
|
||||||
|
36: 32 104 | 54 95
|
||||||
|
39: 95 54
|
||||||
|
117: 116 104 | 10 95
|
||||||
|
52: 21 95 | 58 104
|
||||||
|
56: 97 104 | 49 95
|
||||||
|
24: 95 34 | 104 92
|
||||||
|
57: 95 95
|
||||||
|
87: 104 12 | 95 121
|
||||||
|
127: 83 104 | 107 95
|
||||||
|
108: 104 33 | 95 16
|
||||||
|
97: 104 95 | 95 95
|
||||||
|
113: 104 129 | 95 105
|
||||||
|
19: 33 95 | 33 104
|
||||||
|
73: 95 48 | 104 103
|
||||||
|
13: 54 104 | 49 95
|
||||||
|
116: 104 95
|
||||||
|
64: 46 104 | 13 95
|
||||||
|
55: 16 95 | 33 104
|
||||||
|
71: 83 95 | 43 104
|
||||||
|
65: 47 104 | 110 95
|
||||||
|
35: 104 118 | 95 53
|
||||||
|
51: 104 94 | 95 1
|
||||||
|
128: 95 57 | 104 116
|
||||||
|
121: 95 54 | 104 16
|
||||||
|
66: 5 95 | 55 104
|
||||||
|
131: 51 95 | 52 104
|
||||||
|
74: 133 28
|
||||||
|
89: 95 5 | 104 82
|
||||||
|
104: "a"
|
||||||
|
48: 67 104 | 109 95
|
||||||
|
|
||||||
|
babbaabbbabaaabbababaaaa
|
||||||
|
babbbbbbaabbbbababaaaaba
|
||||||
|
aababbabbbaaabaabaaaabba
|
||||||
|
aaabbabaaaaabbbbabbaaaab
|
||||||
|
abaaabbbaaaabaaabaababababbabbababbababaaaaaaaba
|
||||||
|
aaabbaaaaaabbbaaaaababbbbabbbabbbaaaababbbaaababbbbbabbb
|
||||||
|
baababbbbbbabbabbbabbbaa
|
||||||
|
aaabaabbbbbbababbabbbbaa
|
||||||
|
bbbbabbaabaaaaaaabaabaaa
|
||||||
|
bbbabbbaaaabaabbbbabaaba
|
||||||
|
baabbabbaabaabaaaaabbaaababaaaabbbbbbbbbabbaaaab
|
||||||
|
aababbabbbabbbbabbbabbabbbaabbab
|
||||||
|
baabbababbbaaabbbbbbbaba
|
||||||
|
abbabbababbaabbaaaabbbabaabbbbaaabbbbabb
|
||||||
|
aababbababaaaaabbbbbbabb
|
||||||
|
bbbabaaaaaaabbababaaaaba
|
||||||
|
aaabbabaabbbaaaaababbbaa
|
||||||
|
bbbbbaaabababbabbbbaaaaa
|
||||||
|
aaabbbaaabbaabbaabbbbaaabaaabababbababbb
|
||||||
|
aabbabaabaabbbababbaabba
|
||||||
|
aabbabaabbbbbbaaabbbabbb
|
||||||
|
abbababbbaabbaaaabbaaabbbabbbabbbbbaabbbabbabbba
|
||||||
|
bbbbabaaabaabbbbbabbbbaa
|
||||||
|
baababbabbbbaaababaababb
|
||||||
|
bbbabbaaaababbabbbaababb
|
||||||
|
babbaaabbbbababbaaabbabb
|
||||||
|
bbbbaaaabbbbbbbbbbbaabba
|
||||||
|
aababbaabbbabaaabbbbabbabbbaaabababbaaaaaabaaaab
|
||||||
|
bbabaaabbabbabbbababbaaabaaaaabaabaaaaabbbbaaababbbaaaabbabaaaab
|
||||||
|
abaaaaaaabaaaaabbbaaabaaababaabaabababba
|
||||||
|
abbbbbabaaaaaabbabbbbbaa
|
||||||
|
aaaabbbbbbbbabaabbababbb
|
||||||
|
baabaaaababaaabaabbaabbb
|
||||||
|
baaaaabbbbababababababbb
|
||||||
|
aababbababbbaababbbabaaabbbabaabaaababaa
|
||||||
|
baabbabbbbbaaabbabbabbba
|
||||||
|
baaabbababbaaabbbbaaaababaaaabaababbbabababababaaabbbaab
|
||||||
|
baaababbbaababbabbabbaaaaabbaababbabbbaaabbbbbbb
|
||||||
|
abbabbabaaaaaabbaabaabaababaaabbbbbaaaabaaaababb
|
||||||
|
baabbbaabbaaaababababbbbaabbaaab
|
||||||
|
bbbaaaabbababbabaabbbabaaabbabbabaabaaab
|
||||||
|
baabababbabaabaabbbaaabbababbaaaaabbaaab
|
||||||
|
aabbababaaabbbabaabbabaabbabbaab
|
||||||
|
abbabababbabbbbbaabaabba
|
||||||
|
abbbaababaabbabbabbbabaaabaaabab
|
||||||
|
bbbbbbaaabaaabbbaabbbaaa
|
||||||
|
bbbabaabbbaaaabaababaabababbbaba
|
||||||
|
bbabaaabbaababbabbbbaabbbaaabbbb
|
||||||
|
bbbaaaabbaabababbbabbbab
|
||||||
|
bbabaaabbbbbbbbbbababbaaabaabaaabbababbb
|
||||||
|
abaaaabbbbaabbaabbabaaaaabaabbbabbaababa
|
||||||
|
baabbaaaaaaabbbabbababba
|
||||||
|
babbabbaaaabaabaababbbabbbbaaabaababbaaaabbabaab
|
||||||
|
baabbbaabbbbabbaaabaabaaabaaabaaabbaabbaabaababaabaabbbababbabab
|
||||||
|
babbbabbaaaaabaaabaaaaaabbbabaabaaabbbbbbbaaaababbbbbbbaaababbbaabbbabbbbaaaabba
|
||||||
|
ababbbbbbbbbbbbbbabbabbaabbbaaab
|
||||||
|
bbaaabaabaabaabbaaaabababbbbabbb
|
||||||
|
bbabbabbbbbbbbaabbbaabbb
|
||||||
|
bbbbabbaaabbaaabaaabaaaa
|
||||||
|
ababaabbbaabbababaabbbaabbbbbbba
|
||||||
|
baabaaaabaabbaabbababaab
|
||||||
|
aabbabaaabaaaaaabbabbbaa
|
||||||
|
abaaaabbbabaaabbbbaaaababaabbaaabaabbbbaabbbbaba
|
||||||
|
baaaabaaaabbbbabaababaab
|
||||||
|
babaabbaaabbaaabbbbabbaaabbaaabbbbaaaabbbbbbabbb
|
||||||
|
bbaaaabbbbbbabaabbbbabbababbaaaabbabbaab
|
||||||
|
aaabaabbabbaaabbbabababbbaababababababbabbbbabbb
|
||||||
|
bbbbbaabbabbbabbbaaaaaab
|
||||||
|
bababbaababbaaababaaaaabbbabbabbbbbbbbbbaaabbbbabbaabaabaabbbbbb
|
||||||
|
abbabbabababbababbaaaaab
|
||||||
|
bbbbbbaaaaaaabbabbabaaabbbaabbababbaabab
|
||||||
|
bbaaaababbaaabbabbbababbaabbababbbbbabababaaaabaabbaabaaabaababb
|
||||||
|
aaabaabaaabbbbbababbbabbbabbbbba
|
||||||
|
bbbbaaabaabbbbbaabababbb
|
||||||
|
babaaababaaaabaaaaaaabbabababaababababab
|
||||||
|
bbaaabbabbbbbaaaaabaaaaa
|
||||||
|
bbbabbaabbaaaaaaabaabaaaaaaaabbbbbbabbbbaaaaabbbbababaab
|
||||||
|
aababbbbbbaaaabaaaabbaaaaaababbbababaabaabbabaaabaaabababbabbbaa
|
||||||
|
baaababbbaabbaaaababbbabbbbabbaabbabaaab
|
||||||
|
aabbbbbabbbbaabbbaaaabbaabababbbbbabbaabaababbbabbaabbbabaaabbbb
|
||||||
|
baaabaaaabbabbbaabbbaabaabbaabbabbaabbbaaabaabababbbbbab
|
||||||
|
aababbbbabaabbabbababaab
|
||||||
|
abbaabbaaaaabbbbbaaabaaa
|
||||||
|
abaabbbbbbaaaabbbbaaababbbabbabbbabbbaaaabaaaabaaabbabbbabbabaaa
|
||||||
|
aaaabbabbaaababbabaabbabbbbabaaabaaaaaba
|
||||||
|
bababaaabbbbbbbbaaabbabb
|
||||||
|
babaababbbaaabababbbaabbaaabbaab
|
||||||
|
bbabaaabaaabaabbbbaaabab
|
||||||
|
abbbabaabbbabbabbabaababbaaabbabbabaabaabbbbabbaabaabaabbabbbaba
|
||||||
|
bbabbbbabbabbabbabbabbba
|
||||||
|
aabaabaabbabaaaaabbabaab
|
||||||
|
ababaaabbabaaaabbbaabbbb
|
||||||
|
ababbbabbaaababbaaaabbbbabababaa
|
||||||
|
bbbababbababbabaababbaab
|
||||||
|
bababbbaaabbababbabbabab
|
||||||
|
babbabbbaaaabababbbaaaabaaabaabbbbaaaaaaaababababbabababbabaaabbababbbbaaabbbbbbabbababb
|
||||||
|
bababbaaaabababbabaabbababbaabbb
|
||||||
|
aaaabbbbabbaaabbbabbabaa
|
||||||
|
babaababaaabaabaaaabaaab
|
||||||
|
bbbbaaaabaabbabaaabbbaaa
|
||||||
|
babbbabbbbbaaabbabbbbbaa
|
||||||
|
bbabaaaababaababbabaaabbbbbbaaaaabbaabbb
|
||||||
|
aabbbbbababaaabbaaaabbaabaaaabab
|
||||||
|
babbbaabbbabbbbaabbaaabbbbabaaba
|
||||||
|
aabababbababaaabbababaaabbbbaaaabaababbbaabbaaaabbabbbabbbbbbbabbbbabbbb
|
||||||
|
aabbbbbaababbbbbaaaabbbaabababaaabbbbbba
|
||||||
|
ababaaabaaabbbbbaaababbbabaababbbbaaabab
|
||||||
|
aababababbaaabbabbaabaaa
|
||||||
|
ababbbbaabbababbabbabbbb
|
||||||
|
bbbaaabbbbbbaaababbaabbababbaaabbaaabbbb
|
||||||
|
aaaaaabbbaabababbababaab
|
||||||
|
abbbbaaababababbaabbaaabaabbbaabaaabaaaa
|
||||||
|
bbbbbbaabaabbbabaaabbabb
|
||||||
|
baabbbaaaaabbbababaaaaba
|
||||||
|
abbbaaaababaababbbababba
|
||||||
|
babbaababbabbabaabbbbaabaaaaaaab
|
||||||
|
abbbbbabbabaaaabaaabbbbbbaaaaaaaaabbaaaa
|
||||||
|
aabababaabbbaaaaabbabaab
|
||||||
|
babbabbabbbaaabaabbaaabaabbabaaa
|
||||||
|
baabaabaaababbbbaabaabbb
|
||||||
|
aabbbbabbbbbabbabaabbbbb
|
||||||
|
abbabbabaaabbbababbbabba
|
||||||
|
bbaaabbaaabbbbbaaababbabaabbbbbabbabaabbbababaabbbabbbab
|
||||||
|
babaaabbbbaaaabbaaaabababbbbbbbaaaaabbaaaaabaaabbabbabba
|
||||||
|
bbababababaaabbbbabaabbb
|
||||||
|
bbbbaabbbbbbbaaaabbbbaab
|
||||||
|
baaabbbababaaabaaaabaabbabbabababaabbaababbaabab
|
||||||
|
bbaabbbaaabbabbabaabbbaaabbaaaababbabbbaabababba
|
||||||
|
abaabbbbbaabaabbbbbaabab
|
||||||
|
bbbabbaabbbbabbaabaabbabbaababaa
|
||||||
|
abaaaaabaaaaabaaabbabbbb
|
||||||
|
abbbaaaaabaaabbbbbabbabbbaaaaaba
|
||||||
|
baaabbabbbbabaaabbbaabbb
|
||||||
|
baabbabbaabbabaaabbbbbba
|
||||||
|
abaaabbbbbbbbbaabaabbbaabbbbaabbbabaababbbaabbbabbaabaabaaababaa
|
||||||
|
bbbbabaabbbbabaaabbaaaab
|
||||||
|
ababbbbbabaaaababbbaabbbbabababaaabaaabaabbabaab
|
||||||
|
abbaaabbababaaabbbbabbabbabbbaaabbbabbbb
|
||||||
|
bbbabbbabbbbbaababaabaaa
|
||||||
|
baaabbbabbbbababababaaababababaabaaaabab
|
||||||
|
bbbaaaabbaabbabaaaaaabbabbaabbba
|
||||||
|
babaabaababbbaabbaaabbaa
|
||||||
|
bbbaabbbaabaabababababba
|
||||||
|
bbbabaaaabbbbbababbbbaba
|
||||||
|
bbabbbbbbbbbaaaaabababaa
|
||||||
|
aaaaababaaabbbaabbbbaaabaabbbbabbabbbbbaaabbaabb
|
||||||
|
abbababbaababbbbbbaabbba
|
||||||
|
bbaaaabaaababbabbaababbabbbbabbb
|
||||||
|
abbbaabababbbabbbaaabbbabbaabbbabbaaabab
|
||||||
|
bababbbaabaaabbaabbabbababbbbabb
|
||||||
|
babaabbabbabababbbaabbba
|
||||||
|
aaaabbbabaaabbabbabbabbabbbbaabbabaabbaa
|
||||||
|
abaaababbbaaaabbbbababaabbbabbaababbbbbbabbbaaababaabbbbbbbabbaaaaabbaab
|
||||||
|
bbbabbabbaababbaabaababa
|
||||||
|
ababbabbabaaabaabaaaabba
|
||||||
|
abbabbababbaaaaabaaaaaab
|
||||||
|
baaabbbababaabaaabbaaabbbabbbbbbabbababbabbbbabbbababababaaabababaaabbbb
|
||||||
|
abbaaaaaaaabbaaaaaaaababbbabbbbababbbbabbabbbbaabbaabaaa
|
||||||
|
bababbbabbbbaaaaababbabbabaababbabbbbbba
|
||||||
|
aaaabbbaaababbbbabaaaaba
|
||||||
|
bbbabbbabbaaaabbabbabbabbbbabaaaaaaaaabb
|
||||||
|
bbbbabbabbaaaabbaaabaaaa
|
||||||
|
abbbaaaaababaabababbbaba
|
||||||
|
ababbbabaaaaabaaaaaaaabbbababbbbbabbaabbbbaaaaab
|
||||||
|
bbbaabbabababaabaabbaabaaaabaaabbaaabbabbabaaaababbbbbbaababbaaa
|
||||||
|
aabaabaaababbababbaaaaab
|
||||||
|
baabbbaabaaabbbabbbbabbaaabbaaababbbabab
|
||||||
|
bbbaaaabaabbabaaabbbabba
|
||||||
|
bbbaaabaababbabababbbaaa
|
||||||
|
baabbaababbababbabbaabbb
|
||||||
|
bbaaabaabaabaabaabbaabab
|
||||||
|
aaabbbabbbbaaababbbbbbbbbbaabaaa
|
||||||
|
abaaabbaaabababababaaabaabbaaabbabbbbaab
|
||||||
|
abaabbabaabababbbbbbabaabababbaabaabbabababaabaabaaaabbb
|
||||||
|
aabbababbababaaaabbbaaaabaaaaaab
|
||||||
|
abaabbababaaaaaabbbaabab
|
||||||
|
bbbbaabbbbabaaaababaababaaabbbbbaabaabaabaaabbbbbbabaabb
|
||||||
|
aaabbbbbbbbabbbabbbbabaabbbbbaaaabbbbbabbbbbbbab
|
||||||
|
aababbaababbabbbbbbbbbab
|
||||||
|
abbaaaaaaabaaabbbbbbaabababbbababbbaabababbaabbb
|
||||||
|
aaabbbbbababaabaababbaaabbaaababaaabaaab
|
||||||
|
abbbababaabbbbbaababaabbbbababbbaaaababaababaaaaabbbababababbabbababaabb
|
||||||
|
bababaaaabbaaaaaabbbaabb
|
||||||
|
bbbabbabaaabaabbbaababbababaaababbabaababaaabbbb
|
||||||
|
bbbbababaabbabaabbbabbababaaaabaaaaaaaba
|
||||||
|
abaaabaabaabaaaabbaaabaababbaaba
|
||||||
|
bbbbbaabaababbaaabbbbbbb
|
||||||
|
bbbabaaaabbaaabbbabaababababbabbbbaabaab
|
||||||
|
bbbababbbaaaaaaaaabbbaaa
|
||||||
|
aababbaabbbbbabaabbaabbb
|
||||||
|
bbbbababbaabaaaababbaabbbaababaa
|
||||||
|
babbbaabbabaababaaaabbbbbbaaabab
|
||||||
|
aababaabaaaabaaaabbbabab
|
||||||
|
baababbbbbabaaaaabbbabab
|
||||||
|
bbabbbbbbaabbbababbabaaa
|
||||||
|
aaaaababbaabbabaabbbabaaabaaaabbabbbaaab
|
||||||
|
aaabbbaabbbbaabbabbbbaba
|
||||||
|
baabababababaaabbabbbbbbaabaaaababbbabba
|
||||||
|
bbabaaababbbbbabbbbabaabbabbbabaaabaabab
|
||||||
|
aabbaabababababbbbbbbabb
|
||||||
|
bbabbbbabbaaabaaabbabbba
|
||||||
|
aabbbbabbaabbaaaabaababa
|
||||||
|
abaabbabbbbbaabbbbbabaabaaaaaaaa
|
||||||
|
baababbbbaababaabbbababbbabbbaaabababaaabbbbbabbabaabbbababaabbbbabababaabaaabbbabbaaababbababab
|
||||||
|
abaaaaabbababbababbbbbbb
|
||||||
|
baabbaabbabbbbbbaabaabbbaabbabba
|
||||||
|
babaababbbbaaabbabbaaaaaabaaabbbbbabbaaabbaabbbb
|
||||||
|
aaaabbbaaabbbbbaabaaaaaaaaabaabbbaaaabbaabbaabbbbaaaabbb
|
||||||
|
bbbaaabbabbabbabbbbbabaaabababbabbbaabab
|
||||||
|
bbabababbababbaabaaabbbb
|
||||||
|
ababbbabbbaabbaabaababbbbbbbbbbbabaaaababbaabbbabbbaabba
|
||||||
|
bbbbabbaababaabababaabaabbbabaabababbbabbbaabbbabbbaabaaaabaaaab
|
||||||
|
abbaabaababbbaabbabaabbabbbaabaabbabababbbaaaaaabaaaaabaabaababbbbbbaabbbbbaaaab
|
||||||
|
bababbaaaaaabbbbbaaabbbb
|
||||||
|
bbbaaabababaaaabbabababababaabaaabaaabababababba
|
||||||
|
bbbabbbabbbbbaabbaababbbaabbaabb
|
||||||
|
baaababbaabbaaabbaaaabbb
|
||||||
|
baabbaabbbbbaabbababbbbaaaaababbabbbaabb
|
||||||
|
bbbbaaababbbaaaaaaabaaaa
|
||||||
|
baaabbabaaaaabaaaaababba
|
||||||
|
bbbaaabbaabaabaaabbbabbb
|
||||||
|
aababaabbbaaabaaababbaab
|
||||||
|
ababbbabbbabbbbabaaabbbaaabaabbbaabaaaab
|
||||||
|
baabbaaabaabbababbaaaaab
|
||||||
|
aaabbbaaaababaababbaabbb
|
||||||
|
bbbababbaaaabbbbbbbbabbb
|
||||||
|
aaabbababaabababbbbabbbaaaaabbbaaaabaaaa
|
||||||
|
abbbbbabbabaabbaabaabbabaabaabaaaabaabba
|
||||||
|
bbbaaabbaaaabbabbbaabbab
|
||||||
|
bbaabbaaaababbbbaababbababbabbabaaaaababbaaabaab
|
||||||
|
bbbaaababbabbaaababbbbba
|
||||||
|
babaaabaabaaabbbbbbbbbbaaaababbbbabbabbb
|
||||||
|
bbbabbbabaabbababababaaabaaaababaabbbbaa
|
||||||
|
aaaabaaaaaaabbbbaababababaabaabbbbbaabbaabbabbaabbaaabab
|
||||||
|
abbbaaaaaababbabbaababaa
|
||||||
|
baababbbbabaaabaaabaabab
|
||||||
|
bbbbabbabaabbbababbaaababbaabaaaabbbbaab
|
||||||
|
babbabbababbbabbbabbbbaa
|
||||||
|
aabbaaababaaaaaabaaaabbb
|
||||||
|
baaabbabbbbababbabaaaaba
|
||||||
|
abaaaaababaaabbbabbabbababbaaaaaabbbabaaaabbbaabbbaabbabbbaaababbabbbaaa
|
||||||
|
bbbabbabbabababbbbbabbabbaaaaabbababaabbbbaabbab
|
||||||
|
abaaaaaaaaabaabaaaaabbabaaaaaaba
|
||||||
|
aaaababaaabbaaabababaaababaabaaa
|
||||||
|
abbbbbabaabababaabbbaaab
|
||||||
|
bbbbabbaaaaabbabbbaababa
|
||||||
|
baababbaaaaabaaaaaaaaabbababbbaaabbaabaa
|
||||||
|
abbbabaaaabaabaabaaabaab
|
||||||
|
aaaabbabbababbabaabbbbabaababbabaabaaaaa
|
||||||
|
aaaababababbbaabaaabaaaa
|
||||||
|
abbabbababaaabaabbabbaaaabbabbbaabaababb
|
||||||
|
babbabbabbbbbaabbbabaabb
|
||||||
|
aababbabaaaaaabbbabbbbbbabbaabaabbbaabbb
|
||||||
|
bbaaabbabababbbbaaaababaaabbbbbb
|
||||||
|
abababbbbbbbbbbaababbbbbaabaaabaababbbbbbaabbaababaababaaaabaaaaababbabb
|
||||||
|
aaaabaaabaaaaaaabbbbaabbaabaaaba
|
||||||
|
abbbabaababaabaaaaaaaaab
|
||||||
|
bbbababbbabbaabbaaabbaaaaaabbabaababbaabbbaababa
|
||||||
|
baaaaabbababbabaabaababbaaaaaaabbababababbaabbaaabbbaaaa
|
||||||
|
bbbababbbbbbabababbbabab
|
||||||
|
abaaaaabbabababbaabbabbb
|
||||||
|
bbbbbaababbbbaaaabaabbba
|
||||||
|
bbbbbaabababbbbaabaaaabbaabbaaababbabbabababaaaa
|
||||||
|
baabbaabbababaaaababaabbaaababaa
|
||||||
|
abbbbbababaaaabaabbabbabbabbbbabaaabaabaaaabaaababaaabaababaababbbbbabba
|
||||||
|
aaaabbabababaababaaabbbb
|
||||||
|
baabaaaabbabbaaabbbaaaabaaabbbba
|
||||||
|
baaaaaaaaaaabbaabababaab
|
||||||
|
baabaababaababbaaabbabba
|
||||||
|
aabababaabbbbbabbababbaabababaaaabbbbbaa
|
||||||
|
ababbabbababaabbbbbabaab
|
||||||
|
aababbabaabbababbaaabbbb
|
||||||
|
bbbabaabaaaaabaaaabbaababbbbaaabbaaababaaabaaaba
|
||||||
|
aaaabbbabbbbaaababaaabab
|
||||||
|
bbbbbaaababbaabbababbbaa
|
||||||
|
aaabbbabbababbbbabaaaaba
|
||||||
|
bbabbbbbaabaabaabbbaabab
|
||||||
|
baaaaaaabbbbbaabaabbaaaa
|
||||||
|
baabaaaabaabbabbabbabaab
|
||||||
|
aaaabababaabaaaabbbbbbba
|
||||||
|
bbaaaabbbaaaaabaaabbaaabbaaabbabbbbbabbbababaabababaaabbbbbaaaaa
|
||||||
|
baabbaabbababbabaabbbbaa
|
||||||
|
aabbbbababbaaaaaaabbabbabbabbaabbabaabababaaabbbbabababaababaaabbaabbbaa
|
||||||
|
bbabababbaaabbabbabaabbabbbbaaaaaabbabbbaaabbabb
|
||||||
|
babaababbaabababaaababaa
|
||||||
|
babbaabbbbbbabaabbabbaba
|
||||||
|
babbbabbbaaaabaaabbaaaaabbaaabbb
|
||||||
|
ababbbabaababbabbbbaaaaa
|
||||||
|
abbaaabbbabababbbbbbbbba
|
||||||
|
bbbaaaabbabaabababbaaabaabbabbbbabbabbaa
|
||||||
|
bababbbabbbbaabbabbbabbb
|
||||||
|
bbabbbbbaaaabbbbabbabaab
|
||||||
|
aaabaabbababbababaabbaaababababbaababbababaaababbabaabbbabbaababbbbaabbababbabab
|
||||||
|
baaaabaababaabaabbbbabaabaaabbbbbbbaabaa
|
||||||
|
bababbbbababbbabbaabbabaaaaaaaba
|
||||||
|
aababbbbbabaaababbaababa
|
||||||
|
aaabbbaaababbabbaabbabaababbabbaaabbbaaa
|
||||||
|
bbbababbaaabbbbbbbabbabbaababbabbababbbaaabaaaab
|
||||||
|
abbabbababaaaaabaaaaaabbabbabaaa
|
||||||
|
aaabbbaaaabababbababaaabbbbaaabbbbbbbaabbbbaaabbababbbaabbabbbaababababaabaabaabaaabbaab
|
||||||
|
babaaaababaaabaabbbbbaba
|
||||||
|
bbbabbabababaabaabaababa
|
||||||
|
bbbbaaabbbbaaababbaababa
|
||||||
|
bbbabbbabaababbaaaabbbbbaaaaaaab
|
||||||
|
aabbaabababaabababaaaaba
|
||||||
|
aaabbbbbaaabbbbbbabbabaa
|
||||||
|
baabaabababaabababbababaabbbaabbbbbababa
|
||||||
|
bbbbabaabbaabbaaaabbaabb
|
||||||
|
babbbaabbabbbabbbaabbbba
|
||||||
|
abbabababbbbaaabaaabbbabaabababaabbabbba
|
||||||
|
baabababbaaababbbbbbbbba
|
||||||
|
aabbbbabbaabaabaababbaab
|
||||||
|
abbaabbabaabaabaabaababa
|
||||||
|
baaabaaabbbaaababbbababbabbaaabbbbabbaaa
|
||||||
|
abbbbbabbbbabbbabbbbabababbbbaba
|
||||||
|
aababbbbbbabaaaaaaaababb
|
||||||
|
ababbabbabbabaaaaabbaaabaabaabababaaabbbaaaabbbaaabbbababbababbb
|
||||||
|
ababbabbbbabbaaaaababbba
|
||||||
|
abbbabbababaaaabababaaabaaabaaaabbbbbabbabbbabbbbaaaaababbbbaababbbabbabaaabbbaa
|
||||||
|
aabababababaabbaaabbabba
|
||||||
|
aabbaaabbbabbbbbbbbababbbaaabbabaabaaaab
|
||||||
|
babbbabbbbaaabbaaaabbaaaabaababa
|
||||||
|
bbaaaababbabbabaabaababb
|
||||||
|
aabababbaaaabbaaaababbba
|
||||||
|
babbaabbaaaabbabaaababaa
|
||||||
|
babaabaabababbbbabbaababaaababaaabbaabbb
|
||||||
|
aababbaaabaaabaababbbbab
|
||||||
|
bbabbbbabababbabbbabbabbabbaaaaabaaaaaab
|
||||||
|
abbbabaaabbaaababaaabaaa
|
||||||
|
bbababbbbbabaaaabbaabbbababbabbbbbbababbaaabaaaa
|
||||||
|
baaaabaabbaabbaababbbbbbabaabbbbbbbaaaaaaabbbbbb
|
||||||
|
baaabbabbabaababbbbbbaaaababbabaaabaabaaaaabbbaabaababaaaabbabbabaaabbbbaabbbbbb
|
||||||
|
aabbaaabaaabbabaabbababbaaaaaaab
|
||||||
|
ababaabababaababbbbabbabbbbabbaa
|
||||||
|
baabbbaaabbaaabbaaababaa
|
||||||
|
bbbbabbaaaaaaabbbaaabaab
|
||||||
|
aabbbababbbbbabbabababaababbaabbbabaababbabbbabbbaaaaaabababbbab
|
||||||
|
abaaaaaababbbbbbbaaababa
|
||||||
|
baabbbaaabbabbaabbbbabbabaababbbbbabbbaaabbabbababbbbababbabbababbabbbaaabaababa
|
||||||
|
bababaaaabbbaabababaaabbabbaaaab
|
||||||
|
abbaaaaaaaaabbbbbabbaaabbbbbababbbabaaabaaaabbbbbbbabbbb
|
||||||
|
aaaabbaabaababbbaaababbbaaaaababaababbbaaabaabbaabaabbbbaaaababbbaaabaab
|
||||||
|
babbababbaaaaaabaabbabbb
|
||||||
|
aabbaaababaaaaaaabbbbbba
|
||||||
|
bbbabaaaabbaaabaaabaaabb
|
||||||
|
bbabbaaababbbaabbbabababbbabaaabbaaabbaaaabaabbb
|
||||||
|
aaabbaaaabbababbaabababbabbbbbabaaaaabaaaabaababaabbbbaa
|
||||||
|
abaaaaaaaababbabbabababbbbabbbbaaabbababaabbaabbaababaaa
|
||||||
|
abbabaaaaabaaabaabbbbaabbabaaababaabababbbaababaaaaabbaabbbbbbba
|
||||||
|
bbaaaabbbbabbaaaabbbbaaa
|
||||||
|
babababbbaababbaaaaaabbb
|
||||||
|
aabababaaaabbbaababaaabbbaaaaaaaaaabaaaa
|
||||||
|
baababbaaaabbbabaaaaabaabaaaaaaabbbaabababababba
|
||||||
|
ababbbbbabbaaababbbbbabb
|
||||||
|
baabaaaabaababaaababbbab
|
||||||
|
bababaaaabaaaabbabbbbbba
|
||||||
|
aaaabbaaaababbabaababbabbabbbbaa
|
||||||
|
bbbbaaabbabaaaabbabbbabbaabbababaabbbaaa
|
||||||
|
bbabaaabbaaaabaaababbabbababbaaaaaaaaaaabbbbbabb
|
||||||
|
babababbaabbaaababbabaab
|
||||||
|
babbabbbbabbbbbbbabbababbababbbbaabbbaabaababbab
|
||||||
|
babaabaaabaaaabbbbbbbbab
|
||||||
|
aaaabbaabaabbaaaaabababaabbabbabaabbbabaababbaab
|
||||||
|
abaaaabbbaabbababaaaaaaaaaabbbaaabababaaabbbabba
|
||||||
|
abaaabaababbbbbbaabbabbbbaaabbbb
|
||||||
|
aaaabbbaaabaabaaabbaabab
|
||||||
|
bbbbabaaaaaaabaaaabbbbaa
|
||||||
|
abaaabaaaaababbbabaaabab
|
||||||
|
ababbbbbbbabbabbaababaabaaaabaaabbaaabab
|
||||||
|
aaabbabaababbbbaaaaaabbb
|
||||||
|
aaaaabbabbbbbbaabbababbb
|
||||||
|
bbbbaaaaabbbaaaaaabbaababaaaabaaaaabaabaababbbababbabbbbbbaababaaaababba
|
||||||
|
bbaaabbaaabbbbabaaabbaab
|
||||||
|
abbbaababaaabbbabaabbbaabbababbbabaabaaa
|
||||||
|
baabaabbbbbaaababbabababbbaabbababbbbbbb
|
||||||
|
bbbaaaabbbaabbaabbaaaaab
|
||||||
|
ababbbbaaabbabaaaababaaa
|
||||||
|
bbaaabaabbbbaaaaababbabbaabaabbbbaaabbbb
|
||||||
|
aaabbbabaababababbaabbbb
|
||||||
|
baabbbaabaaabbbabbbbbbaaababbbabbabbbbbabaaaabba
|
||||||
|
bbabaaabababaabbaaaaabbaabaaaaaaabbababbbbbbbbbaabbbbbbbaabbbaaa
|
||||||
|
aaabbbabaaaabbbbbabaabbb
|
||||||
|
abbbaabababaabbaaababababbaababa
|
||||||
|
aabbbbabaabaaaababbaabbbaabaaababaaabbababababaabbbaaaabaaaabaaaabbabbbaabaabbabaababaabbbabaabb
|
||||||
|
aaabbbabbabbabbaaaabbabaabbbabbaabbaabab
|
||||||
|
bbabbbbbaabbbbabbaaaaaba
|
||||||
|
bbabaaabbbbbbaabaabbaaaa
|
||||||
|
abbbaabababbbaababbbbbba
|
||||||
|
babaabbaabbaaaaaabbbbbbb
|
||||||
|
abaaabaaaaabaabbaabbbaab
|
||||||
|
baabaaaaababaabaabaabbbbbbaabaaa
|
||||||
|
aabbbbbaaabbaabaaababbba
|
||||||
|
babaaabaaaaaabbabbbaaababbaabbba
|
||||||
|
aaaabbbababababbabaaabbbbbbbbabaababababaababaaa
|
||||||
|
ababbbbbbbbabaaaaaababaa
|
||||||
|
bbaaabbaabbaaabbabbbaaab
|
||||||
|
bbbbbaaababbbaabbabbaaba
|
||||||
|
aabbbbabababbabbbaaaaabbabaaaabbbbababbb
|
||||||
|
baaaaabbaabbbbbabbaabaaa
|
||||||
|
baababbabbabbbbaaaaaaaaa
|
||||||
|
bababaaabbaaaabaabbbaabaabbaaaab
|
||||||
|
aaaababaaabbbbabaaabaabaabbabbbbbbbbbbab
|
||||||
|
babaaabbaaaaaabbbbababaaabbbbbbbaabbabaabbababbabbbbaaabbaabbaaa
|
||||||
|
baabaaaabbbababbaaababab
|
||||||
|
bbaaabbabbbababbaabbabbb
|
||||||
|
aabababbbabaabaabbaabaaa
|
||||||
|
bbabaaabbababaaaababbaaabaabababbaaabaabbabbbbab
|
||||||
|
abbbbbabaaabbabaaaababba
|
||||||
|
baaabbabbabaaababaaababa
|
||||||
|
baaaabaaaabbabaababbbbab
|
||||||
|
babaabbabbbbabbaabaababb
|
||||||
|
abbbabaaabbbaababaababbabbbabbbb
|
||||||
|
bbaaabaababbaaabaabaabaaaaaaabbabbaaabbaaaababbbbababaabbbbbbbba
|
||||||
|
abaaabbbbabaababaaaaababbbbaabaa
|
||||||
|
abaabbabbaaababbaabbbaab
|
||||||
|
bbbabbbaaababbabbaabaabbbbbabbababaaaabbbaabaaabbbbaabbbbbbaababbabbbbba
|
||||||
|
ababbabaabaaaaaabbabbbab
|
||||||
|
ababbaaaabbaaabbbaabbbaabbbabbbabbbbababbaabaaab
|
||||||
|
abbbbabbbbaabbbaabaaaaaabaaaabaaabaabbaaabababbabaaaabbbaaabaaab
|
||||||
|
babbabbaaaaaabbabbaaaaababaababbbbabbbabaabbbbbbaaaaaaba
|
||||||
|
baabaaababbbbbaabbbaababaaaaaaab
|
||||||
|
bbbbbbaabaabbabaabaababb
|
||||||
|
bbbabaabbbbbbabaabbaabbaaabbaabababbbbaababbabaaabaabbba
|
||||||
|
baabbbabbabaaaababaaaabbabbbaabaabbaaaaaabbaabaaabaabaababababab
|
||||||
|
abbaaabaaababbbababbaaaabbbbaaabbbbbabbbabbbbbaaaaaaaabbbbaababbaaabbabbababbbabababbabb
|
||||||
|
aaaaaabbabbaaabbaaaababb
|
||||||
|
aaabbbababaabbbbbababbaabbaaaababaaabbbabbbbbbbbabaababa
|
||||||
|
bbbababbaababbaabaaaabbb
|
||||||
|
bbaaaabbbbabbbbbaabbaabb
|
||||||
|
aaaabbbaaaabbaaabaaabaab
|
||||||
|
aaabaabbababbabbabababba
|
||||||
|
aabbabaaabbababbbaaaaaaabbbbabababbbaabbbbbaaaaa
|
||||||
|
abaabbabbabbbabbbbababba
|
||||||
|
abbaaaaaaababbabaaaabbaabaaaabbaabababab
|
||||||
|
aaabbbbbabbabbabbbabaaababaababb
|
||||||
|
babbbaabbabbbaabaaaaabaabababbbbbababbbbabbbbabb
|
||||||
|
bbabbabbaaaaabababaabbababbababbaaaabbbbabbbabbbababbbba
|
||||||
|
baabaababaabbabaaaaabbbababbbbbbbbabbabbbbbbaabaaaaabaab
|
||||||
|
aababababaaababbbbababba
|
||||||
|
baabbaaaaabbbbababaababb
|
||||||
|
ababaaabbaabbaaaabbabbbb
|
||||||
|
aaaababaaaabbaaaaabbaaaa
|
||||||
|
baabbbaaabaaabbaabbbaaaaaaaaaaaa
|
||||||
|
babababbaaaaaabbbaaababbaaaabbbaabbbbbababbbbbaaaabaabab
|
||||||
|
babbbababbbbaaabaabbbabbbaaababbabbabaabbabaaabbabbaaabababbbabaababbbba
|
||||||
|
bbbabbababaaaaaababaaaabbabbabbaaaabbbba
|
||||||
|
bbabbaaaabaaaaaabbabababbbbbbabaabbabbbbaabaaaaabbaaaaab
|
||||||
|
babbbbbbabaaaabbabababab
|
||||||
|
baaababbbbbababbbabbabbb
|
||||||
|
aaaabbbbabaabbbbabbaabaa
|
||||||
|
bbbabbbabbbbaaabaaaabbaabbbbaaba
|
||||||
|
bbbabbaaaaaabbbaababaababbbabbbb
|
||||||
|
bababbaabbabbabbababaaababaabaaaabbaababbaaaaaaaaabbabbb
|
||||||
|
bbabaaabbaabaababbaaabab
|
||||||
|
aababbbbababaaabaabbbaaa
|
||||||
|
abbbabaabaaababbbbabaaabbbbbababababaaaaaaaababb
|
||||||
|
aaabbbbbbaabababbbbaabbb
|
||||||
|
aaabbbaabaababbbbbbaabba
|
||||||
|
baaabbbaabaaaaaabbbabbabaabaabbabaababaa
|
||||||
|
abbabbabaaabbbbbabbbbbba
|
||||||
|
bbbabbbabbbabaabbabbaaba
|
||||||
|
bbabbbbaabbaabbabbbabaabababbabbbabbabbb
|
||||||
|
bbbababbaabbbbabbaabbbabbbaaaaabaabaabab
|
||||||
|
aaaaababaabaaabbbbbabbbbbbabaaab
|
@ -2,7 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||||
@ -16,10 +16,6 @@ func main() {
|
|||||||
solve(inp, h.Atoi(part))
|
solve(inp, h.Atoi(part))
|
||||||
}
|
}
|
||||||
|
|
||||||
var loopingTokens []int
|
|
||||||
var allTokens map[int]*Token
|
|
||||||
var totalRules int
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
8: 42 | 42 8
|
8: 42 | 42 8
|
||||||
11: 42 31 | 42 11 31
|
11: 42 31 | 42 11 31
|
||||||
@ -32,7 +28,6 @@ affect things as they repeat
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
func solve(inp []string, part int) {
|
func solve(inp []string, part int) {
|
||||||
allTokens = make(map[int]*Token)
|
|
||||||
var section int
|
var section int
|
||||||
var rules []string
|
var rules []string
|
||||||
var messages []string
|
var messages []string
|
||||||
@ -48,241 +43,130 @@ func solve(inp []string, part int) {
|
|||||||
messages = append(messages, v)
|
messages = append(messages, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
totalRules = len(rules)
|
if part == 1 {
|
||||||
last := -1
|
solveOne(rules, messages)
|
||||||
for RulesSolved() < totalRules && last != RulesSolved() {
|
|
||||||
last = RulesSolved()
|
|
||||||
for _, v := range rules {
|
|
||||||
fmt.Println("Restarting Rules Parsing")
|
|
||||||
pts := strings.Split(v, ": ")
|
|
||||||
num := h.Atoi(pts[0])
|
|
||||||
if part == 2 {
|
|
||||||
if num == 8 {
|
|
||||||
pts[1] = "42 | 42 8"
|
|
||||||
} else if num == 11 {
|
|
||||||
pts[1] = "42 31 | 42 11 31"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if _, ok := allTokens[num]; !ok {
|
|
||||||
GenerateToken(num, pts[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if RulesSolved() < totalRules {
|
|
||||||
fmt.Println("Unable to solve all rules")
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
fmt.Println("Calculating Answer")
|
|
||||||
var matches int
|
|
||||||
for _, v := range messages {
|
|
||||||
if allTokens[0].Matches(v) {
|
|
||||||
matches++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Printf("## Part 1\nAnswer: %d\n", matches)
|
|
||||||
}
|
|
||||||
|
|
||||||
// RulesSolved TODO
|
|
||||||
func RulesSolved() int {
|
|
||||||
var ret int
|
|
||||||
for k := range allTokens {
|
|
||||||
if k >= 0 {
|
|
||||||
ret++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
// Token Kinds
|
|
||||||
const (
|
|
||||||
LEAF = iota
|
|
||||||
STICK
|
|
||||||
BRANCH
|
|
||||||
)
|
|
||||||
|
|
||||||
// Token TODO
|
|
||||||
type Token struct {
|
|
||||||
kind int
|
|
||||||
num int
|
|
||||||
value string
|
|
||||||
raw string
|
|
||||||
|
|
||||||
PartNums []int
|
|
||||||
Parts []*Token
|
|
||||||
|
|
||||||
CachedValues []string
|
|
||||||
Loops bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// GenerateToken TODO
|
|
||||||
func GenerateToken(num int, raw string) *Token {
|
|
||||||
if v, ok := allTokens[num]; ok {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
t := Token{num: num, raw: raw}
|
|
||||||
if raw[0] == '"' {
|
|
||||||
t.value = strings.ReplaceAll(raw, "\"", "")
|
|
||||||
t.kind = LEAF
|
|
||||||
} else {
|
} else {
|
||||||
if !strings.Contains(raw, "|") {
|
solveTwo(rules, messages)
|
||||||
t.kind = STICK
|
}
|
||||||
var partTokens []*Token
|
}
|
||||||
pts := strings.Split(raw, " ")
|
|
||||||
for k := range pts {
|
func solveOne(rules, messages []string) {
|
||||||
if pts[k] == "|" {
|
reg := regexp.MustCompile(rulesToRegex(rules))
|
||||||
continue
|
var answer int
|
||||||
}
|
for _, msg := range messages {
|
||||||
t.PartNums = append(t.PartNums, h.Atoi(pts[k]))
|
if reg.MatchString(msg) {
|
||||||
|
answer++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Printf("## Part 1\nAnswer: %d\n", answer)
|
||||||
|
}
|
||||||
|
|
||||||
|
func solveTwo(rules, messages []string) {
|
||||||
|
// Figure out how many levels deep we have to go to stabilize
|
||||||
|
var answer int
|
||||||
|
var last []int
|
||||||
|
for i := 0; i < 1000; i++ {
|
||||||
|
answer = 0
|
||||||
|
rules = unwrapLoops(rules, i)
|
||||||
|
reg := regexp.MustCompile(rulesToRegex(rules))
|
||||||
|
for _, msg := range messages {
|
||||||
|
if reg.MatchString(msg) {
|
||||||
|
answer++
|
||||||
}
|
}
|
||||||
solved := true
|
}
|
||||||
for k := range t.PartNums {
|
if isStable(last, 10) {
|
||||||
if v, ok := allTokens[t.PartNums[k]]; ok || h.IntSliceContains(loopingTokens, t.PartNums[k]) {
|
break
|
||||||
partTokens = append(partTokens, v)
|
}
|
||||||
} else {
|
last = append(last, answer)
|
||||||
solved = false
|
}
|
||||||
break
|
fmt.Printf("## Part 2\nAnswer: %d\n", answer)
|
||||||
|
}
|
||||||
|
|
||||||
|
func isStable(history []int, confidence int) bool {
|
||||||
|
if len(history) < confidence {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
last := h.MAX_INT
|
||||||
|
for k := len(history) - 1; k > len(history)-confidence; k-- {
|
||||||
|
if last == h.MAX_INT {
|
||||||
|
last = history[k]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if history[k] != last {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func unwrapLoops(rules []string, depth int) []string {
|
||||||
|
for i := range rules {
|
||||||
|
wrk := rules[i]
|
||||||
|
if strings.HasPrefix(wrk, "8:") {
|
||||||
|
wrk = "8: 42 +"
|
||||||
|
} else if strings.HasPrefix(wrk, "11:") {
|
||||||
|
rule := "42 31"
|
||||||
|
for k := 2; k < depth; k++ {
|
||||||
|
rule += " | "
|
||||||
|
for j := 0; j < k; j++ {
|
||||||
|
rule += " 42 "
|
||||||
|
}
|
||||||
|
for j := 0; j < k; j++ {
|
||||||
|
rule += " 31 "
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if solved {
|
wrk = "11: " + rule
|
||||||
t.Parts = partTokens
|
}
|
||||||
|
rules[i] = wrk
|
||||||
|
}
|
||||||
|
return rules
|
||||||
|
}
|
||||||
|
|
||||||
|
func rulesToRegex(rules []string) string {
|
||||||
|
cache := make(map[int]string)
|
||||||
|
for {
|
||||||
|
if _, ok := cache[0]; ok {
|
||||||
|
// We've cached 0, so we're all done
|
||||||
|
break
|
||||||
|
}
|
||||||
|
loop:
|
||||||
|
for _, rule := range rules {
|
||||||
|
tokens := strings.Fields(rule)
|
||||||
|
var num int
|
||||||
|
fmt.Sscanf(tokens[0], "%d:", &num)
|
||||||
|
if _, ok := cache[num]; ok {
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
} else {
|
tokens = tokens[1:]
|
||||||
t.kind = BRANCH
|
// A 'leaf'
|
||||||
pts := strings.Split(raw, " ")
|
if len(tokens) == 1 && tokens[0][0] == '"' {
|
||||||
for k := range pts {
|
cache[num] = string(tokens[0][1])
|
||||||
if pts[k] == "|" {
|
continue
|
||||||
continue
|
}
|
||||||
}
|
// All other rules
|
||||||
n := h.Atoi(pts[k])
|
ruleReg := "(?:"
|
||||||
if n == num {
|
for _, tkn := range tokens {
|
||||||
if !h.IntSliceContains(loopingTokens, t.num) {
|
c := tkn[0]
|
||||||
fmt.Println(num, "IS A LOOPING TOKEN")
|
switch {
|
||||||
loopingTokens = append(loopingTokens, t.num)
|
case '0' <= c && c <= '9':
|
||||||
t.Loops = true
|
tknN := h.Atoi(tkn)
|
||||||
|
subRuleReg, ok := cache[tknN]
|
||||||
|
if !ok {
|
||||||
|
continue loop
|
||||||
}
|
}
|
||||||
|
ruleReg += subRuleReg
|
||||||
|
case c == '|':
|
||||||
|
ruleReg += "|"
|
||||||
|
case c == '+':
|
||||||
|
ruleReg += "+"
|
||||||
|
default:
|
||||||
|
panic("Error building RegEx:" + tkn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
branches := strings.Split(raw, " | ")
|
ruleReg += ")"
|
||||||
var partTokens []*Token
|
cache[num] = ruleReg
|
||||||
for k, branch := range branches {
|
|
||||||
branchID := -(num*1000 + k)
|
|
||||||
t.PartNums = append(t.PartNums, branchID)
|
|
||||||
p := GenerateToken(branchID, branch)
|
|
||||||
if p.Solved() {
|
|
||||||
allTokens[branchID] = p
|
|
||||||
partTokens = append(partTokens, p)
|
|
||||||
} else {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
solved := true
|
|
||||||
for _, bid := range t.PartNums {
|
|
||||||
if _, ok := allTokens[bid]; !ok {
|
|
||||||
solved = false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if solved {
|
|
||||||
t.Parts = partTokens
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if t.Solved() {
|
// We should be done now, we just want an exact match on rule 0
|
||||||
allTokens[num] = &t
|
return "^" + cache[0] + "$"
|
||||||
} else {
|
|
||||||
fmt.Println("> Couldn't Solve", num)
|
|
||||||
}
|
|
||||||
return &t
|
|
||||||
}
|
|
||||||
|
|
||||||
// Solved TODO
|
|
||||||
func (t *Token) Solved() bool {
|
|
||||||
return len(t.Values()) > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Values TODO
|
|
||||||
func (t *Token) Values() []string {
|
|
||||||
switch t.kind {
|
|
||||||
case LEAF:
|
|
||||||
return t.LeafValue()
|
|
||||||
case STICK:
|
|
||||||
return t.StickValue()
|
|
||||||
case BRANCH:
|
|
||||||
return t.BranchValue()
|
|
||||||
default:
|
|
||||||
return []string{}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// LeafValue TODO
|
|
||||||
func (t *Token) LeafValue() []string {
|
|
||||||
return []string{t.value}
|
|
||||||
}
|
|
||||||
|
|
||||||
// StickValue TODO
|
|
||||||
func (t *Token) StickValue() []string {
|
|
||||||
if len(t.Parts) < len(t.PartNums) {
|
|
||||||
return []string{}
|
|
||||||
}
|
|
||||||
if len(t.CachedValues) > 0 {
|
|
||||||
return t.CachedValues
|
|
||||||
}
|
|
||||||
var ret []string
|
|
||||||
for k := range t.Parts {
|
|
||||||
if len(ret) == 0 {
|
|
||||||
ret = t.Parts[k].Values()
|
|
||||||
} else {
|
|
||||||
var newRet []string
|
|
||||||
for rk := range ret {
|
|
||||||
newRet = append(newRet, h.AppendStrings(ret[rk], t.Parts[k].Values())...)
|
|
||||||
}
|
|
||||||
ret = newRet
|
|
||||||
}
|
|
||||||
}
|
|
||||||
t.CachedValues = ret
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
// BranchValue TODO
|
|
||||||
func (t *Token) BranchValue() []string {
|
|
||||||
if len(t.Parts) < len(t.PartNums) {
|
|
||||||
return []string{}
|
|
||||||
}
|
|
||||||
if len(t.CachedValues) > 0 {
|
|
||||||
return t.CachedValues
|
|
||||||
}
|
|
||||||
var ret []string
|
|
||||||
for k := range t.Parts {
|
|
||||||
ret = append(ret, t.Parts[k].Values()...)
|
|
||||||
}
|
|
||||||
t.CachedValues = ret
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
// Matches actually tests a message against this token
|
|
||||||
func (t *Token) Matches(msg string) bool {
|
|
||||||
for _, v := range t.Values() {
|
|
||||||
if msg == v {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t Token) String() string {
|
|
||||||
return fmt.Sprintf("{num:%d, kind:%s, partNums:%v, value:%v}", t.num, KindToString(t.kind), t.PartNums, t.Values())
|
|
||||||
}
|
|
||||||
|
|
||||||
// KindToString TODO
|
|
||||||
func KindToString(kind int) string {
|
|
||||||
switch kind {
|
|
||||||
case LEAF:
|
|
||||||
return "LEAF"
|
|
||||||
case STICK:
|
|
||||||
return "STICK"
|
|
||||||
case BRANCH:
|
|
||||||
return "BRANCH"
|
|
||||||
default:
|
|
||||||
return "UNKNOWN"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
47
2020/day19/testinput
Normal file
47
2020/day19/testinput
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
42: 9 14 | 10 1
|
||||||
|
9: 14 27 | 1 26
|
||||||
|
10: 23 14 | 28 1
|
||||||
|
1: "a"
|
||||||
|
11: 42 31
|
||||||
|
5: 1 14 | 15 1
|
||||||
|
19: 14 1 | 14 14
|
||||||
|
12: 24 14 | 19 1
|
||||||
|
16: 15 1 | 14 14
|
||||||
|
31: 14 17 | 1 13
|
||||||
|
6: 14 14 | 1 14
|
||||||
|
2: 1 24 | 14 4
|
||||||
|
0: 8 11
|
||||||
|
13: 14 3 | 1 12
|
||||||
|
15: 1 | 14
|
||||||
|
17: 14 2 | 1 7
|
||||||
|
23: 25 1 | 22 14
|
||||||
|
28: 16 1
|
||||||
|
4: 1 1
|
||||||
|
20: 14 14 | 1 15
|
||||||
|
3: 5 14 | 16 1
|
||||||
|
27: 1 6 | 14 18
|
||||||
|
14: "b"
|
||||||
|
21: 14 1 | 1 14
|
||||||
|
25: 1 1 | 1 14
|
||||||
|
22: 14 14
|
||||||
|
8: 42
|
||||||
|
26: 14 22 | 1 20
|
||||||
|
18: 15 15
|
||||||
|
7: 14 5 | 1 21
|
||||||
|
24: 14 1
|
||||||
|
|
||||||
|
abbbbbabbbaaaababbaabbbbabababbbabbbbbbabaaaa
|
||||||
|
bbabbbbaabaabba
|
||||||
|
babbbbaabbbbbabbbbbbaabaaabaaa
|
||||||
|
aaabbbbbbaaaabaababaabababbabaaabbababababaaa
|
||||||
|
bbbbbbbaaaabbbbaaabbabaaa
|
||||||
|
bbbababbbbaaaaaaaabbababaaababaabab
|
||||||
|
ababaaaaaabaaab
|
||||||
|
ababaaaaabbbaba
|
||||||
|
baabbaaaabbaaaababbaababb
|
||||||
|
abbbbabbbbaaaababbbbbbaaaababb
|
||||||
|
aaaaabbaabaaaaababaa
|
||||||
|
aaaabbaaaabbaaa
|
||||||
|
aaaabbaabbaaaaaaabbbabbbaaabbaabaaa
|
||||||
|
babaaabbbaaabaababbaabababaaab
|
||||||
|
aabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba
|
1728
2020/day20/input
Normal file
1728
2020/day20/input
Normal file
File diff suppressed because it is too large
Load Diff
@ -26,7 +26,9 @@ func init() {
|
|||||||
}
|
}
|
||||||
for y := range monster {
|
for y := range monster {
|
||||||
for x := range monster[y] {
|
for x := range monster[y] {
|
||||||
SeaMonster[h.Coordinate{X: x, Y: y}] = monster[y][x] == '#'
|
if monster[y][x] == '#' {
|
||||||
|
SeaMonster[h.Coordinate{X: x, Y: y}] = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,12 +60,8 @@ func solve(inp []string, part int) {
|
|||||||
for x := range image[y] {
|
for x := range image[y] {
|
||||||
if image[y][x] {
|
if image[y][x] {
|
||||||
waves++
|
waves++
|
||||||
fmt.Print("#")
|
|
||||||
} else {
|
|
||||||
fmt.Print(" ")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Println()
|
|
||||||
}
|
}
|
||||||
fmt.Println("## Part2\nAnswer:", waves)
|
fmt.Println("## Part2\nAnswer:", waves)
|
||||||
}
|
}
|
||||||
@ -200,11 +198,6 @@ func buildMapFromTiles(tiles map[int]*Tile) [][]bool {
|
|||||||
func monsterSlayer(inp [][]bool) [][]bool {
|
func monsterSlayer(inp [][]bool) [][]bool {
|
||||||
var found bool
|
var found bool
|
||||||
for r := 0; r < 8; r++ {
|
for r := 0; r < 8; r++ {
|
||||||
if r == 6 {
|
|
||||||
// This is the correct orientation
|
|
||||||
fmt.Println("Rotation:", r)
|
|
||||||
PrintMap(inp)
|
|
||||||
}
|
|
||||||
for y := range inp {
|
for y := range inp {
|
||||||
for x := range inp[y] {
|
for x := range inp[y] {
|
||||||
match := true
|
match := true
|
||||||
@ -232,7 +225,6 @@ func monsterSlayer(inp [][]bool) [][]bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if found {
|
if found {
|
||||||
fmt.Println("Found, breaking")
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if r&1 == 0 {
|
if r&1 == 0 {
|
||||||
@ -284,3 +276,39 @@ func PrintMap(inp [][]bool) {
|
|||||||
fmt.Println()
|
fmt.Println()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PrintCoordMap(m map[h.Coordinate]bool) {
|
||||||
|
minX := h.MAX_INT
|
||||||
|
maxX := h.MIN_INT
|
||||||
|
minY := h.MAX_INT
|
||||||
|
maxY := h.MIN_INT
|
||||||
|
|
||||||
|
for k := range m {
|
||||||
|
if k.X < minX {
|
||||||
|
minX = k.X
|
||||||
|
}
|
||||||
|
if k.X > maxX {
|
||||||
|
maxX = k.X
|
||||||
|
}
|
||||||
|
if k.Y < minY {
|
||||||
|
minY = k.Y
|
||||||
|
}
|
||||||
|
if k.Y > maxY {
|
||||||
|
maxY = k.Y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for y := minY; y <= maxY; y++ {
|
||||||
|
for x := minX; x <= maxX; x++ {
|
||||||
|
if v, ok := m[h.Coordinate{X: x, Y: y}]; ok {
|
||||||
|
if v {
|
||||||
|
fmt.Print("#")
|
||||||
|
} else {
|
||||||
|
fmt.Print(".")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fmt.Print(".")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
107
2020/day20/testinput
Normal file
107
2020/day20/testinput
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
Tile 2311:
|
||||||
|
..##.#..#.
|
||||||
|
##..#.....
|
||||||
|
#...##..#.
|
||||||
|
####.#...#
|
||||||
|
##.##.###.
|
||||||
|
##...#.###
|
||||||
|
.#.#.#..##
|
||||||
|
..#....#..
|
||||||
|
###...#.#.
|
||||||
|
..###..###
|
||||||
|
|
||||||
|
Tile 1951:
|
||||||
|
#.##...##.
|
||||||
|
#.####...#
|
||||||
|
.....#..##
|
||||||
|
#...######
|
||||||
|
.##.#....#
|
||||||
|
.###.#####
|
||||||
|
###.##.##.
|
||||||
|
.###....#.
|
||||||
|
..#.#..#.#
|
||||||
|
#...##.#..
|
||||||
|
|
||||||
|
Tile 1171:
|
||||||
|
####...##.
|
||||||
|
#..##.#..#
|
||||||
|
##.#..#.#.
|
||||||
|
.###.####.
|
||||||
|
..###.####
|
||||||
|
.##....##.
|
||||||
|
.#...####.
|
||||||
|
#.##.####.
|
||||||
|
####..#...
|
||||||
|
.....##...
|
||||||
|
|
||||||
|
Tile 1427:
|
||||||
|
###.##.#..
|
||||||
|
.#..#.##..
|
||||||
|
.#.##.#..#
|
||||||
|
#.#.#.##.#
|
||||||
|
....#...##
|
||||||
|
...##..##.
|
||||||
|
...#.#####
|
||||||
|
.#.####.#.
|
||||||
|
..#..###.#
|
||||||
|
..##.#..#.
|
||||||
|
|
||||||
|
Tile 1489:
|
||||||
|
##.#.#....
|
||||||
|
..##...#..
|
||||||
|
.##..##...
|
||||||
|
..#...#...
|
||||||
|
#####...#.
|
||||||
|
#..#.#.#.#
|
||||||
|
...#.#.#..
|
||||||
|
##.#...##.
|
||||||
|
..##.##.##
|
||||||
|
###.##.#..
|
||||||
|
|
||||||
|
Tile 2473:
|
||||||
|
#....####.
|
||||||
|
#..#.##...
|
||||||
|
#.##..#...
|
||||||
|
######.#.#
|
||||||
|
.#...#.#.#
|
||||||
|
.#########
|
||||||
|
.###.#..#.
|
||||||
|
########.#
|
||||||
|
##...##.#.
|
||||||
|
..###.#.#.
|
||||||
|
|
||||||
|
Tile 2971:
|
||||||
|
..#.#....#
|
||||||
|
#...###...
|
||||||
|
#.#.###...
|
||||||
|
##.##..#..
|
||||||
|
.#####..##
|
||||||
|
.#..####.#
|
||||||
|
#..#.#..#.
|
||||||
|
..####.###
|
||||||
|
..#.#.###.
|
||||||
|
...#.#.#.#
|
||||||
|
|
||||||
|
Tile 2729:
|
||||||
|
...#.#.#.#
|
||||||
|
####.#....
|
||||||
|
..#.#.....
|
||||||
|
....#..#.#
|
||||||
|
.##..##.#.
|
||||||
|
.#.####...
|
||||||
|
####.#.#..
|
||||||
|
##.####...
|
||||||
|
##..#.##..
|
||||||
|
#.##...##.
|
||||||
|
|
||||||
|
Tile 3079:
|
||||||
|
#.#.#####.
|
||||||
|
.#..######
|
||||||
|
..#.......
|
||||||
|
######....
|
||||||
|
####.#..#.
|
||||||
|
.#...#.##.
|
||||||
|
#.#####.##
|
||||||
|
..#.###...
|
||||||
|
..#.......
|
||||||
|
..#.###...
|
@ -14,6 +14,10 @@ func NewCoordinate(x, y int) *Coordinate {
|
|||||||
return &Coordinate{x, y}
|
return &Coordinate{x, y}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c Coordinate) Relative(t Coordinate) Coordinate {
|
||||||
|
return Coordinate{X: c.X + t.X, Y: c.Y + t.Y}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Coordinate) North() Coordinate {
|
func (c *Coordinate) North() Coordinate {
|
||||||
return Coordinate{X: c.X, Y: c.Y - 1}
|
return Coordinate{X: c.X, Y: c.Y - 1}
|
||||||
}
|
}
|
||||||
|
@ -263,6 +263,25 @@ func StringSliceContains(h []string, n string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IntSliceContains takes an int slice and an int and return true
|
||||||
|
// if the int is in the slice
|
||||||
|
func IntSliceContains(h []int, n int) bool {
|
||||||
|
for _, v := range h {
|
||||||
|
if v == n {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// AppendString returns a slice of strings that are base+group[...]
|
||||||
|
func AppendStrings(base string, group []string) []string {
|
||||||
|
for k, v := range group {
|
||||||
|
group[k] = base + v
|
||||||
|
}
|
||||||
|
return group
|
||||||
|
}
|
||||||
|
|
||||||
// IsPrime takes a number and return true if that number is prime
|
// IsPrime takes a number and return true if that number is prime
|
||||||
func IsPrime(value int) bool {
|
func IsPrime(value int) bool {
|
||||||
for i := 2; i <= int(math.Floor(float64(value)/2)); i++ {
|
for i := 2; i <= int(math.Floor(float64(value)/2)); i++ {
|
||||||
|
Loading…
Reference in New Issue
Block a user