Files
AdventOfCode/2024/05/05.py
2024-12-05 10:07:21 +01:00

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))