のてすきあ − 完全独習非プログラマー −

Haskell で Project Euler を解く素人遊び

Problem 16

21000の各桁の和を求める。
例) 215 = 32768 → 3+2+7+6+8 = 26

21000ともなるとかなり巨大な数になることが予想されるが、全く問題ない。だって僕達にはIntegerがあるんだから。

数字を桁ごとに分ける操作 breakToDigits がちょっとした小技かも知れない。これは Problem 8 で苦悶した経験が活きた。

mitstream.hatenablog.jp

breakToDigits に型変数を使っているのは、将来的にInt型をInteger型の両方を使うことになりそうだからだ。問題数もある程度進んできたので、繰り返し使う関数は今後モジュール化していきたいというのが念頭にある。

…とか言うてたら、実は Char -> Int 型の関数Data.Char.digitToIntを使うともっと簡単だと気付いた。意味のわからないreturnなど導入しなくても、map digitToInt で事足りる。今後はそうしようか。

Integer バンザイ☆