Advent of Code 2021 day 01
Section
Mix.install([
{:kino, github: "livebook-dev/kino"},
{:nx, github: "elixir-nx/nx", sparse: "nx"}
])
Part 1
input = Kino.Input.textarea("Please paste your input file:")
input
|> Kino.Input.read()
|> String.splitter("\n", trim: true)
|> Stream.map(&String.to_integer/1)
|> Stream.chunk_every(2, 1, :discard)
|> Enum.count(fn [left, right] -> right > left end)
Part 2
input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(&String.to_integer/1)
# |> Enum.chunk_every(3, 1, :discard)
# |> Enum.chunk_every(2, 1, :discard)
# |> Enum.count(fn [[left, m1, m2], [m1, m2, right]] -> right > left end)
|> Enum.chunk_every(4, 1, :discard)
|> Enum.count(fn [left, _m1, _m2, right] -> right > left end)
Part 1 - Nx
tensor =
input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(&String.to_integer/1)
|> Nx.tensor()
Nx.greater(tensor[1..-1//1], tensor[0..-2//1])
|> Nx.sum()
|> Nx.to_scalar()
Part 2 - Nx
input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(&String.to_integer/1)
|> Nx.tensor()
|> Nx.window_sum({3})
|> then(fn tensor ->
Nx.greater(tensor[1..-1//1], tensor[0..-2//1])
end)
|> Nx.sum()
|> Nx.to_scalar()