Euler : Problem 52

Posted by YpsilonTAKAI On 2011年7月3日日曜日 0 コメント
1から6までの数を掛けてできる数が同じ数字で構成されている数字を見つける問題。

-6を掛けても桁数が変らないということは、たとえば、3桁なら166まで、
  6桁なら16666までということになる
-最上位が1なので、1から6倍した場合、最上位の数は全て異なる数になるので、
  桁数は6以上のはず。

あとは全数チェック。

答を見て、「あー。なんだよ。これかよ」と思った。 ちょっとくやしい。


;;
;; Problem 52 : 2011/6/15
;; "Elapsed time: 3178.80848 msecs"

(defn same-digits? [n m]
(= (sort (num-to-list n))
(sort (num-to-list m))))

(defn pe52-end-num [digit]
(+ (expt 10 digit)
(list-to-num (repeat digit 6))))

(take 1
(drop-while empty?
(for [digits (iterate inc 5)]
(filter #(and (same-digits? % (* 2 %))
(same-digits? % (* 3 %))
(same-digits? % (* 4 %))
(same-digits? % (* 5 %))
(same-digits? % (* 6 %)))
(range (+ (expt 10 digits) 2) (inc (pe52-end-num digits)))))))
;;

0 コメント:

コメントを投稿