Friday, August 21, 2009

Euler Project 38

Take the number 192 and multiply it by each of 1, 2, and 3:

192 × 1 = 192
192 × 2 = 384
192 × 3 = 576

By concatenating each product we get the 1 to 9 pandigital, 192384576. We will call 192384576 the concatenated product of 192 and (1,2,3)

The same can be achieved by starting with 9 and multiplying by 1, 2, 3, 4, and 5, giving the pandigital, 918273645, which is the concatenated product of 9 and (1,2,3,4,5).

What is the largest 1 to 9 pandigital 9-digit number that can be formed as the concatenated product of an integer with (1,2, ... , n) where n > 1?


My Solution
(defun IsPandigital(n)
  (let ((IsPandigitalNum T))
    (loop for i from 1 to 9
         do(if (null (position (format nil "~a" i) n :test #'string=))
                (progn (setq IsPandigitalNum nil)
                (return IsPandigitalNum))))
   IsPandigitalNum))


(defun Eluer38()
  (let ((currentPandigital "")
         (tempstr "")
         (tempPandigital "")
         (currentnumber 0))
    (loop for i from 1 to 10000
         do(progn (loop for j from 1 to 9
                        do(progn (setq tempstr (concatenate 'string
                                                                           tempstr
                                                                           (format nil "~a" (* i j))))
                     (if (= 9 (length tempstr))
                         (setq tempPandigital tempstr))))
                     (if (IsPandigital tempPandigital)
                         (progn (if (> (parse-integer tempPandigital) currentnumber)
                         (setq currentnumber (parse-integer tempPandigital)))))
                      (setq tempPandigital "")
                      (setq tempstr "")))
   currentnumber))

No comments:

Post a Comment