fork download
  1. ; counting digits
  2.  
  3. (define (filter pred? xs)
  4. (let loop ((xs xs) (ys '()))
  5. (cond ((null? xs) (reverse ys))
  6. ((pred? (car xs))
  7. (loop (cdr xs) (cons (car xs) ys)))
  8. (else (loop (cdr xs) ys)))))
  9.  
  10. (define (digits n . args)
  11. (let ((b (if (null? args) 10 (car args))))
  12. (let loop ((n n) (d '()))
  13. (if (zero? n) d
  14. (loop (quotient n b)
  15. (cons (modulo n b) d))))))
  16.  
  17. (define (f lo hi)
  18. (define (is258 d) (or (= d 2) (= d 5) (= d 8)))
  19. (define (cnt n) (length (filter is258 (digits n))))
  20. (do ((n lo (+ n 1)) (c 0 (+ c (cnt n)))) ((< hi n) c)))
  21.  
  22. (display (f 295 305)) (newline)
  23. (display (f 11 100000)) (newline)
Success #stdin #stdout 1.26s 9504KB
stdin
Standard input is empty
stdout
9
149997