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))