RosettaCodeData/Task/Zeckendorf-number-representation/Elixir/zeckendorf-number-representation-2.elixir
2016-12-05 22:15:40 +01:00

14 lines
402 B
Text

defmodule Zeckendorf do
def number(n) do
fib_loop(n, [2,1])
|> Enum.reduce({"",n}, fn f,{dig,i} ->
if f <= i, do: {dig<>"1", i-f}, else: {dig<>"0", i}
end)
|> elem(0) |> String.to_integer
end
defp fib_loop(n, fib) when n < hd(fib), do: fib
defp fib_loop(n, [a,b|_]=fib), do: fib_loop(n, [a+b | fib])
end
for i <- 0..20, do: IO.puts "#{i}: #{Zeckendorf.number(i)}"