Working from left-to-right if no digit is exceeded by the digit to its left it is called an increasing number; for example, 134468.
Similarly if no digit is exceeded by the digit to its right it is called a decreasing number; for example, 66420.
We shall call a positive integer that is neither increasing nor decreasing a "bouncy" number; for example, 155349.
Clearly there cannot be any bouncy numbers below one-hundred, but just over half of the numbers below one-thousand (525) are bouncy. In fact, the least number for which the proportion of bouncy numbers first reaches 50% is 538.
Surprisingly, bouncy numbers become more and more common and by the time we reach 21780 the proportion of bouncy numbers is equal to 90%.
Find the least number for which the proportion of bouncy numbers is exactly 99%.
My Solution
(defun IsBouncyNumber(n)
(let* ((numberstr (format nil "~a" n))
(strlength (- (length numberstr) 2))
(IsUp NIL)
(IsDown NIL))
(loop for i from 0 to strlength
do(progn (if (> (char-int (elt numberstr i))
(char-int (elt numberstr (+ i 1))))
(setq IsDown T)
(progn (if (< (char-int (elt numberstr i))
(char-int (elt numberstr (+ i 1))))
(setq IsUp T))))))
(if (and IsDown IsUp)
T
NIL)))
(defun Euler112(n)
(let ((constnum 99)
(num 0)
(currentnum 0))
(loop for i from 100 to n
do(progn (if (IsBouncyNumber i)
(progn (incf num)
(setq currentnum i)))
(if (= 99 (/ (* num 100) i))
(return currentnum))))))
No comments:
Post a Comment