Powered by AppSignal & Oban Pro

🎄 Year 2022 🔔 Day 04

elixir/notebooks/2022/day04.livemd

🎄 Year 2022 🔔 Day 04

Parse input

filename = "#{__DIR__}/../../../inputs/2022/day04.txt"

parsed_input_stream =
  File.stream!(filename)
  |> Enum.map(&String.trim/1)
  |> Enum.map(fn line ->
    String.split(line, ",")
    |> Enum.flat_map(&String.split(&1, "-"))
    |> Enum.map(&String.to_integer/1)
  end)

Part One

parsed_input_stream
|> Enum.filter(fn [s1, e1, s2, e2] ->
  (s1 >= s2 && e1 <= e2) || (s2 >= s1 && e2 <= e1)
end)
|> Enum.count()

Part two

parsed_input_stream
|> Enum.filter(fn [s1, e1, s2, e2] ->
  (s1 >= s2 && s1 <= e2) ||
    (e1 >= s2 && e1 <= e2) ||
    (s2 >= s1 && s2 <= e1) ||
    (e2 >= s1 && s2 <= e1)
end)
|> Enum.count()