From 965aba2b2101f7cd1958f0f4f44cf153d652e67e Mon Sep 17 00:00:00 2001 From: Heiko Ludwig Date: Sat, 7 Dec 2024 10:05:26 +0100 Subject: [PATCH] solve day 5 part 1 --- day_05/program.py | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/day_05/program.py b/day_05/program.py index 50cef13..7000ac3 100755 --- a/day_05/program.py +++ b/day_05/program.py @@ -7,9 +7,47 @@ def get_lines(filename: str) -> list: return [line.strip() for line in file.readlines()] +def get_rules_and_updates(lines: list) -> tuple: + rules = {} + updates = [] + for line in lines: + if "|" in line: + a, b = line.split("|") + if rules.get(b): + rules[b].append(a) + else: + rules[b] = [a] + elif "," in line: + updates.append(line.split(",")) + return rules, updates + + +def check_validity(rules: dict, update: list) -> bool: + for position, page_number in enumerate(update): + if page_number not in rules: + continue + # if a number that is supposed to come earlier than our current page_number + # is included in the rest of the update, it breaks the rules + for earlier_number in rules[page_number]: + if earlier_number in update[position:]: + return False + return True + + +def get_middle_page_sums(rules: dict, updates: list) -> int: + middle_page_sum = 0 + for update in updates: + if check_validity(rules, update): + middle_page_sum += int(update[int(len(update) / 2)]) + return middle_page_sum + + def main(): - lines = get_lines("sample-input.txt") - # lines = get_lines("input.txt") + # lines = get_lines("sample-input.txt") + lines = get_lines("input.txt") + + rules, updates = get_rules_and_updates(lines) + print("Part 1: The sum of valid middle pages is:", get_middle_page_sums(rules, updates)) if __name__ == '__main__':