51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
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))
|