Powered by AppSignal & Oban Pro

Day 12

2025/day12.livemd

Day 12

Mix.install([:kino_aoc])

Parsing

{:ok, puzzle_input} =
  KinoAOC.download_puzzle("2025", "12", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
{areas, boxes} =
  puzzle_input
  |> String.split("\n\n")
  |> List.pop_at(-1)
areas =
  areas
  |> String.split("\n")
  |> Enum.map(fn raw ->
    [area | counts] = String.split(raw)

    area =
      area
      |> String.trim(":") 
      |> String.split("x")
      |> Enum.map(&String.to_integer/1)
      |> Enum.product()

    counts = Enum.map(counts, &String.to_integer/1)

    {area, counts}
  end)
boxes =
  boxes
  |> Enum.map(fn <<_::binary-3>> <> rest ->
    rest
    |> String.to_charlist()
    |> Enum.count(&amp;(&amp;1 == ?#))
  end)

Part 1

areas
|> Enum.count(fn {max, counts} ->
  counts
  |> Enum.zip_with(boxes, &amp;*/2)
  |> Enum.sum()
  |> then(&amp; &amp;1 <= max)
end)

Part 2

FIN