Elixir Min Perimeter Rectangle
defmodule MinPerimeterRectangle do
def min_perimeter_rectangle(n), do: loop(1, n, :infinity)
defp loop(i, n, min) when i * i < n do
candidate = if rem(n, i) == 0, do: 2 * (i + div(n, i)), else: nil
min =
cond do
is_nil(candidate) -> min
min == :infinity -> candidate
candidate < min -> candidate
true -> min
end
loop(i + 1, n, min)
end
defp loop(_i, _n, min), do: min
end
This searches factor pairs up to the square root and picks the pair with the smallest perimeter.