Day 5: Print Queue
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
Python
(Part 1) omg I can’t believe this actually worked first try!
with open('input') as data: parts = data.read().rstrip().split("\n\n") ordering_rules = parts[0].split("\n") updates = parts[1].split("\n") correct_updates = [] middle_updates = [] def find_relevant_rules(pg_num: str, rules: list[str]) -> list[str] | None: for rule in rules: return list(filter(lambda x: x.split("|")[0] == pg_num, rules)) def interpret_rule(rule: str) -> list[str]: return rule.split("|") def interpret_update(update: str) -> list[str]: return update.split(",") def find_middle_update_index(update: list[str]) -> int: num_of_elements = len(update) return num_of_elements // 2 for update in updates: is_correct = True for i, page in enumerate(interpret_update(update)): rules_to_check = find_relevant_rules(page, ordering_rules) for rule in rules_to_check: if rule.split("|")[1] in interpret_update(update)[:i]: is_correct = False if is_correct: correct_updates.append(update) for update in correct_updates: split_update = update.split(",") middle_updates.append(int(split_update[find_middle_update_index(split_update)])) print(sum(middle_updates))