From 7ab8bcb91718e94c2a928a519c0a7f4a9b3751be Mon Sep 17 00:00:00 2001 From: "exercism-solutions-syncer[bot]" <211797793+exercism-solutions-syncer[bot]@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:35:22 +0000 Subject: [PATCH] [Sync Iteration] elixir/triangle/2 --- solutions/elixir/triangle/2/lib/triangle.ex | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 solutions/elixir/triangle/2/lib/triangle.ex diff --git a/solutions/elixir/triangle/2/lib/triangle.ex b/solutions/elixir/triangle/2/lib/triangle.ex new file mode 100644 index 0000000..5bb0761 --- /dev/null +++ b/solutions/elixir/triangle/2/lib/triangle.ex @@ -0,0 +1,19 @@ +defmodule Triangle do + @type kind :: :equilateral | :isosceles | :scalene + + @doc """ + Return the kind of triangle of a triangle with 'a', 'b' and 'c' as lengths. + """ + @spec kind(number, number, number) :: {:ok, kind} | {:error, String.t()} + def kind(a, b, c) when a <= 0 or b <= 0 or c <= 0, + do: {:error, "all side lengths must be positive"} + + def kind(a, b, c) when a + b < c or b + c < a or c + a < b, + do: {:error, "side lengths violate triangle inequality"} + + def kind(a, a, a), do: {:ok, :equilateral} + def kind(a, a, _), do: {:ok, :isosceles} + def kind(a, _, a), do: {:ok, :isosceles} + def kind(_, a, a), do: {:ok, :isosceles} + def kind(_, _, _), do: {:ok, :scalene} +end