Archive for 2015年6月|Monthly archive page

projecteuler22

projecteuler22

 projecteuler問題22 は、names.txt にある名前をアルファベット順に並べ、全ての名前の順位と名前のアルファベットの値和と積を求め、その総量を求める問題。アルファベットの値は A, B, C,… が 1, 2, 3,… に相当。 
 url にあるデータは get-url で取り出し、sort でソートすれば、後は計算するだけ。繰り返しには dolist でも使いましょうか。文字列の分解には explode が使えます。
 さて、コードは、

(silent)
(setq names (replace "," (parse (get-url "https://projecteuler.net/project/resources/p022_names.txt"))))
(sort names)
(let (res 0)
  (dolist (n names)
    (++ res (* (+ $idx 1) (apply + (map (fn (x) (- x 0x40)) (map char (explode n)))))))
  (println res))

 こんな感じ。これを実行すれば、

871198282

 という答えが得られます。
 silent 文を外せば、names.txt にある名前がすべて表示されます。お好みでどうぞ。
 以上、如何でしょうか?

広告