#advent of code 2018 #day 05 #part 1 and 2 #extremely slow, rewrite candidate 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; 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; #part1 def PolymerReaction(myinput): is_poly = True; while is_poly: is_poly = False; sub = ""; for x in range(2,len(myinput)): x1 = myinput[x-2]; x2 = myinput[x-1]; if polymer_d(x1,x2): myinput = sub + myinput[x:]; is_poly = True; break; else: sub += x1; return len(myinput); #part 2 def ShortestPolymer(myinput): inp_max = 999999; inp_c = ""; for c in range(ord("A"),ord("Z")+1,1): 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; return inp_max f = open("05.in","r"); cdiff = 32; PuzzleInput = f.read().replace("\n",""); f.close(); p1 = PolymerReaction(""+PuzzleInput); print("part 1", p1); p2 = ShortestPolymer(""+PuzzleInput); print("part 2 ",p2);