~dieggsy/project-euler

394f2225e9d716c9fd494b960a058dea6b5304cd — dieggsy 2 years ago affcc93
Add p65 solution in lisp
2 files changed, 38 insertions(+), 0 deletions(-)

R data/{p81-matrix.txt => matrix.txt}
A sbcl/p65.lisp
R data/p81-matrix.txt => data/matrix.txt +0 -0
A sbcl/p65.lisp => sbcl/p65.lisp +38 -0
@@ 0,0 1,38 @@
#!/usr/bin/sbcl --script
(setf *print-circle* t)

(defun inf-frac (head repeat)
  (let ((lst (cons head repeat)))
    (setf (cdr (last (cdr lst)))
          (cdr lst))
    lst))
(defparameter sqrt2-conv
  (inf-frac 1 '(2)))

(defparameter e-conv
  (cons 2
        (loop :for i = 1 :then (+ 1 i)
              :until (> i 34)
              :append `(1 ,(* 2 i) 1))))

(defun get-value (n conv)
  (if (= n 0)
      (car conv)
      (labels ((helper (n lst)
                 (/ 1
                    (+ (car lst)
                       (if (= n 0)
                           0
                           (helper (1- n) (cdr lst)))))))
        (+ (car conv)
           (helper (1- n) (cdr conv))))))

(defun p65 ()
  (let ((num (numerator (get-value 99 e-conv))))
    (loop :for n = num :then x
          :as (x y) = (multiple-value-list (floor n 10))
          :until (= x 0)
          :sum y :into sum
          :finally (return (+ sum y)))))

(time (princ (p65)))