Day 25
prelude
https://adventofcode.com/2025/day/25
import { inputDay, range } from "./lib/utilities.js"
const parser = inp => {
let locks = inp
.split("\n\n")
.filter(x => x[0] == "#")
.map(lock =>
range(5).map(col =>
lock
.split("\n")
.slice(1)
.map(row => row[col])
.indexOf("."),
),
)
let keys = inp
.split("\n\n")
.filter(x => x[0] == ".")
.map(key =>
range(5).map(col =>
key
.split("\n")
.reverse()
.slice(1)
.map(row => row[col])
.indexOf("."),
),
)
return [locks, keys]
}
const test = parser(
`#####\n.####\n.####\n.####\n.#.#.\n.#...\n.....\n\n#####\n##.##\n.#.##\n...##\n...#.\n...#.\n.....\n\n.....\n#....\n#....\n#...#\n#.#.#\n#.###\n#####\n\n.....\n.....\n#.#..\n###..\n###.#\n###.#\n#####\n\n.....\n.....\n.....\n#....\n#.#..\n#.#.#\n#####`,
)
display(test)
const input = await inputDay(25, { parser })
display(input)
part 1
function fit(lock, key) {
return (
lock[0] + key[0] < 6 &&
lock[1] + key[1] < 6 &&
lock[2] + key[2] < 6 &&
lock[3] + key[3] < 6 &&
lock[4] + key[4] < 6
)
}
function testAll(locks, keys) {
return locks.flatMap(lock => keys.map(key => fit(lock, key))).filter(Boolean)
.length
}
display(testAll(...test))
display(testAll(...input))