Solution for Day 19
This commit is contained in:
parent
0351f2e4eb
commit
209cceef1e
38
day_19/first.rb
Normal file
38
day_19/first.rb
Normal file
@ -0,0 +1,38 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
input = File.read('./input').split("\n\n").map { |r| r.split("\n") }
|
||||
|
||||
$mem = {}
|
||||
$lines = input[1]
|
||||
|
||||
$rules = input.first.map do |i|
|
||||
k, v = i.match(/(\d+): (.*)/).captures
|
||||
[k, v.split('|').map do |x|
|
||||
x.split(' ').reject(&:empty?).compact.map do |y|
|
||||
y.gsub('"', '')
|
||||
end
|
||||
end]
|
||||
end.sort_by(&:first).to_h
|
||||
|
||||
def rules(key)
|
||||
$mem[key] ||= begin
|
||||
either_or = $rules[key]
|
||||
|
||||
return key unless either_or
|
||||
|
||||
pair = either_or.map do |group|
|
||||
group.map do |sub_rule|
|
||||
rules(sub_rule)
|
||||
end.join('')
|
||||
end.join('|')
|
||||
if pair.include?('|')
|
||||
'(' + pair + ')'
|
||||
else
|
||||
pair
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
re = Regexp.new('^' + rules('0') + '$')
|
||||
|
||||
puts $lines.select { |line| re.match(line) }.size
|
530
day_19/input
Normal file
530
day_19/input
Normal file
@ -0,0 +1,530 @@
|
||||
70: 90 92 | 53 50
|
||||
99: 90 102 | 53 22
|
||||
24: 130 90
|
||||
125: 85 53 | 100 90
|
||||
61: 53 58 | 90 26
|
||||
88: 33 53 | 46 90
|
||||
32: 65 90 | 90 53
|
||||
48: 46 53
|
||||
116: 53 50 | 90 18
|
||||
40: 53 83 | 90 81
|
||||
54: 46 53 | 5 90
|
||||
36: 50 90 | 130 53
|
||||
58: 92 90 | 130 53
|
||||
2: 19 53 | 75 90
|
||||
95: 53 46 | 90 19
|
||||
124: 46 53 | 33 90
|
||||
79: 91 53 | 7 90
|
||||
46: 90 90 | 53 90
|
||||
87: 9 90 | 84 53
|
||||
122: 90 46 | 53 33
|
||||
15: 89 90 | 79 53
|
||||
41: 90 4 | 53 119
|
||||
7: 53 128 | 90 128
|
||||
93: 53 120 | 90 37
|
||||
121: 15 53 | 103 90
|
||||
91: 90 33 | 53 110
|
||||
5: 53 90 | 65 53
|
||||
26: 53 19 | 90 107
|
||||
44: 53 75 | 90 32
|
||||
23: 107 53 | 50 90
|
||||
33: 90 53 | 90 90
|
||||
75: 53 53 | 90 90
|
||||
18: 65 65
|
||||
59: 53 107 | 90 32
|
||||
104: 90 33 | 53 46
|
||||
20: 121 90 | 123 53
|
||||
100: 90 75 | 53 46
|
||||
131: 18 90 | 46 53
|
||||
9: 90 67 | 53 105
|
||||
37: 53 75 | 90 128
|
||||
3: 53 29 | 90 22
|
||||
120: 53 92 | 90 33
|
||||
35: 55 53 | 30 90
|
||||
115: 65 107
|
||||
106: 90 46 | 53 19
|
||||
89: 90 59 | 53 68
|
||||
83: 90 46 | 53 130
|
||||
25: 90 87 | 53 41
|
||||
11: 42 31
|
||||
84: 53 117 | 90 34
|
||||
8: 42
|
||||
53: "a"
|
||||
86: 53 6 | 90 12
|
||||
76: 53 78 | 90 97
|
||||
52: 126 90 | 115 53
|
||||
31: 53 35 | 90 20
|
||||
112: 110 90 | 32 53
|
||||
82: 101 90 | 127 53
|
||||
119: 53 27 | 90 93
|
||||
117: 90 81 | 53 23
|
||||
57: 82 53 | 43 90
|
||||
105: 90 126 | 53 21
|
||||
111: 53 32 | 90 110
|
||||
68: 53 18 | 90 46
|
||||
73: 71 90 | 24 53
|
||||
49: 77 90 | 48 53
|
||||
81: 90 50 | 53 75
|
||||
102: 32 53 | 128 90
|
||||
12: 92 53 | 19 90
|
||||
60: 62 90 | 108 53
|
||||
101: 53 104 | 90 62
|
||||
65: 53 | 90
|
||||
50: 53 90
|
||||
97: 53 56 | 90 64
|
||||
63: 99 90 | 39 53
|
||||
43: 90 125 | 53 60
|
||||
66: 130 90 | 33 53
|
||||
27: 53 2 | 90 14
|
||||
4: 3 90 | 74 53
|
||||
118: 53 76 | 90 57
|
||||
113: 86 53 | 13 90
|
||||
56: 90 28 | 53 54
|
||||
38: 36 90 | 69 53
|
||||
39: 10 53 | 23 90
|
||||
14: 90 50 | 53 18
|
||||
45: 53 72 | 90 40
|
||||
21: 130 90 | 107 53
|
||||
30: 90 113 | 53 1
|
||||
19: 53 53 | 90 53
|
||||
130: 53 53
|
||||
110: 53 65 | 90 90
|
||||
0: 8 11
|
||||
77: 53 110 | 90 92
|
||||
62: 53 33 | 90 19
|
||||
126: 50 90
|
||||
29: 75 53 | 5 90
|
||||
129: 98 53 | 47 90
|
||||
47: 53 94 | 90 95
|
||||
71: 107 53
|
||||
92: 53 53 | 90 65
|
||||
127: 22 53 | 109 90
|
||||
6: 92 53 | 32 90
|
||||
51: 26 90 | 66 53
|
||||
107: 90 53 | 53 90
|
||||
72: 90 124 | 53 104
|
||||
1: 53 96 | 90 52
|
||||
103: 53 73 | 90 61
|
||||
74: 2 90 | 131 53
|
||||
64: 90 7 | 53 122
|
||||
67: 53 70 | 90 104
|
||||
42: 53 25 | 90 118
|
||||
123: 63 90 | 80 53
|
||||
17: 46 53 | 130 90
|
||||
10: 19 90 | 33 53
|
||||
13: 53 112 | 90 17
|
||||
28: 90 128 | 53 110
|
||||
114: 53 5 | 90 50
|
||||
78: 49 90 | 51 53
|
||||
16: 111 53 | 14 90
|
||||
90: "b"
|
||||
85: 130 90 | 50 53
|
||||
80: 38 53 | 16 90
|
||||
69: 110 53 | 107 90
|
||||
98: 53 44 | 90 88
|
||||
94: 5 53 | 46 90
|
||||
108: 18 53 | 75 90
|
||||
55: 90 129 | 53 45
|
||||
128: 90 90
|
||||
34: 106 90 | 114 53
|
||||
109: 90 110 | 53 50
|
||||
96: 36 90 | 116 53
|
||||
22: 75 53 | 18 90
|
||||
|
||||
aaaaaaaabbbbaabaabbbaaba
|
||||
aaaaaaaaabbaaabbbaabaaaaabbaaabaaabbbbbb
|
||||
babaabaaabaaabbbaaaabbba
|
||||
baaaabbbabbabbbbabaababa
|
||||
aaaaabaabbbabbbabaaabababaabaabbbaaaabba
|
||||
babababbbaababbabaaaaaab
|
||||
bbabbbabbabaaabaaaaaaaba
|
||||
bbaabbaaaababbabbbabbbbb
|
||||
babbbbbbbbbababaaaabbbab
|
||||
abbbbbbaaaabbaaaaabbaaababbbbbababbaaaab
|
||||
aabbaabaaabaabaababbbaaa
|
||||
baaabaabaaabaabbbbaaaaba
|
||||
aabababbaabaaaabbaaaabaaabbbbbaa
|
||||
bbbbbababbaabaaabaababbababbaabababbababbaabbabaaaabbbba
|
||||
bbbaabbbaababbaaaaaaaabb
|
||||
aaababbbbbaaababababaabb
|
||||
bbabaabbababbbaabbababaa
|
||||
baaabababbbbbaaababbabab
|
||||
aaaababaaabbaababbaaaabb
|
||||
ababbabaaabaaaabbbbaaaba
|
||||
bbaaababbbbababbabbaabba
|
||||
babbbbbbbbbababababbaaab
|
||||
babaabbbbababaababbaabaabbabaabb
|
||||
baaaaabaaaaaabaabbaaabaa
|
||||
aabbabaaabaaabababbbbaab
|
||||
bababaabaabbaabbababaaab
|
||||
babaababbbbbbabababbbaaa
|
||||
babaaabbaababaaaaaaabbbb
|
||||
bbbbbabbbbaabaaabbaabbaabaabbaabaababbaa
|
||||
bbababaaaaaaaababbbaabbabbbaabbabbabbaabaaaaaaaaabbbabbbbaabbaababaaaaabaabbaaaa
|
||||
abaaabababaaabaabbbaaaaa
|
||||
baabbbbbabbbabbbbbaababbaababaaabbbbaaaa
|
||||
abbbabbbabbbaabbbaaaabab
|
||||
babbabbbabbbbabbaaabbaaabbababbabbbbbbaababaabbb
|
||||
babaabaaabbaabaaaaabbbbbabaabaaaabbbbaaaaaaababbabbaabbbaaabaaaababaaaba
|
||||
aabbababbaaaaaaabbbbababbaabbbbaaababbbbaaaabbabbabbbbaaaabbababbbbbabba
|
||||
bbaaabbaabaabaaabbaaaabb
|
||||
bbaabaaaabbabbababbbbbabbaaaaaababbaabbb
|
||||
baaababaabbbabaabbaaaaabaaababab
|
||||
abababbabbaabaabbaaabbaa
|
||||
bbbbabbaababaaaabbbbaaaababbabbbabbbbbabbbaaabbabbbbbbbabbbaabababaabbbb
|
||||
bbabaaaaaaababbababbabaaaaaaabaabbbbbaaabababbaaaaaaaabbbbabaabaaaaaabbbbababaabaabbaababbaaabab
|
||||
babaaaabbaaabababbaaabbbbaaaaaaa
|
||||
babbbabbbaabbababbbaaabb
|
||||
abbbabaaabbabbbbbbabababaaaaabba
|
||||
baaaaaaaaababaaaabbbbbaabbaaaaba
|
||||
bbbabbbababbaababaabbabaaabbbabbabaaaababbbaaaab
|
||||
bbbaabaaabbaaaaabbabaaaa
|
||||
abababbabaababbaaabaabaaaaababbbbaaabbaabbbababbababaaba
|
||||
bbbaabbbbbbbbbaababbaabababbaabaabbbbaba
|
||||
babbaaaaaabaaabaabaabaabbbaaaababaaaaabaabbbaaaabbbabaabbabbbaabbbabaaab
|
||||
bbabbbbaababaabbababbbbaaaaabaabbaababbbabaabaaaaababaaabbabbbba
|
||||
abbabaaaaabbbbbabbaaabbb
|
||||
aababaaaaaaabaaabbababbb
|
||||
babbbbbbbbbababaaaabaaab
|
||||
bbbabaabababaaaabaaaabba
|
||||
aaababbbbabbaabbbabbbabbbbababaa
|
||||
abbbbaaaabaaaabaabaaaaba
|
||||
bbabaabbbaabbabbaaaababbbbbaabbaabaaaaaabbabbbbaababaaba
|
||||
abaaababaaaaaaabbbabbbbaabbababbbbbaababbbbbabbaabbbbbababbabbbb
|
||||
bababaababbaaaaaaabbabab
|
||||
baaabbaabbaabaaababbababbbabbbabbbbbbaab
|
||||
baaaaababaababbaaaababab
|
||||
abbaabaabbbabbaaaaabaaab
|
||||
abbbabbaabbaaaaabbbbaaaabaababbabaabbbaa
|
||||
bbaabbbbbaabbaaaabaabaaaababbaaa
|
||||
aaabaaaaabbabbabaaababaa
|
||||
aabaabbaaabbbbbaabbbbbbaabaabbba
|
||||
aababbaababbbabbabbbabab
|
||||
bbabbaaaaabbbbbaaabababa
|
||||
aaabbbbbabbbbbaababaabba
|
||||
aaaaaaaabbabaaabbbabbbaa
|
||||
bbbabaaaaaabaaaaaaababaa
|
||||
aabbbabbbabbabababbbabbbbbbbabba
|
||||
baababbababbaabaabbbbaba
|
||||
abbbaabbbabbbabbabbabbaa
|
||||
aabbaabbabbbbbbabaabbabbabbbbbbbaaabbbbbaaaabbba
|
||||
bababaabaabaaabaaaabbbaa
|
||||
bbbabaabbaaababababbbbba
|
||||
abbbaabbbbbaaaabbabbbbabababbabb
|
||||
baabaaaabbababbbabbaabbabaaaabab
|
||||
babaabbabbaabbbabbaabbababbbbabb
|
||||
aaaaabbbaaabbbbbabbabbbbbbbabaabbbabbbababaaaaaa
|
||||
babaaaabbababbaaababaababaaaabba
|
||||
bababaabbbbabababbabaaba
|
||||
aaabbbbbaabababbababbabb
|
||||
bbbaabbbbabbbbbbaabaabab
|
||||
baababbabbbbbabaabaabbbb
|
||||
abbbabaabbbbaabaababbbaa
|
||||
aababaaaaabaaabaaaaaaaba
|
||||
abbbbaaaababaaabbaaaaaaababbaaaababbbaabbaabbbbbaabbababbaaabbbb
|
||||
bbbbbbaabbbababaabaaaababbbbbaabaabbaaaabbbbaaababababaa
|
||||
bbbaabbaaaabaaababbabbaaaabbabbabaabbbaaaabaaaaa
|
||||
bbbabbbabbbbbaababaaabbbaaababbaabaabaaa
|
||||
abbbabbaabbaaaaaaabababa
|
||||
baabaabbabaaabbabbbaaabb
|
||||
aaabaabaabaaabaaababbbaa
|
||||
babbaabaabaaaabbabbbbaba
|
||||
bbbbaabbbaabbaabbbabbbbaabaaababaaaaabab
|
||||
baabaabbaaaaabaaaabbabaabbbbbabaaababbabbbbbababbabaabbbbbabaaba
|
||||
abaaabbaaabaabbaaaaabbba
|
||||
ababaaaabbaaaaaaabbbaabbabbbbabb
|
||||
babaabbababbbabbabaabaabbbbbaabbbabaaabbaaabbbba
|
||||
baabbbbbbbbabbbbbababbab
|
||||
ababbababaaaaabbbbbabbbbabaaaabbaaaaabaaabaababb
|
||||
aaabaabababaabababbababb
|
||||
aaabbbbaaaaabbbbbbabbabbbabaabaabbaaaaaabaaaaabbbbbabbbabaaaaabaababaaba
|
||||
bbaabbaaaaaababbbaababaa
|
||||
aaaaabbbbbaaaaabbaababaa
|
||||
aaabbbbbabbbbbababbbaabbaaabbabbabaaabbb
|
||||
baaaaabbbbbbbbbabbbbbabbbaabbbababbbbbaa
|
||||
abbabababbbbabbabbaabbaabaaaabaabbbbbaaabbbbbbaaabbabbbabbbaaabbbbaaabab
|
||||
bbabbbabbbbabaaaabbabbabbaaabbab
|
||||
aabbaaabaabbbabbbbbaaaba
|
||||
ababbabaabbbaabbaaaaabbbaabaabbbbbbbbbbbbaaabbbbbaabaaabbaaaabba
|
||||
bbabbbababababaabbaaabbb
|
||||
babbabbbbbbabbbabbabaabbabbaaabbababbababbabbbbbabababaa
|
||||
bbaaaaabaabaabaabbbabbbbaabbbbbbaaaaaaba
|
||||
aaaaababbaaaaababaaabaaaaaaaaaabababbabbabbaaaaa
|
||||
abaaabbbaaabaabaaabaaaabaaabbbaa
|
||||
baaaaababbabbbbaaaaaaaaabbbbabba
|
||||
bbaabbaabbbbbabaaabbbbbabaaabaaaaaabbaba
|
||||
bbaaabbabaaaaabbaabbaababaaaabaaababbbab
|
||||
aabbaaababbbbbbbaabbabba
|
||||
abbabbabbbaaabbababaaaaa
|
||||
abbaabaabbbbbbbbbbbabbbbbabaabaa
|
||||
aabbabaaababbabaabbbaaaa
|
||||
bbabaababbabbaaaaaabbbbbabbaabaabaaabbbbbabbaabbbaaaaababbaababbbbababab
|
||||
bbabbaabbbabbbbabaaabbaa
|
||||
aaaabbababbaaabbabbbabaabbbaaababababbab
|
||||
aaaababbaaabaabbbaabaaab
|
||||
aabbaabbaaabaaaabbaabbab
|
||||
babababbaabbbbabbbabbaabbaaaaababaabbabbabbabbbaabababaabbabbbaa
|
||||
baabbaabbababbbbabaaaaba
|
||||
aabaaabbababbbaaabbbabaabaaaabbbabaabbaaabbbaabaaaabaaaaabaaabbabbbabbbb
|
||||
aabbbbbbaabaaabaaabbbbabaaabaabaababbaababbaabab
|
||||
bbbabbbaaaaabaabbbbbbaaaaabbbbbabbabaaabbbbaabba
|
||||
aabbbaaaabaaaabbbbbabbab
|
||||
bbaaaaaaabbbbbbbababbbaa
|
||||
baaaabbbabbbbbbbbbaababa
|
||||
abbabaaaaabbbbbaaabbaaaa
|
||||
bbbbbbbbaabaabbbbaaaabba
|
||||
aabaaaaaaabbbaababbaabbbbababbabababaaab
|
||||
aaaabbabaabbabaaaaabbbab
|
||||
baaabbbbbbbabaabbbaabaabaaaaababbaabbbbababbbbababbbbababbbbbbab
|
||||
baabbbbbbababbbbabaaaaaa
|
||||
bbbbbbbbbaaaaababbabbbbbbbbaaabb
|
||||
abbaaabbaaaabbabbaabbabbbbaababbbbbbbabb
|
||||
abbabababbaabaaaabbbaaba
|
||||
abbabaaaaabbbbbbaaaabbbb
|
||||
bbaabaababababbabbabaaaa
|
||||
ababbbbbbabbabbababbaababbbabbabbbabbabaaaaaababaaaabaabbbaababa
|
||||
bbabbabbabbababaaaababaa
|
||||
baabbaaabaabaaaaabaaaaab
|
||||
bbbabbaabbaaababbaaaaaab
|
||||
bbbbaabaababbabababbaaaa
|
||||
babbbabbabbabbabbbaaabbaaabbaabababbbabb
|
||||
aaaababbbaaaaababbbbbbaaabaababb
|
||||
bbbbaaaabbbbaaaaaabaaababbaabaababababaa
|
||||
baabbbabaaababababbbabab
|
||||
aaaaaaabbbbbbabaababbabb
|
||||
aaaaaababbbaaaaabababbab
|
||||
baaabbbbaaaabababababbba
|
||||
ababbbabaaaabbabaaaaabababaabbba
|
||||
abbabbbbbabbaabaabaababb
|
||||
baaaaababbbaabababbaabab
|
||||
babbaaaaaabbbbaabbabbbabbbbbbababaabbabbababaaba
|
||||
bbbbbaaaaabababbaabaabbaabbbaabbabaabbba
|
||||
bbbbaabaaaabbbbbbabbaaab
|
||||
baaababaaababbaaaabbbbbbabaaaaaa
|
||||
aaabbaaaababaabbabbbbabbbbaaaaaaaaabbaaabaabbaabbbbabbabbabbaaabaaabaabb
|
||||
aabaabbabbbabbbaabaaaaab
|
||||
abaabaaaaabaabaaabaabbba
|
||||
aabbbbabaaababbbababbbaa
|
||||
bbabaaababbabbabaabbaabbbbbbabba
|
||||
aabbbaaaaabbbbbbbababaaabaabbbaa
|
||||
abbbbabbaabbabaabaababaaabbabaaabaabaabbaaaaabaabbaaabbabbaaaaab
|
||||
bbbabaaabbaabbbbaaaaaaba
|
||||
baaaaabbaaaaabaabbababbb
|
||||
bbbabbbbbabbbbbbbbbbabab
|
||||
abbbabaabbaaababbbbbabaa
|
||||
aaaaabaaaaababbbabaaaabbabaaaaba
|
||||
abbababbbbbaaabbaaaabbbabaaabbbaaaaabbaababaaaababaaaabb
|
||||
abaabbbbbbbabaabababbabbbbabaaabbabababbaaabbaabbaababab
|
||||
baabbababbbabbaaaaaaaaba
|
||||
aabbbabbaaaabaaaababaaab
|
||||
abbabaaaaabbbbabbabbbbaaabbbbbabbbaaaabbbbaababb
|
||||
abbbbbbaaaabaababbaabbaa
|
||||
bbbbaabaabaaababaaabbabbaabbbabbbbababbbaabbabbabaabaaba
|
||||
abbbabaaaababaaaababaaab
|
||||
bbabaaababbaabbababbabaabaababaa
|
||||
aaaabbbaaaaabbbbabbbbbbabbbabaabbbabbbaabbaabababababaaabbbaabbabbabaaaabbbbbbbbabaaabba
|
||||
abbaabaabbbabbbbabaaaaab
|
||||
abbaaaaababbbbbbbabbabbaabbababbaaaaaabbabbaaaabaabbbaba
|
||||
aababaaaaabaaabbbaabaaab
|
||||
bbbabababbbabbbbabbabaaababaaaaa
|
||||
abbbbaaababbaaabbaaaabbabaabaaab
|
||||
abaabaabbbbabaabaabababa
|
||||
aaaaaaaaabaaababbbabbabbaaaaaaabaaaabbababababaa
|
||||
abababbbabababbaaabbabbbbbaabbbbbbaaababbbabbbbaabbabbaa
|
||||
bbbbbabaaabbbbabaaabbabbabababbaaaaabbbb
|
||||
aabbbbaaaaababbbaabbabba
|
||||
baaaaababaaaaababbabbbbaaaaaabaaababbaaabaaaaaaa
|
||||
abaaaabbabbaaababbabbbbb
|
||||
bbaabaaabaaaaabbbabbaabaaaabaabbaaaaabba
|
||||
abbbbbbbbabbbbaabbabaaaaabbabbbabaaabaaa
|
||||
bbbaabaaabaaaababbbbbabbbbbbbabbbbaaaaba
|
||||
abbaaabbbaabaabbbbbbaaab
|
||||
aaabbaaabbabbaabbababbaa
|
||||
abbbabbbabababbababaaaaa
|
||||
bbabbbbabaaaaababbaababbbbbaabaabbabbaaaaaaaabbbaaabbaab
|
||||
abaaababbbaabaaababbabaa
|
||||
bbaabaabbaaabbbbbaaaaabbaabbbbbbabbabaaabbaabababababbbabaaaabab
|
||||
abbaaaaaaabbabaababbbbba
|
||||
bbbababababaaabbabaaaaaa
|
||||
babbbabbbbbabaabababbabb
|
||||
abbaaaaaabbabaaabbbbaabbbabababa
|
||||
abbabbbbbbabaabbbabbabba
|
||||
baabaaaaaaaabaabbbbababaaaabbaaabbbaaabbbabbbaba
|
||||
baaabaababbaaabbabbbbabb
|
||||
abaabaabbbbbaabbababbbaa
|
||||
bbbbaabaabbababbbbababaabaaabbabbbbbabbabbbabbab
|
||||
bbabaaababbabaaaaaabaabbaabaaabaaabbaababbaaabbbbbbbabba
|
||||
bbbabaaaabbabbabbbbabbab
|
||||
bababaaababbbbbbbaabbbaa
|
||||
abbbbbbbbbabbaaabbababbb
|
||||
aabbaaabaabbbaaabbbaaaba
|
||||
aabbabbbbabaabababbabbaa
|
||||
abbbabaababaaabbabaabaaaaabbbbababaaabaababbaaaa
|
||||
aaaaabaabaaababaabaaaaab
|
||||
bbbaabbbbbaabbaababaabbb
|
||||
abaaaabbabbabbbbbbbbaaab
|
||||
aabababbbaaabababbabbabbaaaaabab
|
||||
bbabbaaaaaaaaaabbaaababb
|
||||
baaaaabaaaabaaaabbbabbbbaabbbbaaabaabbabbabbbbbababaaaaa
|
||||
aaababbaaababaaaaaabaababbbabaaa
|
||||
babbaabbbaaabaababaabbba
|
||||
abbbabaaabbababaaababbbb
|
||||
abbbaabbbabbababaabbaaabbabbaaaa
|
||||
bbbaabababbaaabaaaababab
|
||||
aaaaaaaaabbabbabababaabbbbaaaabbbbababbaaaabbaaaabababaabaabababbbbaaabaaaabaabb
|
||||
bbbbbaaabababbabaabbbbaabaaaaabbabbbabbabaabbbbaaabaababbbaabbba
|
||||
aaabbabbaabbaaabbbaaabbaaabbbbbabaaaaabaaababaaabaabaaab
|
||||
bbaababbaabbbbbbaabbbaaaabaabbab
|
||||
bbbbababababaaaaabbbaabbaaababbbababbabaaabbbaaa
|
||||
bababaaaaabaaabbbbabbababbbbbaaa
|
||||
babababbaaaaaaababaababb
|
||||
bbaaaaaaaabababbabbaabab
|
||||
abbaaaaabbbbbbaaaababaab
|
||||
babaababaababbaabbbabbbbbabbabbb
|
||||
aabbbbbbaababaaaababaabb
|
||||
aaaababbabababbabbabbabbbbaaababbabbbaab
|
||||
bbabbaaaaabaaababaabbaabaaaaabab
|
||||
aaaaaaaabbbbbaaaabbaabab
|
||||
abaaaabbbabbbabbabaabaabbbaaaaabbbbaabbb
|
||||
babaaabbabababbabbaaaaba
|
||||
baaababaabbabaabbaababbb
|
||||
aababaaaabaaabbaabaababa
|
||||
bbbabaabbabbbabbbbaaabbb
|
||||
abaaabbabbaabbaabaaabbaa
|
||||
bbbababbbbbbbaaabababbbaabbbaabbbaabaaabbabbabbabbaabaaaababbbbbbbbbbababbbabbaa
|
||||
bbbbaaaaaabbbabbabbaabaababbababaabbabaaaaababbbbaababaa
|
||||
bababbbbbaabbaababababbbabbbaaab
|
||||
bbaababbabbbaabbbababbab
|
||||
baabaabbaabbaabbbaaaabab
|
||||
aaaaabbbbababaabaabaaaaa
|
||||
bbbabaababbabaaabbbbabab
|
||||
bbbabaabaaaaaaaabaabbbababbaaabaaaabbabbaaaaabbbabbaaabb
|
||||
aabbabaabbbbaabaaababaaaabbbabbbbbbaaaaababbbbab
|
||||
aaaaaaabbabaaabbababaabb
|
||||
abaaabaabbabbaaabbbbbaab
|
||||
aabaabbaabbabaaabbabbabbabbbbbbbaaaabbbb
|
||||
baabaaaabbbabaabaabbaabbaababbaaaabbaaaaaababaab
|
||||
baabbaaaaabbbbbbabbabbba
|
||||
aabbbbbbbbaababbaaabaabaabbbabaababbbabaabbababb
|
||||
bbabaabbbabbaababbababba
|
||||
bbbbaabbbbaabbaaabbbbaba
|
||||
aaababbabaabbabbabaaaaab
|
||||
aaabaabaaaaaabaaabababab
|
||||
ababbabaabbbbbabbabbaababababbba
|
||||
abbaaabbbbbabaabaabbbbbababaababaabaabaabbaabbbaabbbbaaa
|
||||
baabbaabbbaaabbaabaaaabbbbbbbbaaabaaababababbbba
|
||||
aaaababaaaaabbabaabbaaaababaabaabaabababababbbbaaabbaaaa
|
||||
aaabaabbbbbaabaaababaaba
|
||||
bababaabaabbbabbaaaabbababbabbaa
|
||||
baabaaaaaabbaababaaababb
|
||||
baaaabaaaaaaaaaabbabbbaa
|
||||
babbaabbabaaabaaabbaabaabababbbabaababababaaaaaaabaaaaabaaabbbba
|
||||
abbaaaaabaabbbbbabaaaaaabbbbbbba
|
||||
aaabbaaaabaaaabbbaababab
|
||||
baaabbbbaabbbabbaabbbaab
|
||||
babbaabbbabbabaaababbbababaababbbabbbbbbbbaabaaaabaaabbbbaabbbbbbaaabbbb
|
||||
bbabbabaaaaaaaabaaaaaabb
|
||||
ababbbbbababbabaaabbaababababbbbabbbbaaaaaaaaaaaabbbbbbabbbaabba
|
||||
aaababbaaabababbababaaba
|
||||
aaaaababbababbabbaaabbbbbbaaaabaaaabbabb
|
||||
baabbbbbabbbabbbaaabaaab
|
||||
babaaababaababbbababbbbabbababababbbbaab
|
||||
abaabaabbabababbbaababbbbabbbbab
|
||||
baababbababaaaaaaababaababbaabaaaabaaabaabbbbbbabbbbabaabbbababbaaaabbbabaaaaababbbababaabaaabab
|
||||
bbbbbbaaabbababaabbbbaab
|
||||
abbaaaaabbabbabaababbaaa
|
||||
baaabbbbaabaabbbbbbabbbbbaaaabab
|
||||
bbbbbbaaaabaabaabaaabbaa
|
||||
aabaabbabbbabbbaabaaabbb
|
||||
bbaababbaabbbbabbbababbb
|
||||
bababaaabbabbbabaaaaabbbaaabbaab
|
||||
babbabbbbbabaabbbbabbbbaaabbbaaabaabbbbaaabbaaaabbbbabbb
|
||||
babbababbbabbabaabbbbaab
|
||||
aaaabbabbbabbbbabbbbaabaabbabababaaabaabbbbbbbbabaaaabba
|
||||
bbbbaaabaaabaaaaabbaabababaaabbbabbabbbb
|
||||
bbbabababbbbbbaaabbbbbaa
|
||||
baababbabaabbabbaabaabbbaabbbbbabbabbbaa
|
||||
bbaabbbbbbabbababaaabbaa
|
||||
aaaaaababaabbbbbbaabbabbbababaaaaababababaaabbabaaaabbbbaaaabbabbabbbaab
|
||||
babbbabbbaaabbbbbbaaaaaaaaabaabbbaabbaaaaababaabababaaba
|
||||
abababbbaaaababbbbaaabaa
|
||||
ababbabaaaaababbabaaaaaa
|
||||
bababaaaabbaaabbbababbab
|
||||
bbaabbbaabbabbbbaabababa
|
||||
baabbbbbabbabbabbbbbaaab
|
||||
abbaaaaaaaaabaaabaaaabba
|
||||
aabbaabbbbbabbaababbababaaabaabb
|
||||
bbaababbbbbabbbaaaababbabbaababbabababbabbababaabbaaabaaabaabbaa
|
||||
abbbbbabaaabbabbababbaab
|
||||
aaaaabaaaabaaaababbbbaaa
|
||||
aabaaabbbabbabbbabababaa
|
||||
aabbbabbaaaaabbbaababaab
|
||||
abababbbbbaabbaaabbbaabbaaaaabaabaaaabaabbbaaababbaababaabaababaababbbbb
|
||||
babbaabaabababbbaaabbaab
|
||||
abbbaabbabbbbbbbbaaababababbbaabbababbab
|
||||
aaaababbabbaaaaabaabaabbbbabbbaaaaaaabba
|
||||
bababbbbbbbbaabbaaaabbba
|
||||
bbaabbbaaaaaabbbbabbbbaa
|
||||
aabbaabaabbbabaabababbbbbbbbabab
|
||||
babababbabbbabaabbbabaaaabababaa
|
||||
babaaababbaaaabbbaabbbba
|
||||
ababaaaaabbbbbbbbaabbabbbabbaabbaaaabababaababaa
|
||||
bbaaaaabbaaaabbbbabbaabaababaababaabbaabababbbbaabbabbaa
|
||||
baabbabbaaabaabbbbbbaabaaaaabaabaabaabab
|
||||
aaababbbbbaababbabbabbaa
|
||||
aabbaaabaabbaaabbaababab
|
||||
abbabaaaaababaaaaaaaaaaabaaabaaabbbbabaa
|
||||
aaabaabaabbbabaabaabbabbaababaaaabaababa
|
||||
abbabbabbababbbbbaaaaaab
|
||||
aabaaabbbbbaaaabbbabababbaaaabbbaaabbbab
|
||||
bababbaaababbabababbabaabababaababbabaaaaaabaaaabbaaaaaabaabaaab
|
||||
aababaaabaaaaabbabababaa
|
||||
aabbabaabbabbaaabbbaaaba
|
||||
aabbabbbabbabaababbaaaaaaabbbabbaaabbaabaaaabbbbaaaabbba
|
||||
abababbabbbbaaaababbbbab
|
||||
aaaabbbbbbbbaabbbaababbaaabbbbbaaababbabbbbaaaaaababaabbababbbaabaababba
|
||||
abaaabbababababbbabababa
|
||||
abaaabbaabababbbbaaaaaaabbbbabbb
|
||||
aabababbbbbabaaababbabbbababaabb
|
||||
abababbaabbbaabbaabbbbbabbbbbbbb
|
||||
aabaabbbbbaabbbabaaabbbbbbaaaaaabbbbbbbabababbaabaaaabaa
|
||||
babaaaabaaababbaaabababa
|
||||
bbaabbbaababbababbbaaaab
|
||||
bbbaaaababbbbbaabbbbbababbababbaabbaabababbabbbababbbbababbbabaaaabbabaaabaaaababbbbbaaaabaaabbb
|
||||
baabaabbbaabbabaaababbba
|
||||
bbbaabbbbbababbbbbbbaababbaabbaabbbbbaababbaabbabbbbaaabaabaabbabaabbbaa
|
||||
bbbbbbbababbbbbbaabaababaaaaabbbbbbabbbb
|
||||
aababbaabbbbaabbbbbaabbbaabaabaaaaaaabbbbabababa
|
||||
abbbabaaabaaabbabbaaaaba
|
||||
aaaaabbbaabbbbbbaaababbbbabaabbaababaabbbabaaaaabbaaabbb
|
||||
babbabbbbbabaaabaaaabbaa
|
||||
bbbbaabbaaaaabaabbabbaaabbabaaaa
|
||||
aaababbbaabaaabbbbbaabba
|
||||
aabbaabbababaaaaabbababbbababbaaabbbbaabbbbaaabbbaaabaab
|
||||
bbabbabaabbabaabababaaab
|
||||
bbaaababbbbbaabababbbbaa
|
||||
aaaababaabbaaabbabbbbbaa
|
||||
bbaabbbaabaabaabbbaaaaababbabaabbbabbabaaabbabbabbbbabaa
|
||||
babbababaabaaabababbababbbaaababbbabbbbbbabababa
|
||||
aababbaaaaabaabbbbaaabaaabbbbabb
|
||||
bbbaaabbabaabbbbaabbabbbbabbaabbbabaababbbbaaaaaaababaabaaaaaaabbababaaa
|
||||
abbaaabbbbabbaaaabaabbba
|
||||
aaaaabaaaaaabbabbbaabaaaabaaaaaa
|
||||
aaabbbbbbaabaabbabbbaaab
|
||||
abaabaabbabaabbabbababbb
|
||||
aabbbaaaabababbababbbabbbabbabababbbbaabbaaaaaaa
|
||||
baababaababbabbbbbbabbbbababbabaabaaaaba
|
||||
bbaabbaabbaaaaaaaaabbaba
|
||||
aaaaabbbbaabbababababbbbbaababbaaaabbaab
|
||||
abbaabbabaaabbbaaaaaaabbaababbbaaabbbbbbabaaaaabbaabaaaabaaaaaababaabaababbbbbbbbaabbabb
|
||||
baababbabbabbabaabbabaaababbbaaa
|
||||
baabbaabaababbabbbbbabbb
|
||||
aabbaaababbbabbbbaabbaabababbbbb
|
||||
aabbbabbaaabaabaabbbaaab
|
||||
abbbbbbbbabababbbbaaaaabaabaabbbbababbaa
|
||||
bbbbbaaabbabaaabaababbababbababababaabbbbabaaaaa
|
||||
abbabbabaabbbbbbaabbbbbbbabbabbbabbaaaaaabbbaabababbaaaa
|
||||
aaaababbaababbabaaaaabaaabbbbbbbbbbbbaba
|
||||
bbbbabbaabaaabbabbaaabbaaababbaabbabbabaababaababbaaabaa
|
||||
aaabbbbbbaabaabbbbaababa
|
||||
baabaaaaaaabbabbbabbbabbbabbaaabbaaaabab
|
46
day_19/second.rb
Normal file
46
day_19/second.rb
Normal file
@ -0,0 +1,46 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
input = File.read('./input').split("\n\n").map { |r| r.split("\n") }
|
||||
|
||||
# Replacements for Part 2
|
||||
input[0].delete('8: 42')
|
||||
input[0].push('8: 42 | 42 8')
|
||||
input[0].delete('11: 42 31')
|
||||
input[0].push('11: 42 31 | 42 11 31')
|
||||
|
||||
$mem = {}
|
||||
$lines = input[1]
|
||||
|
||||
$rules = input[0].map do |i|
|
||||
k, v = i.match(/(\d+): (.*)/).captures
|
||||
[k, v.split('|').map do |x|
|
||||
x.split(' ').reject(&:empty?).compact.map do |y|
|
||||
y.gsub('"', '')
|
||||
end
|
||||
end]
|
||||
end.sort_by(&:first).to_h
|
||||
|
||||
def rules(key, d = 0)
|
||||
$mem[key] ||= begin
|
||||
either_or = $rules[key]
|
||||
|
||||
d += 1
|
||||
return '' if d == 96
|
||||
return key unless either_or
|
||||
|
||||
pair = either_or.map do |group|
|
||||
group.map do |sub_rule|
|
||||
rules(sub_rule, d)
|
||||
end.join('')
|
||||
end.join('|')
|
||||
if pair.include?('|')
|
||||
'(?:' + pair + ')'
|
||||
else
|
||||
pair
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
re = Regexp.new('^' + rules('0') + '$')
|
||||
|
||||
puts $lines.select { |line| re.match(line) }.size
|
Loading…
x
Reference in New Issue
Block a user