Euler : Problem 22

Posted by YpsilonTAKAI On 2011年5月11日水曜日 0 コメント


こんな問題もあるんだねって感じ。

ただ順に処理するぐらいしか方法はなさそうなのでその通りにやったんだけれど、
文字->数字変換のところで、文字の16進表現から直接値を出そうかと思ったけど、
そういうのに依存するのってどうなの?と思ったので、mapで表を作ったのが
工夫といえば工夫かな。

Javaの関数をいくつか呼んでる。


;;
;; Problem 22 : 2011/5/9
;; "Elapsed time: 49.662736 msecs"

(use '[clojure.contrib.duck-streams :only (reader read-lines)])

(def char-val '{
\A 1 \B 2 \C 3 \D 4 \E 5
\F 6 \G 7 \H 8 \I 9 \J 10
\K 11 \L 12 \M 13 \N 14 \O 15
\P 16 \Q 17 \R 18 \S 19 \T 20
\U 21 \V 22 \W 23 \X 24 \Y 25
\Z 26})


(defn calc-words [list]
(let [[word num] list]
(* (reduce + (map char-val word)) num)))


(let [file-data (with-open [] (read-lines "D:/xxx/names.txt"))
name-list (.split (.replaceAll (first file-data) "\"" "") ",")]
(reduce +
(map calc-words
(map list (sort name-list) (iterate inc 1)))))

;;

0 コメント:

コメントを投稿