2
2

More than 5 years have passed since last update.

Project Eulerをhaskellで練習していく日記: Problem 28

Posted at

問題

以下のように中心に1を置き、右回りで2,3,...と数字を置いていく。
p28.png
5x5の正方形になった時点で、赤く示した対角成分の数の和は101となっている。

同様に、この正方形を1001x1001まで巻いていった場合、対角成分の数の和はいくつになるか?

回答

一巻きすると、1->3->7->9と2ずつ増加する。
次の一巻きでは、9->13->17->21->25と4ずつ増加する。
同様にn巻き目では2*nずつ4回増加する。
正方形が1001x1001になった時点では500巻き目なので、こうして構成した増加していく数列の和を求めることにする。

-- 一巻きするときの増分の列
zoubun :: [[Int]]
zoubun = [replicate 4 n|n<-[2,4..]]

main = do
     print $ foldl1 (+) $ scanl (+) 1 $ concat $ take 500 zoubun

感想

増分のルールを見いだすのがちょっとややこしいが、ここまでの他の問題に比べれば簡単なほうかも。
最近、別投稿のコメントで教えてもらったscanl関数が早速役に立ちました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2