Solve 19.1

This commit is contained in:
2021-05-16 22:59:15 +03:00
parent f79c4c9263
commit d3e78be1b6
2 changed files with 725 additions and 0 deletions
+108
View File
@@ -0,0 +1,108 @@
rules, data = """
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
""".replace('"a"', 'a').replace('"b"', 'b').strip().split("\n\n")
rules, data = """
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
""".replace('"a"', 'a').replace('"b"', 'b').strip().split("\n\n")
with open('input') as f:
rules, data = f.read().replace('"a"', 'a').replace('"b"', 'b').strip().split("\n\n")
data = data.split("\n")
rules = dict(row.split(': ') for row in rules.split("\n"))
rules = {i: [rule.split() for rule in row.split(' | ')] for i, row in rules.items()}
print(len(data))
def f(s, r):
if s=='':
#print('1', s, r, False, 0)
return False, 0
if r in ['a', 'b']:
if s[0]==r:
#print('2', s, r, True, 1)
return True, 1
else:
#print('3', s, r, False, 0)
return False, 0
res = False
for seq_r in rules[r]:
k = 0
_s = s
for rule in seq_r:
c, _k = f(_s, rule)
if not c: break
_s = _s[_k:]
k += _k
else:
res = True
break
#print('4', s, r, res, k)
return res, k
print(sum(1 for d, (f, k) in zip(data, list(f(d, '0') for d in data)) if len(d)==k and f))
rules.update({'8': [['42'], ['42', '8']], '11': [['42', '31'], ['42', '11', '31']]})
print(sum(1 for d, (f, k) in zip(data, list(f(d, '0') for d in data)) if len(d)==k and f))