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