Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun digits (n) (map 'vector #'digit-char-p (princ-to-string n)))
- (defun num (digits)
- (let ((num 0)
- (wdigits (reverse digits)))
- (loop for digit across digits do
- (incf num digit)
- (setf num (* num 10)))
- (/ num 10)))
- (defun prime-p (num)
- (if (< num 3)
- (equal num 2)
- (not
- (loop for i from 2 to (floor (sqrt num)) do
- (when (zerop (mod num i))
- (return t))))))
- (defun rtrunc (number)
- (labels ((work (dgts)
- (when (prime-p (num dgts))
- (if (equal 1 (length dgts))
- t
- (rtrnc (subseq dgts 0 (1- (length dgts))))))))
- (work (digits number))))
- (defmacro ltrunc (number)
- (labels ((work (dgts)
- (when (prime-p (num dgts))
- (if (equal 1 (length dgts))
- t
- (ltrnc (subseq dgts 1))))))
- (work (digits number))))
- (defun problem-37 ()
- (let ((count 0)
- (current 8)
- (nums nil))
- (loop while (< count 11) do
- (when (and (ltrunc current) (rtrunc current))
- (print current)
- (push current nums)
- (incf count))
- (incf current))
- (reduce #'+ nums)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement