31 lines
794 B
Plaintext
31 lines
794 B
Plaintext
defmodule Middle do
|
|
def three(num) do
|
|
n = num |> abs |> to_string
|
|
|
|
case {n,String.length(n) > 2,even?(n)} do
|
|
{n, true, false} ->
|
|
cut(n)
|
|
{_, false, _} ->
|
|
raise "Number must have at least three digits"
|
|
{_, _, true} ->
|
|
raise "Number must have an odd number of digits"
|
|
end
|
|
end
|
|
|
|
defp even?(n), do: rem(String.length(n),2) == 0
|
|
defp cut(n), do: String.slice(n,(div(String.length(n),2) - 1),3)
|
|
end
|
|
|
|
valids = [123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345]
|
|
Enum.each(valids, fn n -> :io.format "~10w : ~s~n", [n, Middle.three(n)] end)
|
|
|
|
errors = [1, 2, -1, -10, 2002, -2002, 0]
|
|
Enum.each(errors, fn n ->
|
|
:io.format "~10w : ", [n]
|
|
try do
|
|
IO.puts Middle.three(n)
|
|
rescue
|
|
e -> IO.puts e.message
|
|
end
|
|
end)
|