Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

AoC 2022 - day 06

tradfursten-elixir/day_06.livemd

AoC 2022 - day 06

Mix.install([:kino])

Section

input = Kino.Input.textarea("input")
defmodule Day01 do
  def solve1(input) do
    input
    |> find_message_start(0, 4)
  end

  def solve2(input) do
    input
    |> find_message_start(0, 14)
  end

  defp find_message_start("", pos, _), do: pos

  defp find_message_start(<>, pos, target) do
    case parse_start(MapSet.new([a]), rest, target) do
      true -> pos + target
      false -> find_message_start(rest, pos + 1, target)
    end
  end

  defp parse_start(_, _, 1), do: true

  defp parse_start(set, <>, target) do
    case MapSet.member?(set, b) do
      true -> false
      false -> parse_start(MapSet.put(set, b), rest, target - 1)
    end
  end
end
Kino.Input.read(input) |> Day01.solve1()
Kino.Input.read(input) |> Day01.solve2()