Solve 19.1
This commit is contained in:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user