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(&(&1 == ?#))
end)
Part 1
areas
|> Enum.count(fn {max, counts} ->
counts
|> Enum.zip_with(boxes, &*/2)
|> Enum.sum()
|> then(& &1 <= max)
end)
Part 2
FIN