[ create a new paste ] login | about

Project: programmingpraxis
Link: http://programmingpraxis.codepad.org/urm4Ud0S    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Jun 13:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
; counting ones

(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 (one? x) (= 1 x))

(let loop ((n 0) (sum 0))
  (when (= n sum) (display sum) (newline))
  (loop (+ n 1) (+ sum (length (filter one? (digits (+ n 1)))))))


Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0
1
199981
199982
199983
199984
199985
199986
199987
199988
199989
199990
200000
200001

Timeout


Create a new paste based on this one


Comments: