from io import DEFAULT_BUFFER_SIZE import sys poly = None inserters = {} class polyme: def __init__(self, initial): self.Polymere = [] self.letters = {} self.dubles = {} for f in initial: self.Polymere.append(f) for i in range(len(self.Polymere)): if i != len(self.Polymere) - 1: temp = self.Polymere[i] + self.Polymere[i + 1] g = self.dubles.setdefault(temp, 0) g += 1 self.dubles.update({temp : g}) temp2 = self.letters.setdefault(self.Polymere[i], 0) temp2 += 1 self.letters.update({self.Polymere[i] : temp2}) print(self.letters, self.dubles, self.Polymere) def steppy(self): tempdict = {} tempdict.clear() print(tempdict) for key, insert in inserters.items(): if key in self.dubles: count = self.dubles[key] if insert in self.letters: adletters = self.letters[insert] else: adletters = 0 adletters += count self.letters.update({insert : adletters}) dub1 = key[0] + insert dub2 = insert + key[1] g = tempdict.setdefault(dub1, 0) g += count tempdict.update({dub1 : g}) g = tempdict.setdefault(dub2, 0) g += count tempdict.update({dub2 : g}) g = tempdict.setdefault(key, 0) g -= count tempdict.update({key : g}) for dub, amount in tempdict.items(): g = self.dubles.setdefault(dub, 0) g += amount self.dubles.update({dub : g}) print(self.letters, self.dubles, self.Polymere) def findsolu(self): temp = self.letters.values() print(temp) temp2 = max(temp) - min(temp) return temp2 with open(sys.argv[1], 'r') as f: for g in f.readlines(): g = g.strip() if poly is None: poly = polyme(g) continue if g == '': continue else: temp1, temp2 = g.split(' -> ') inserters.update({temp1:temp2}) for i in range(40): poly.steppy() print(poly.findsolu())