project euler problem 6

Problem 6 †
最初の10個の自然数について、その和の二乗と、二乗数の和は以下の通り。

1? + 2? + ... + 10? = 385
(1 + 2 + ... + 10)? = 3025
これらの数の差は 3025 - 385 = 2640 となる。

同様にして、最初の100個の自然数について和の二乗と二乗の和の差を求めよ。


合成関数の使い方初めてわかったかも!ほぼワンライナーだったからあまりメリットがなかったw

Prelude> sum $ map (^2) [1..10]
385
Prelude> (sum.map(^2))[1..10]
385
Prelude> (^2)$sum[1..10]
3025
Prelude> ((^2).sum)[1..10]
3025
Prelude> (\x->((^2).sum)x - (sum.map(^2))x)[1..10]
2640
Prelude> (\x->((^2).sum)x - (sum.map(^2))x)[1..20]
41230

本当はラムダ式も消したいところだなぁ。

mainを使った場合

main = (putStrLn.show.(\x->((^2).sum)x - (sum.map(^2))x)) [1..20]