Zeckendorf number representation: Difference between revisions

→‎{{header|jq}}: modernize (jq 1.5)
(Added Wren)
(→‎{{header|jq}}: modernize (jq 1.5))
Line 2,134:
 
=={{header|jq}}==
{{works with|jq|1.45}}
<lang jq>def zeckendorf:
def rfibsfibs($n):
# rfibs(n) returns an array of fibonnaci numbers up to n,
# beginning with 1, 2, ..., in reverse order
def rfibs(n):
# input: [f(i-2), f(i-1)]
[1,1] | [recurse(select(.[1] if< $n) | [.[1], >=add]) n| then.[1]] empty;
else [.[1], add]
end ) | .[1]] | reverse;
 
# Emit an array of 0s and 1s corresponding to the Zeckendorf encoding
. as $n
# $f should be the relevant Fibonacci numbers in increasing order.
# [n, rfibs, digit ]
|def [$n, rfibsloop($nf), "" ]:
| [ recurse( .[0] as [$n, | .[1$ix] as $f
| ifselect( ($f|length)ix ==> 0-1 then empty)
| $f[$ix] as else$next
| if $f[0]n as>= $next
| if $n >= $next then [ ( $n - $next), $f[ix-1:], "1"]
else [ $n, $f[ix-1:], "0"]
end end)
| .[2] // empty end )]
# remove |leading .[2]0 ]if any:
| if .[10] == "0" then .[21:] else . end # remove leading 0 if any;
 
# state: [$n, rfibsindex_in_fibs, digit ]
fibs(.) as $nf
| [., ($f|length)-1]
| loop($f)
| join("") ;</lang>
 
2,479

edits