From b8ef34f841017a574017e151a6874178e7b0c5a6 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:32:27 +0000 Subject: [PATCH] [Sync Iteration] elixir/triangle/1 --- solutions/elixir/triangle/1/lib/triangle.ex | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 solutions/elixir/triangle/1/lib/triangle.ex diff --git a/solutions/elixir/triangle/1/lib/triangle.ex b/solutions/elixir/triangle/1/lib/triangle.ex new file mode 100644 index 0000000..b795919 --- /dev/null +++ b/solutions/elixir/triangle/1/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, a, a), do: {:ok, :equilateral} + def kind(a, b, c) when a + b >= c and b + c >= a and c + a >= b do + case {a, b, c} do + {side, side, _} -> {:ok, :isosceles} + {side, _, side} -> {:ok, :isosceles} + {_, side, side} -> {:ok, :isosceles} + _ -> {:ok, :scalene} + end + end + def kind(_, _, _), do: {:error, "side lengths violate triangle inequality"} +end