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

AoC 2022 - day 04

tradfursten-elixir/day_04.livemd

AoC 2022 - day 04

Mix.install([:kino])

Section

input = Kino.Input.textarea("input")
defmodule Day01 do
  def solve1(input) do
    input
    |> String.split("\n", trim: true)
    |> Enum.map(&parse/1)
    |> Enum.map(&true_overlap?/1)
    |> Enum.filter(& &1)
    |> Enum.count()
  end

  def solve2(input) do
    input
    |> String.split("\n", trim: true)
    |> Enum.map(&parse/1)
    |> Enum.map(&overlap?/1)
    |> Enum.filter(&(not &1))
    |> Enum.count()
  end

  defp parse(line) do
    line
    |> String.split(",")
    |> Enum.map(&String.split(&1, "-"))
    |> Enum.map(fn arr -> Enum.map(arr, &String.to_integer/1) end)
  end

  defp true_overlap?([[a, b], [c, d]]) do
    cond do
      a >= c and b <= d -> true
      c >= a and d <= b -> true
      true -> false
    end
  end

  defp overlap?([[a, b], [c, d]]) do
    Range.disjoint?(a..b, c..d)
  end
end
Kino.Input.read(input) |> Day01.solve1()
Kino.Input.read(input) |> Day01.solve2()