; counting digits
(define (filter pred? xs)
(let loop ((xs xs) (ys '()))
(cond ((null? xs) (reverse ys))
((pred? (car xs))
(loop (cdr xs) (cons (car xs) ys)))
(else (loop (cdr xs) ys)))))
(define (digits n . args)
(let ((b (if (null? args) 10 (car args))))
(let loop ((n n) (d '()))
(if (zero? n) d
(loop (quotient n b)
(cons (modulo n b) d))))))
(define (f lo hi)
(define (is258 d) (or (= d 2) (= d 5) (= d 8)))
(define (cnt n) (length (filter is258 (digits n))))
(do ((n lo (+ n 1)) (c 0 (+ c (cnt n)))) ((< hi n) c)))
(display (f 295 305)) (newline)
(display (f 11 100000)) (newline)
OyBjb3VudGluZyBkaWdpdHMKCihkZWZpbmUgKGZpbHRlciBwcmVkPyB4cykKICAobGV0IGxvb3AgKCh4cyB4cykgKHlzICcoKSkpCiAgICAoY29uZCAoKG51bGw/IHhzKSAocmV2ZXJzZSB5cykpCiAgICAgICAgICAoKHByZWQ/IChjYXIgeHMpKQogICAgICAgICAgICAobG9vcCAoY2RyIHhzKSAoY29ucyAoY2FyIHhzKSB5cykpKQogICAgICAgICAgKGVsc2UgKGxvb3AgKGNkciB4cykgeXMpKSkpKQoKKGRlZmluZSAoZGlnaXRzIG4gLiBhcmdzKQogIChsZXQgKChiIChpZiAobnVsbD8gYXJncykgMTAgKGNhciBhcmdzKSkpKQogICAgKGxldCBsb29wICgobiBuKSAoZCAnKCkpKQogICAgICAoaWYgKHplcm8/IG4pIGQKICAgICAgICAgIChsb29wIChxdW90aWVudCBuIGIpCiAgICAgICAgICAgICAgICAoY29ucyAobW9kdWxvIG4gYikgZCkpKSkpKQoKKGRlZmluZSAoZiBsbyBoaSkKICAoZGVmaW5lIChpczI1OCBkKSAob3IgKD0gZCAyKSAoPSBkIDUpICg9IGQgOCkpKQogIChkZWZpbmUgKGNudCBuKSAobGVuZ3RoIChmaWx0ZXIgaXMyNTggKGRpZ2l0cyBuKSkpKQogIChkbyAoKG4gbG8gKCsgbiAxKSkgKGMgMCAoKyBjIChjbnQgbikpKSkgKCg8IGhpIG4pIGMpKSkKIAooZGlzcGxheSAoZiAyOTUgMzA1KSkgKG5ld2xpbmUpCihkaXNwbGF5IChmIDExIDEwMDAwMCkpIChuZXdsaW5lKQ==