2024 day 5 part 2

This commit is contained in:
Thibaud Gasser 2024-12-08 22:32:36 +01:00
parent 5fb0e1523c
commit b8c01cc245

View File

@ -8,24 +8,38 @@ def check_update(upd, rules):
return False return False
return True return True
def fix_update(upd, rules):
while not check_update(upd, rules):
for i in range(len(upd)):
for j in range(i+1, len(upd)):
if [upd[j], upd[i]] in rules:
upd[j], upd[i] = upd[i], upd[j]
def main(content): def main(content):
order, updates = content.split("\n\n") rules, updates = content.split("\n\n")
order = [x.split("|") for x in order.split("\n")] rules = [x.split("|") for x in rules.split("\n")]
updates = [x.split(",") for x in updates.rstrip().split("\n")] updates = [x.split(",") for x in updates.rstrip().split("\n")]
part1 = 0 part1 = 0
incorrect_updates = []
for update in updates: for update in updates:
if check_update(update, order): if check_update(update, rules):
middle = update[len(update)//2] middle = update[len(update)//2]
part1 += int(middle) part1 += int(middle)
else:
incorrect_updates.append(update)
print("Part 1: ", part1) print("Part 1: ", part1)
part2 = 0
for update in incorrect_updates:
fix_update(update, rules)
middle = update[len(update)//2]
part2 += int(middle)
print("Part 2: ", part2)
if __name__ == "__main__": if __name__ == "__main__":
import sys import sys
infile = sys.argv[1] if 1 < len(sys.argv) else "example.txt" infile = sys.argv[1] if 1 < len(sys.argv) else "example.txt"
with open(infile) as f: with open(infile) as f:
main(f.read()) main(f.read())