; zeckendorf representation
; reddit.com/r/dailyprogrammer challenge #74 easy
(define (fibs n)
(let loop ((f2 1) (f1 1) (f 2) (fs (list 1 1)))
(if (< n f) fs (loop f1 f (+ f1 f) (cons f fs)))))
(define (zeck n)
(let loop ((n n) (fs (fibs n)) (zs (list)))
(cond ((= (car fs) n) (cons (car fs) zs))
((< (car fs) n)
(loop (- n (car fs)) (cdr fs)
(cons (car fs) zs)))
(else (loop n (cdr fs) zs)))))
(display (zeck 100)) (newline)
(display (zeck (expt 3 15))) (newline)
(time (display (length (zeck (expt 10 100)))))