Powered by AppSignal & Oban Pro

Day 4: Camp Cleanup -- AoC 22

2022/04.livemd

Day 4: Camp Cleanup -- AoC 22

stream = File.stream!("/Users/pw/src/weiland/adventofcode/2022/input/04.txt")
%File.Stream{
  path: "/Users/pw/src/weiland/adventofcode/2022/input/04.txt",
  modes: [:raw, :read_ahead, :binary],
  line_or_bytes: :line,
  raw: true
}

Part One

convert_to_pairs = fn line ->
  line
  |> String.replace("\n", "")
  |> String.split(~r/,|-/)
  |> Enum.map(&String.to_integer(&1))
end

is_fully_contained = fn [rmin, rmax, lmin, lmax] ->
  (rmin <= lmin && rmax >= lmax) ||
    (lmin <= rmin && lmax >= rmax)
end

stream
|> Stream.map(convert_to_pairs)
|> Stream.filter(is_fully_contained)
|> Enum.count()
509

Part Two

is_partially_contained = fn [rmin, rmax, lmin, lmax] ->
  lmax >= rmin && lmin <= rmax
end

stream
|> Stream.map(convert_to_pairs)
|> Stream.filter(is_partially_contained)
|> Enum.count()
870