16 lines
519 B
Text
16 lines
519 B
Text
defmodule Sailor do
|
|
def coconuts(sailor), do: coconuts(sailor, sailor)
|
|
defp coconuts(sailor, nuts) do
|
|
if n = do_coconuts(sailor, nuts, sailor), do: n, else: coconuts(sailor, nuts+sailor)
|
|
end
|
|
|
|
defp do_coconuts(_sailor, nuts, 0), do: nuts
|
|
defp do_coconuts(sailor, nuts, _) when rem(nuts, sailor-1) != 0, do: nil
|
|
defp do_coconuts(sailor, nuts, i) do
|
|
do_coconuts(sailor, nuts + div(nuts, sailor-1) + 1, i-1)
|
|
end
|
|
end
|
|
|
|
Enum.each(2..9, fn sailor ->
|
|
IO.puts "#{sailor}: #{Sailor.coconuts(sailor)}"
|
|
end)
|