f = open("input"); #f = open("testinput"); ''' test1 = ord("a") - ord("A"); test2 = ord("b") - ord("B"); test3 = ord("c") - ord("C"); print(test1, " ",test2, " ",test3, " ") ''' cdiff = 32; def polymer_d(a,b): return (cdiff == abs(ord(a) - ord(b))); ''' def polymer_strip(inp): is_poly = True; while is_poly: is_poly = False; sub = ""; for x in range(2,len(inp)): x1 = inp[x-2]; x2 = inp[x-1]; if polymer_d(x1,x2): inp = sub + inp[x:]; is_poly = True; break; else: sub += x1; return inp; ''' def polymer_strip(inp): is_poly = True; while is_poly: is_poly = False; for x in range(1,len(inp)): x1 = inp[x-1]; x2 = inp[x]; if polymer_d(x1,x2): #print((x1+x2)); inp = inp.replace((x1+x2),""); #myinput = myinput[ is_poly = True; break; return inp; #is_poly = False; myinput = f.read(); #print("A", ord("A"), "Z", ord("Z")); inp_max = 999999; inp_c = ""; for c in range(ord("A"),ord("Z")+1,1): #print(chr(c)); subinput = myinput; subinput = subinput.replace(chr(c),""); subinput = subinput.replace(chr(c+cdiff),""); subinput = polymer_strip(subinput); if (len(subinput) < inp_max): inp_max = len(subinput); inp_c = c; print("part 2 ",inp_max -1); #again, needed minus 1 on answer #not sure why is that but it works