Skip to content

Latest commit

 

History

History
51 lines (41 loc) · 900 Bytes

day_4.livemd

File metadata and controls

51 lines (41 loc) · 900 Bytes

Day 4

Mix.install([:kino])

Input

input = Kino.Input.textarea("Please put your data here")
input =
  input
  |> Kino.Input.read()
  |> String.split("\n", trim: true)
  |> Enum.map(fn pair ->
    pair
    |> String.split([",", "-"])
    |> Enum.map(&String.to_integer/1)
  end)

Part 1

defmodule Day1 do
  def pair_fully_intersects([s1_start, s1_end, s2_start, s2_end]) do
    sec1_contains_sec2 = s1_start <= s2_start && s1_end >= s2_end
    sec2_contains_sec1 = s2_start <= s1_start && s2_end >= s1_end
    sec1_contains_sec2 || sec2_contains_sec1
  end

  def pair_partially_intersects([s1_start, s1_end, s2_start, s2_end]) do
    !(s2_start > s1_end || s1_start > s2_end)
  end
end
input
|> Enum.count(&Day1.pair_fully_intersects/1)

Part 2

input
|> Enum.count(&Day1.pair_partially_intersects/1)