Powered by AppSignal & Oban Pro

Day 4: Camp Cleanup

2022/day_04.livemd

Day 4: Camp Cleanup

Mix.install([:kino])

input = Kino.Input.textarea("Please paste your input:")

Part 1

Run in Livebook

https://adventofcode.com/2022/day/4

data =
  input
  |> Kino.Input.read()
  |> String.split("\n", trim: true)
  |> Enum.map(&(&1 |> String.split(",")))
  |> Enum.map(fn pair ->
    pair
    |> Enum.map(fn range ->
      range
      |> String.split("-")
      |> Enum.map(fn integer_str -> String.to_integer(integer_str) end)
    end)
  end)
_answer1 =
  data
  |> Enum.filter(fn [range0, range1] ->
    [{range0, range1}, {range1, range0}]
    |> Enum.any?(fn {[start_a, end_a], [start_b, end_b]} ->
      start_a >= start_b and end_a <= end_b
    end)
  end)
  |> Enum.count()

Part 2

https://adventofcode.com/2022/day/4#part2

_answer2 =
  data
  |> Enum.reject(fn [[start_a, end_a], [start_b, end_b]] ->
    start_a > end_b or start_b > end_a
  end)
  |> Enum.count()