(defun digits (x) (if (< x 10) (cons x '()) (cons (mod x 10) (digits (floor (/ x 10)))))) (defun cubes (size) (defun help (elem acc) (if (< (log (expt elem 3) 10) (- size 1)) acc (help (- elem 1) (cons (expt elem 3) acc)))) (help (floor (expt 10 (/ size 3))) '())) (defun lsum (lst) (defun help (l tot) (if (equal l '()) tot (help (cdr l) (+ tot (car l))))) (help lst 0)) (defun ans (lst) (if (equal lst '()) 0 (let ((digs (sort (digits (car lst)) #'>))) (let ((a (lsum (map 'list #'(lambda (x) (if (equal digs (sort (digits x) #'>)) 1 0)) (cdr lst))))) (if (= a 4) (car lst) (ans (cdr lst))))))) (defun e62 (size) (let ((a (ans (cubes size)))) (if (= a 0) (e62 (+ size 1)) a))) (e62 5)
Tuesday, November 12, 2013
Problem 62 - Lisp
Lisp is a nice language, I personally prefer the Scheme dialect to Common Lisp, but I have no major qualms with it. This problem wasn't too bad...however, my solution right now is pretty slow (~2-3 min). The last time I had this issue (the other day of Prob. 60), I found a way to make the solution much faster the next day...so I will take the same approach here, and consider myself done, but I will look tomorrow to see if I can tweak it or find a better solution.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment