Day 1: Sonar Sweep
Setup
Mix.install([:kino, :nx])
input = Kino.Input.textarea("Please paste your input:")
inputs =
input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(&String.to_integer/1)
Part 1
https://adventofcode.com/2021/day/1
Solve: Part 1
inputs
|> Enum.chunk_every(2, 1, :discard)
|> Enum.filter(fn [n0, n1] -> n1 > n0 end)
|> Enum.count()
Solve: Part1 - Nx
inputs
|> Nx.tensor()
|> then(fn tensor ->
Nx.greater(tensor[1..-1//1], tensor[0..-2//1])
end)
|> Nx.sum()
|> Nx.to_number()
Part 2
https://adventofcode.com/2021/day/1#part2
Solve: Part 2
inputs
|> Enum.chunk_every(3, 1, :discard)
|> Enum.map(&Enum.sum/1)
|> Enum.chunk_every(2, 1, :discard)
|> Enum.filter(fn [n0, n1] -> n1 > n0 end)
|> Enum.count()
# better
inputs
|> Enum.chunk_every(4, 1, :discard)
|> Enum.filter(fn [n0, _n1, _n2, n3] -> n3 > n0 end)
|> Enum.count()
Solve: Part 2 - Nx
inputs
|> Nx.tensor()
|> Nx.window_sum({3})
|> then(fn tensor ->
Nx.greater(tensor[1..-1//1], tensor[0..-2//1])
end)
|> Nx.sum()
|> Nx.to_number()