Day 09: Smoke Basin
Problem statement
Setup
Dependencies
Mix.install([
{:nx, "~> 0.1.0-dev", github: "elixir-nx/nx", branch: "main", sparse: "nx"},
{:kino, "~> 0.4.1"}
])
Input
input = Kino.Input.textarea("Paste your input here")
parse_line = fn line ->
line
|> String.graphemes()
|> Enum.map(&String.to_integer/1)
end
heightmap =
input
|> Kino.Input.read()
|> String.split()
|> Enum.map(parse_line)
|> Nx.tensor()
{rows, cols} = Nx.shape(heightmap)
Part 1
heightmap
|> Nx.window_reduce(10, {3, 3}, [padding: :same], fn n, m -> min(n, m) end)
|> Nx.equal(heightmap)
|> Nx.select(Nx.add(heightmap, 1), Nx.tensor(0))
|> IO.inspect(label: "low points:")
|> Nx.sum()
|> Nx.to_number()
Nx