Powered by AppSignal & Oban Pro

Day 06

2022/day-06.livemd

Day 06

Mix.install([
  {:kino, "~> 0.7.0"}
])

example_input =
  Kino.Input.text("example input:")
  |> Kino.render()

real_input = Kino.Input.text("real input:")

Common

parse = fn input ->
  input
  |> Kino.Input.read()
  |> String.split("", trim: true)
end

find_unique = fn input, size ->
  input
  |> Stream.with_index(1)
  |> Stream.chunk_every(size, 1)
  |> Stream.drop_while(fn list ->
    list
    |> Enum.map(&elem(&1, 0))
    |> Enum.uniq()
    |> length()
    |> Kernel.!=(size)
  end)
  |> Enum.take(1)
  |> get_in([Access.at(0), Access.at(-1), Access.elem(1)])
end

Part 1

real_input
|> then(parse)
|> find_unique.(4)

Part 2

real_input
|> then(parse)
|> find_unique.(14)