1.4 KiB
1.4 KiB
AOC 2022 - Day 6
Mix.install([
{:req, "~> 0.3.3"}
])
Puzzle description
Input
defmodule Load do
def input do
aoc_session = System.fetch_env!("LB_AOC_SESSION")
input_url = "https://adventofcode.com/2022/day/6/input"
Req.get!(input_url, headers: [cookie: "session=#{aoc_session}"]).body
end
end
Solution
defmodule Marker do
def find(input, marker_length) do
input
|> String.graphemes()
|> Enum.chunk_every(marker_length, 1)
|> Enum.map(&MapSet.new/1)
|> Enum.find_index(&(MapSet.size(&1) == marker_length))
|> Kernel.+(marker_length)
end
end
defmodule Part1 do
@marker_length 4
def run(input) do
input
|> Marker.find(@marker_length)
end
end
defmodule Part2 do
@marker_length 14
def run(input) do
input
|> Marker.find(@marker_length)
end
end
ExUnit.start(autorun: false)
defmodule Test do
use ExUnit.Case, async: true
@example_input ~s(mjqjpqmgbljsphdztnvjfqwrcgsmlb)
@input Load.input()
test "it loads the input" do
assert String.length(@input) > 0
end
test "part 1 example" do
assert Part1.run(@example_input) === 7
end
test "part 1" do
assert Part1.run(@input) === 1093
end
test "part 2 example" do
assert Part2.run(@example_input) === 19
end
test "part 2" do
assert Part2.run(@input) === 3534
end
end
ExUnit.run()