day 5 puzzle 1

This commit is contained in:
2024-12-05 08:47:15 +01:00
parent 590ba743a1
commit 4fb226448f
7 changed files with 83 additions and 1 deletions

52
src/day5/puzzle1.typ Normal file
View File

@ -0,0 +1,52 @@
#import "/src/utils.typ": *
#let make-rules-dict(rules) = {
let dict = (:)
for rule in rules {
let (a, b) = rule
if a not in dict {
dict.insert(a, ())
}
dict.at(a).push(b)
}
return dict
}
#let is-update-valid(dict, update) = {
for i in range(update.len() - 1) {
let a = str(update.at(i))
for j in range(i + 1, update.len()) {
let b = str(update.at(j))
if a in dict.at(b, default: ()) {
return false
}
}
}
return true
}
#let solve(input) = {
let (rules, updates) = input.split("\n\n")
rules = rules.split("\n").map(l => l.split("|"))
updates = updates.split("\n").map(l => l.split(",").map(int))
let total = 0
let rules-dict = make-rules-dict(rules)
for update in updates {
if is-update-valid(rules-dict, update) {
total += update.at(calc.div-euclid(update.len(), 2))
}
}
return total
}
#show-puzzle(
5, 1,
solve,
example: 143
)

0
src/day5/puzzle2.typ Normal file
View File