SHOW:
|
|
- or go back to the newest paste.
1 | (defun digits (n &optional (b 10)) | |
2 | (loop for i = n then (floor i b) with lst = () | |
3 | do (push (mod i b) lst) | |
4 | while (> i (1- b)) | |
5 | finally (return lst))) | |
6 | ||
7 | (defun onep (n) (equal 1 n)) | |
8 | (defun count-ones (n) | |
9 | - | (reduce #'+ (remove-if-not #'onep (digits n)))) |
9 | + | (reduce #'+ (remove-if-not #'onep (digits n)))) |
10 | ||
11 | (defun count-ones-find (fun) | |
12 | (loop for i = 1 then (1+ i) with sum = 0 | |
13 | do (progn | |
14 | (setf sum (+ sum (funcall fun i)))) | |
15 | until (and (> i 1) (equal i sum)) | |
16 | finally (return i))) | |
17 | ||
18 | ; CL-USER> (time (count-ones-find #'count-ones)) | |
19 | ; Evaluation took: | |
20 | ; 0.081 seconds of real time | |
21 | ; 0.084005 seconds of total run time (0.084005 user, 0.000000 system) | |
22 | ; 103.70% CPU | |
23 | ; 248,871,367 processor cycles | |
24 | ; 23,818,080 bytes consed | |
25 | ; | |
26 | ; 199981 |