day 19 puzzle 2
This commit is contained in:
parent
5921a90c73
commit
0950e76d8d
BIN
progress.png
BIN
progress.png
Binary file not shown.
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 129 KiB |
@ -35,4 +35,4 @@
|
|||||||
18:
|
18:
|
||||||
stars: 2
|
stars: 2
|
||||||
19:
|
19:
|
||||||
stars: 1
|
stars: 2
|
@ -0,0 +1,46 @@
|
|||||||
|
#import "/src/utils.typ": *
|
||||||
|
|
||||||
|
#let solve(input) = {
|
||||||
|
let (towels, targets) = input.split("\n\n")
|
||||||
|
|
||||||
|
towels = towels.split(", ")
|
||||||
|
let by-initial = (:)
|
||||||
|
for towel in towels {
|
||||||
|
let initial = towel.first()
|
||||||
|
if initial not in by-initial {
|
||||||
|
by-initial.insert(initial, ())
|
||||||
|
}
|
||||||
|
by-initial.at(initial).push(towel)
|
||||||
|
}
|
||||||
|
|
||||||
|
let count(target) = {
|
||||||
|
let initial = target.first()
|
||||||
|
if initial not in by-initial {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
let cnt = 0
|
||||||
|
for towel in by-initial.at(initial) {
|
||||||
|
if towel == target {
|
||||||
|
cnt += 1
|
||||||
|
} else if target.starts-with(towel) {
|
||||||
|
cnt += count(target.slice(towel.len()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cnt
|
||||||
|
}
|
||||||
|
|
||||||
|
let total = 0
|
||||||
|
for target in targets.split("\n") {
|
||||||
|
total += count(target)
|
||||||
|
}
|
||||||
|
return total
|
||||||
|
}
|
||||||
|
|
||||||
|
#show-puzzle(
|
||||||
|
19, 2,
|
||||||
|
solve,
|
||||||
|
example: 16,
|
||||||
|
only-example: true
|
||||||
|
)
|
||||||
|
#show-result(632423618484345)
|
BIN
src/main.pdf
BIN
src/main.pdf
Binary file not shown.
Loading…
Reference in New Issue
Block a user