Powered by AppSignal & Oban Pro

Advent of Code 2022

2022/day06.livemd

Advent of Code 2022

Mix.install([
  {:req, "~> 0.3.2"}
])

Day 6

input =
  "https://adventofcode.com/2022/day/6/input"
  |> Req.get!(headers: [cookie: "session=#{System.get_env("AOC_COOKIE")}"])
  |> Map.get(:body)
letters =
  input
  |> String.split("", trim: true)

Part 1

n = 4
Stream.iterate(0, &(&1 + 1))
|> Enum.reduce_while(letters, fn i, acc ->
  acc
  |> Enum.slice(0..(n - 1))
  |> MapSet.new()
  |> then(fn set ->
    if MapSet.size(set) == n do
      {:halt, i}
    else
      {:cont, tl(acc)}
    end
  end)
end)
|> then(&(&1 + n))

Part 2

n = 14
Stream.iterate(0, &(&1 + 1))
|> Enum.reduce_while(letters, fn i, acc ->
  acc
  |> Enum.slice(0..(n - 1))
  |> MapSet.new()
  |> then(fn set ->
    if MapSet.size(set) == n do
      {:halt, i}
    else
      {:cont, tl(acc)}
    end
  end)
end)
|> then(&(&1 + n))