You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.3 KiB
49 lines
1.3 KiB
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
from collections import Counter
|
|
from copy import deepcopy
|
|
|
|
def step(cons,s):
|
|
for _ in range(s):
|
|
ncons = {}
|
|
for (a,b),v in cons.items():
|
|
if (a, rules[a+b]) not in ncons: ncons[(a, rules[a+b])] = 0
|
|
if (rules[a+b], b) not in ncons: ncons[(rules[a+b], b)] = 0
|
|
ncons[(a, rules[a+b])] += v
|
|
ncons[(rules[a+b],b)] += v
|
|
cons = deepcopy(ncons)
|
|
return cons
|
|
|
|
def countp(cons):
|
|
ex = {}
|
|
for k in nex.keys():
|
|
ex[k[0]] = 0
|
|
ex[k[1]] = 0
|
|
ex[start[0]] += 1
|
|
ex[start[-1]] += 1
|
|
for k,v in nex.items():
|
|
ex[k[0]] += v
|
|
ex[k[1]] += v
|
|
return ex
|
|
|
|
if __name__ == '__main__':
|
|
start, rules = open(sys.argv[1]).read().split('\n\n')
|
|
rules = [r.split(' -> ') for r in rules.split('\n')]
|
|
rules = {a[0]:a[1] for a in rules[:-1]}
|
|
nex = {}
|
|
for a,b in zip(start[:-1],start[1:]):
|
|
if (a,b) not in nex: nex[(a,b)] = 0
|
|
nex[(a,b)] +=1
|
|
# challenge 1
|
|
nex = step(nex,10)
|
|
res = countp(nex)
|
|
res1 = str(max(res.values())//2-min(res.values())//2)
|
|
print("challenge 1:" +"\n" + res1 + "\n")
|
|
|
|
# challenge 2
|
|
nex = step(nex,30)
|
|
res = countp(nex)
|
|
res2 = str(max(res.values())//2-min(res.values())//2)
|
|
print("challenge 2:" +"\n" + res2 + "\n")
|
|
|
|
|