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
Nim
Solution: sort numbers using custom rules and compare if sorted == original. Part 2 is trivial.
Runtime for both parts: 1.05 ms
proc parseRules(input: string): Table[int, seq[int]] = for line in input.splitLines(): let pair = line.split('|') let (a, b) = (pair[0].parseInt, pair[1].parseInt) discard result.hasKeyOrPut(a, newSeq[int]()) result[a].add b proc solve(input: string): AOCSolution[int, int] = let chunks = input.split("\n\n") let later = parseRules(chunks[0]) for line in chunks[1].splitLines(): let numbers = line.split(',').map(parseInt) let sorted = numbers.sorted(cmp = proc(a,b: int): int = if a in later and b in later[a]: -1 elif b in later and a in later[b]: 1 else: 0 ) if numbers == sorted: result.part1 += numbers[numbers.len div 2] else: result.part2 += sorted[sorted.len div 2]
Codeberg repo
Nice, compact and easy to follow. The implicit
result
object reminds me of Visual Basic.