Rebol3 Code Examplex


Zeckendorf number representation

Generate and show a table of the Zeckendorf number representations of the decimal numbers zero to twenty, in order.

Rebol [
    title: "Rosetta code: Zeckendorf number representation"
    file:  %Zeckendorf_number_representation.r3
    url:   https://rosettacode.org/wiki/Zeckendorf_number_representation
]

zeckendorf: function [
    "Returns Zeckendorf representation of a non-negative integer"
    n [integer!]
][
    if n = 0 [ return #"0" ]
    fibs: copy [2 1]                     ;; build Fibonacci list down to 1
    while [n > fibs/1] [
        insert fibs fibs/1 + fibs/2      ;; prepend next Fibonacci number
    ]
    result: copy ""
    foreach f fibs [
        append result either f <= n [n: n - f #"1"][#"0"]  ;; greedy fit
    ]
    if result/1 = #"0" [ remove result ] ;; drop leading zero
    result
]

for i 0 20 1 [
    print [pad i -3 "|" zeckendorf i]
]

Output:

  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