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
sort using a compare function
from math import floor from pathlib import Path from functools import cmp_to_key cwd = Path(__file__).parent def parse_protocol(path): with path.open("r") as fp: data = fp.read().splitlines() rules = data[:data.index('')] page_to_rule = {r.split('|')[0]:[] for r in rules} [page_to_rule[r.split('|')[0]].append(r.split('|')[1]) for r in rules] updates = list(map(lambda x: x.split(','), data[data.index('')+1:])) return page_to_rule, updates def sort_pages(pages, page_to_rule): compare_pages = lambda page1, page2:\ 0 if page1 not in page_to_rule or page2 not in page_to_rule[page1] else -1 return sorted(pages, key = cmp_to_key(compare_pages)) def solve_problem(file_name, fix): page_to_rule, updates = parse_protocol(Path(cwd, file_name)) to_print = [temp_p[int(floor(len(pages)/2))] for pages in updates if (not fix and (temp_p:=pages) == sort_pages(pages, page_to_rule)) or (fix and (temp_p:=sort_pages(pages, page_to_rule)) != pages)] return sum(map(int,to_print))
No need for
floor
, you can just uselen(pages) // 2
.