Anonymous user
Zeckendorf number representation: Difference between revisions
→{{header|Ruby}}
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>
▲{{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>
=={{header|Scala}}==
|