From 1a6dfdadc5cce9f9ed54046f51c2b6e57e61c2e7 Mon Sep 17 00:00:00 2001 From: Oscar Najera Date: Mon, 5 Dec 2022 01:41:02 +0100 Subject: [AoC2022] 04 Elixir --- AoC2022/04/solver.ex | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 AoC2022/04/solver.ex (limited to 'AoC2022/04/solver.ex') diff --git a/AoC2022/04/solver.ex b/AoC2022/04/solver.ex new file mode 100644 index 0000000..0478795 --- /dev/null +++ b/AoC2022/04/solver.ex @@ -0,0 +1,36 @@ +defmodule Solver do + def to_interval(range) do + [left, right] = String.split(range, "-") + {left, ""} = Integer.parse(left) + {right, ""} = Integer.parse(right) + {left, right} + end + + def contained({a0, a1}, {b0, b1}) do + (a0 - b0) * (a1 - b1) <= 0 + end + + def overlap({a0, a1}, {b0, b1}) do + a0 <= b1 && b0 <= a1 + end +end + +{:ok, input} = File.read("input") + +parsed = + input + |> String.split("\n", trim: true) + |> Enum.map(&String.split(&1, ",")) + |> Enum.map(fn [left, right] -> {Solver.to_interval(left), Solver.to_interval(right)} end) + +parsed +|> Enum.map(fn {left, right} -> Solver.contained(left, right) end) +|> Enum.filter(& &1) +|> length +|> IO.puts() + +parsed +|> Enum.map(fn {left, right} -> Solver.overlap(left, right) end) +|> Enum.filter(& &1) +|> length +|> IO.puts() -- cgit v1.2.3