day-4
Mix.install([
{:kino, "~> 0.7.0"}
])
Input
input = Kino.Input.textarea("Data")
Data
assignments =
input
|> Kino.Input.read()
|> String.split("\n")
|> Stream.map(&String.split(&1, [",", "-"]))
|> Stream.map(fn assignment -> Enum.map(assignment, &String.to_integer/1) end)
|> Stream.map(fn [a1, b1, a2, b2] ->
{MapSet.new(a1..b1), MapSet.new(a2..b2)}
end)
Part 1
Enum.count(assignments, fn {a, b} ->
MapSet.subset?(a, b) || MapSet.subset?(b, a)
end)
Part 2
Enum.count(assignments, fn {a, b} ->
a |> MapSet.intersection(b) |> MapSet.size() > 0
end)