shokosブログ

プログラミング

Haskellでプロジェクトオイラーを問いて解説するスレ

shokos Advent Calendar 2012七日目

プロジェクトオイラー
たまにやると頭の体操になっておもしろい。筋トレ感覚。

第一問

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.

訳:1000未満の、3または5の倍数の和を求めよ。


Haskellで書くとこうなります。

sum [x | x <- [1..999], x `mod` 3 == 0 || x `mod` 5 == 0]


今会社でやっているHaskell勉強会のいい問題になると思うので、軽く解説。

[x | x <- [1..999], x `mod` 3 == 0 || x `mod` 5 == 0]

これはリスト内包表記です。
第一回の勉強会で解説しました。http://shokos.hatenablog.com/entry/2012/12/04/222447
すごいH本だと一章に出てきます。

x <- [1..999]こちらも上記で説明しています。 [1,2,3..998,999]のリストを定義しています。
つまり、1~999の整数で、3で割り切れるものまたは5で割り切れるものを探して、sumしています。

簡単にワンライナーで解けちゃいます!やったね!