Zeckendorf number representation: Difference between revisions
Content added Content deleted
(Add MATLAB implementation) |
(Add Erlang implementation) |
||
Line 2,353: | Line 2,353: | ||
for i <- 0..20, do: IO.puts "#{i}: #{Zeckendorf.number(i)}"</syntaxhighlight> |
for i <- 0..20, do: IO.puts "#{i}: #{Zeckendorf.number(i)}"</syntaxhighlight> |
||
same output |
same output |
||
=={{header|Erlang}}== |
|||
{{trans|Elixir}} |
|||
<syntaxhighlight lang="Erlang"> |
|||
% Function to generate a list of the first N Zeckendorf numbers |
|||
number(N) -> |
|||
number_helper(N, 0, 0, []). |
|||
number_helper(0, _, _, Acc) -> |
|||
lists:reverse(Acc); |
|||
number_helper(N, Curr, Index, Acc) -> |
|||
case zn_loop(Curr) of |
|||
{Bin, Next} -> |
|||
number_helper(N - 1, Next, Index + 1, [{Bin, Index} | Acc]) |
|||
end. |
|||
% Helper function to find the next Zeckendorf number |
|||
zn_loop(N) -> |
|||
Bin = my_integer_to_binary(N), |
|||
case re:run(Bin, "11", [{capture, none}]) of |
|||
match -> |
|||
zn_loop(N + 1); |
|||
nomatch -> |
|||
{Bin, N + 1} |
|||
end. |
|||
% Convert an integer to its binary representation as a string |
|||
my_integer_to_binary(N) -> |
|||
lists:flatten(io_lib:format("~.2B", [N])). |
|||
% Test function to output the first 21 Zeckendorf numbers |
|||
main([]) -> |
|||
ZnNumbers = number(21), |
|||
lists:foreach( |
|||
fun({Zn, I}) -> |
|||
io:format("~p: ~s~n", [I, Zn]) |
|||
end, ZnNumbers). |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
0: 0 |
|||
1: 1 |
|||
2: 10 |
|||
3: 100 |
|||
4: 101 |
|||
5: 1000 |
|||
6: 1001 |
|||
7: 1010 |
|||
8: 10000 |
|||
9: 10001 |
|||
10: 10010 |
|||
11: 10100 |
|||
12: 10101 |
|||
13: 100000 |
|||
14: 100001 |
|||
15: 100010 |
|||
16: 100100 |
|||
17: 100101 |
|||
18: 101000 |
|||
19: 101001 |
|||
20: 101010 |
|||
</pre> |
|||
=={{header|F_Sharp|F#}}== |
=={{header|F_Sharp|F#}}== |