読者です 読者をやめる 読者になる 読者になる

Let's write β

趣味で書いたこととか、RustとLispが好き

ソウルナンバー算出

 適当にテレビをみていたらソウルナンバー占いとやらが紹介されていました。
占いは別としてプログラムとしては面白そうだったのでつくってみました

(defn keta-inner [number-str]
  (if (< (Integer/parseInt number-str) 10)
    (Integer/parseInt number-str)
    (keta-inner (str (reduce + 
                             (map #(Integer/parseInt %)
                                  (re-seq #"." number-str)))))))

(defn soul-number [year month day]
  (keta-inner (str year month day)))

適当に書いているので効率とかは重視していません。
というか数値を一度文字列にして各桁に分解してからparseIntしているのが非常に非効率
だとおもうのですが、数字を各桁に分解する効率のいい方法とは何があるのでしょうか?
過去のプログラムでも何回かこういった作業をする必要に駆られているのですが、なにか
いいアルゴリズムはないのでしょうか?
ご存知のかたは教えてください。

僕が働いているAzit.incでは一緒に働けるエンジニアを募集しています!
採用情報 — 株式会社アジット|Azit Inc.