Zeckendorf number representation: Difference between revisions

Line 3,572:
end
 
zeckendorf.take(21).each_with_index{|x,i| puts "%3d: %8s"% [i, x]}</lang>
 
{{trans|Python}}
<lang ruby>def zeckendorf(n)
return 0 if n.zero?
fib = [1,2]
fib << fib[-2] + fib[-1] while fib[-1] < n
dig = ""
fib.reverse_each do |f|
if f <= n
dig, n = dig + "1", n - f
else
dig += "0"
end
end
dig.to_i
end
 
for i in 0..20
puts '%3d: %8d' % [i, zeckendorf(i)]
end</lang>
As oneliner.
{{trans|Crystal}}
<lang ruby>def zeckendorf(n)
0.step.lazy.map { |x| bin = x.to_s(2); bin unless bin.include?("11") }.first(n)
end
 
zeckendorf(21).each_with_index{ |x,i| puts "%3d: %8s"% [i, x] }
</lang>
 
{{out}}
<pre>
Line 3,596 ⟶ 3,624:
18: 101000
19: 101001
20: 101010</pre>
</pre>
{{trans|Python}}
<lang ruby>def zeckendorf(n)
return 0 if n.zero?
fib = [1,2]
fib << fib[-2] + fib[-1] while fib[-1] < n
dig = ""
fib.reverse_each do |f|
if f <= n
dig, n = dig + "1", n - f
else
dig += "0"
end
end
dig.to_i
end
 
for i in 0..20
puts '%3d: %8d' % [i, zeckendorf(i)]
end</lang>
(Same output.)
 
=={{header|Scala}}==
Anonymous user