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

Day 4

day_04/day_4.livemd

Day 4

Mix.install([
  {:kino, "~> 0.7.0"}
])

Section

input = Kino.Input.textarea("input")
defmodule AOC do
  @input Kino.Input.read(input)

  defp parse(row_input) do
    row_input
    |> String.split("\n")
    |> Enum.map(fn s ->
      String.split(s, ",")
      |> Enum.map(fn s ->
        String.split(s, "-")
      end)
      |> Enum.map(fn [a, b] ->
        Range.new(String.to_integer(a), String.to_integer(b)) |> Enum.to_list()
      end)
    end)
  end

  def run(input \\ @input) do
    part_one =
      input
      |> parse
      |> Enum.count(fn [a, b] ->
        a -- b == [] or b -- a == []
      end)

    part_two =
      input
      |> parse
      |> Enum.count(fn [a, b] ->
        intersect = MapSet.intersection(MapSet.new(a), MapSet.new(b))
        not Enum.empty?(intersect)
      end)

    IO.puts("Part one result: #{part_one}\nPart two result: #{part_two}")
  end
end

AOC.run()