간단한 숫자/리스트 다루기 연습문제다.
6자리 수 중에 *2/*3/*4/*5/*6 한 것들이 모두 원래의 수랑 같은 숫자들로만 만들어진 하나의 수를 wonderland number라고 하고, 그것을 찾는 문제.
조건을 그대로 코드로 옮기기만 해도 충분하다.
(defn wonderland-number []
(first (filter (fn [n]
(and (hasAllTheSameDigits? n (* 2 n))
(hasAllTheSameDigits? n (* 3 n))
(hasAllTheSameDigits? n (* 4 n))
(hasAllTheSameDigits? n (* 5 n))
(hasAllTheSameDigits? n (* 6 n)))) (range 100000 999999))))
보너스 문제는 1000 이하의 수 중에서 자릿수 세제곱 합과 같은 수를 찾는 것이다. 역시 코드로 옮기기만 하면 된다.
(defn digits [n]
(map #(- (int %) (int \0)) (str n)))
(def specialNumbersUnder1000
(filter (fn [n]
(= n (apply + (map (fn [d] (* d d d)) (digits n))))) (range 1 1000)))
뒤로 갈수록 문제들이 너무 단순해준다.
6자리 수 중에 *2/*3/*4/*5/*6 한 것들이 모두 원래의 수랑 같은 숫자들로만 만들어진 하나의 수를 wonderland number라고 하고, 그것을 찾는 문제.
조건을 그대로 코드로 옮기기만 해도 충분하다.
(defn wonderland-number []
(first (filter (fn [n]
(and (hasAllTheSameDigits? n (* 2 n))
(hasAllTheSameDigits? n (* 3 n))
(hasAllTheSameDigits? n (* 4 n))
(hasAllTheSameDigits? n (* 5 n))
(hasAllTheSameDigits? n (* 6 n)))) (range 100000 999999))))
보너스 문제는 1000 이하의 수 중에서 자릿수 세제곱 합과 같은 수를 찾는 것이다. 역시 코드로 옮기기만 하면 된다.
(defn digits [n]
(map #(- (int %) (int \0)) (str n)))
(def specialNumbersUnder1000
(filter (fn [n]
(= n (apply + (map (fn [d] (* d d d)) (digits n))))) (range 1 1000)))
뒤로 갈수록 문제들이 너무 단순해준다.
댓글 없음:
댓글 쓰기