Powered by AppSignal & Oban Pro

Day 6

2022/day6.livemd

Day 6

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

Setup

input = Kino.Input.textarea("File content")

Common

defmodule Day6 do
  def find_start_of_message(input, start_of_package_marker \\ 4) do
    input
    |> String.split("", trim: true)
    |> Enum.chunk_every(start_of_package_marker, 1, :discard)
    |> Enum.map(fn letters ->
      uniq = MapSet.to_list(MapSet.new(letters))
      length(uniq) === length(letters)
    end)
    |> Enum.find_index(fn val -> val end)
    |> then(&(&1 + start_of_package_marker))
  end
end

Part 1

input
|> Kino.Input.read()
|> Day6.find_start_of_message()

Part 2

input
|> Kino.Input.read()
|> Day6.find_start_of_message(14)