Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

day-4

advent_of_code_2022/day4.livemd

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)