Powered by AppSignal & Oban Pro

Day 1: Sonar Sweep

2021/day_01_sonar_sweep.livemd

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()