Arantium Maestum

プログラミング、囲碁、読書の話題

Clojure入門 - Project Eulerを解いてみる 問8

第八問

非常にでかい数字の連続した13桁の商の最大値を求める。

以下ネタバレ

とりあえず数字をoriginal_stringという文字列として定義。

(require 'clojure.string)

(def s
  (clojure.string/join
    (map #(clojure.string/trim %)
      (clojure.string/split original_string #"\n"))))

(defn chunk-string [coll n]
  (loop [col coll output []]
    (if (< (count col) n)
      output
      (recur (rest col) (conj output (take n col))))))

(defn product-string [input-string]
  (apply *' (map #(Character/digit % 10) input-string)))

(println (apply max (map product-string (chunk-string s 13))))

文字列から改行やスペースを取り除き、13桁ずつのシーケンスに変換し、それらの文字を数字に変換して掛け合わせ、最大値を見つける。

文字列の扱い方はまだ慣れない。StackOverflowなどで変換方法やらなにやらを調べて一歩ずつ手探りである。Javaを知っていたらまだ楽なのだろうが・・・