AOC 2022-04 (Camp Cleanup)
Mix.install([
{:kino, "~> 0.7.0"}
])
Common Code
Input
input = Kino.Input.textarea("Input")
teams =
input
|> Kino.Input.read()
|> String.split()
Part 1
How many elfs have section asignments totally covered by their partner?
Enum.map(teams, fn team ->
team
|> String.split(",")
|> Enum.flat_map(fn assignment ->
assignment
|> String.split("-")
|> Enum.map(&String.to_integer/1)
|> Enum.chunk_every(2)
end)
end)
|> Enum.map(fn [[a1, a2], [b1, b2]] ->
a = MapSet.new(a1..a2)
b = MapSet.new(b1..b2)
cond do
MapSet.subset?(a, b) -> 1
MapSet.subset?(b, a) -> 1
true -> 0
end
end)
|> Enum.sum()
Part 2
How many teams overlap at all?
Enum.map(teams, fn team ->
team
|> String.split(",")
|> Enum.flat_map(fn assignment ->
assignment
|> String.split("-")
|> Enum.map(&String.to_integer/1)
|> Enum.chunk_every(2)
end)
end)
|> Enum.map(fn [[a1, a2], [b1, b2]] ->
a = MapSet.new(a1..a2)
b = MapSet.new(b1..b2)
cond do
MapSet.disjoint?(a, b) -> 0
true -> 1
end
end)
|> Enum.sum()