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))