Powered by AppSignal & Oban Pro

Day 1

2021/day_01.livemd

Day 1

Common

defmodule Day1 do
  def parse_input(raw_input) do
    raw_input
    |> String.split()
    |> Enum.map(&String.to_integer(String.trim(&1)))
  end
end

Input

Mix.install([{:kino, github: "livebook-dev/kino"}])
textarea = Kino.Input.textarea("Input:")
raw_input = Kino.Input.read(textarea)
input = Day1.parse_input(raw_input)

Part 1

defmodule Day1.Part1 do
  def run(input) do
    Enum.zip_reduce(input, Enum.drop(input, 1), 0, fn
      a, b, increments_count when a < b ->
        increments_count + 1

      _, _, increments_count ->
        increments_count
    end)
  end
end
Day1.Part1.run(input)

Part 2

defmodule Day1.Part2 do
  def run(input) do
    Enum.zip_reduce(input, Enum.drop(input, 3), 0, fn
      a, b, increments_count when a < b ->
        increments_count + 1

      _, _, increments_count ->
        increments_count
    end)
  end
end
Day1.Part2.run(input)