import copy def checkPage(upd,rules): out = True for rule in rules: if rule[1] in upd: ind = upd.index(rule[1]) for i in range(ind,len(upd)): out = False if upd[i] == rule[0] else out return out def findMid(arr): return int(arr[int((len(arr)-1)/2)]) def orderUpd(upd,rules): out = copy.deepcopy(upd) temp = "" for rule in rules: if rule[0] in out and rule[1] in out: temp = out[out.index(rule[0])] out[out.index(rule[0])] = out[out.index(rule[1])] out[out.index(rule[1])] = temp if not checkPage(out,rules): out = orderUpd(out,rules) return out flag = False updates = [] rules = [] with open("input05.txt") as file: for line in file: if line == "\n": flag = True elif not flag: rules.append([line.split("|")[0],line.split("|")[1][:-1]]) else: updates.append(line.split(",")) updates[-1][-1] = updates[-1][-1][:-1] out = 0 out2 = 0 for upd in updates: if checkPage(upd,rules): out += findMid(upd) else: upd=orderUpd(upd,rules) out2 += findMid(upd) print("sum of middles of correct updates: " + str(out)) print("sum of middles of newly ordered updates: " + str(out2))