; binary gap
(define-syntax while
(syntax-rules ()
((while pred? body ...)
(do () ((not pred?)) body ...))))
(define (gap n)
(while (even? n) (set! n (/ n 2)))
(let loop ((n n) (curr 0) (maxi 0))
(cond ((zero? n) maxi)
((even? n) (loop (/ n 2) (+ curr 1) maxi))
(else (loop (quotient n 2) 0 (max curr maxi))))))
(display (map gap '(9 15 20 529))) (newline)
OyBiaW5hcnkgZ2FwCgooZGVmaW5lLXN5bnRheCB3aGlsZQogIChzeW50YXgtcnVsZXMgKCkKICAgICgod2hpbGUgcHJlZD8gYm9keSAuLi4pCiAgICAgIChkbyAoKSAoKG5vdCBwcmVkPykpIGJvZHkgLi4uKSkpKQoKKGRlZmluZSAoZ2FwIG4pCiAgKHdoaWxlIChldmVuPyBuKSAoc2V0ISBuICgvIG4gMikpKQogIChsZXQgbG9vcCAoKG4gbikgKGN1cnIgMCkgKG1heGkgMCkpCiAgICAoY29uZCAoKHplcm8/IG4pIG1heGkpCiAgICAgICAgICAoKGV2ZW4/IG4pIChsb29wICgvIG4gMikgKCsgY3VyciAxKSBtYXhpKSkKICAgICAgICAgIChlbHNlIChsb29wIChxdW90aWVudCBuIDIpIDAgKG1heCBjdXJyIG1heGkpKSkpKSkKCihkaXNwbGF5IChtYXAgZ2FwICcoOSAxNSAyMCA1MjkpKSkgKG5ld2xpbmUp