; leading digits of powers of 2
(display (expt 2 32)) (newline)
(define (leading-digit two-to-n) ; slow
(- (char->integer (string-ref
(number->string (expt 2 two-to-n)) 0)) 48))
(display (leading-digit 32)) (newline)
(define (leading-digit two-to-n) ; fast
(let* ((q (* (log10 2) two-to-n))
(r (- q (truncate q))))
(let loop ((i 2))
(if (< r (log10 i)) (- i 1)
(loop (+ i 1))))))
(display (leading-digit 32)) (newline)
(define (lead2 n)
(let ((counts (make-vector 10 0)))
(do ((i 0 (+ i 1))) ((= i n) counts)
(let ((d (leading-digit i)))
(vector-set! counts d
(+ (vector-ref counts d) 1))))))
(display (lead2 100000)) (newline)
OyBsZWFkaW5nIGRpZ2l0cyBvZiBwb3dlcnMgb2YgMgoKKGRpc3BsYXkgKGV4cHQgMiAzMikpIChuZXdsaW5lKQoKKGRlZmluZSAobGVhZGluZy1kaWdpdCB0d28tdG8tbikgOyBzbG93CiAgKC0gKGNoYXItPmludGVnZXIgKHN0cmluZy1yZWYKICAgIChudW1iZXItPnN0cmluZyAoZXhwdCAyIHR3by10by1uKSkgMCkpIDQ4KSkKCihkaXNwbGF5IChsZWFkaW5nLWRpZ2l0IDMyKSkgKG5ld2xpbmUpCgooZGVmaW5lIChsZWFkaW5nLWRpZ2l0IHR3by10by1uKSA7IGZhc3QKICAobGV0KiAoKHEgKCogKGxvZzEwIDIpIHR3by10by1uKSkKICAgICAgICAgKHIgKC0gcSAodHJ1bmNhdGUgcSkpKSkKICAgIChsZXQgbG9vcCAoKGkgMikpCiAgICAgIChpZiAoPCByIChsb2cxMCBpKSkgKC0gaSAxKQogICAgICAgIChsb29wICgrIGkgMSkpKSkpKQoKKGRpc3BsYXkgKGxlYWRpbmctZGlnaXQgMzIpKSAobmV3bGluZSkKCihkZWZpbmUgKGxlYWQyIG4pCiAgKGxldCAoKGNvdW50cyAobWFrZS12ZWN0b3IgMTAgMCkpKQogICAgKGRvICgoaSAwICgrIGkgMSkpKSAoKD0gaSBuKSBjb3VudHMpCiAgICAgIChsZXQgKChkIChsZWFkaW5nLWRpZ2l0IGkpKSkKICAgICAgICAodmVjdG9yLXNldCEgY291bnRzIGQKICAgICAgICAgICgrICh2ZWN0b3ItcmVmIGNvdW50cyBkKSAxKSkpKSkpCgooZGlzcGxheSAobGVhZDIgMTAwMDAwKSkgKG5ld2xpbmUp