« Project Euler : Problem 17 | トップページ | Project Euler : Problem 19 »

2010年4月 5日 (月)

Project Euler : Problem 18

 問題はこちらをご覧ください。

 

 今回も、前回 Ruby で解いた時と同じ方針で、下から上に数字をたどって行きました。

nss :: [[Int]] nss = [[75], [95, 64], [17, 47, 82], [18, 35, 87, 10], [20, 04, 82, 47, 65], [19, 01, 23, 75, 03, 34], [88, 02, 77, 73, 07, 63, 67], [99, 65, 04, 28, 06, 16, 70, 92], [41, 41, 26, 56, 83, 40, 80, 70, 33], [41, 48, 72, 33, 47, 32, 37, 16, 94, 29], [53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14], [70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57], [91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48], [63, 66, 04, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31], [04, 62, 98, 27, 23, 09, 70, 98, 73, 93, 38, 53, 60, 04, 23]] problem018 :: Int problem018 = head $ foldr1 plusMax nss where selectMax ns = zipWith max ns (tail ns) plusMax ns1 ns2 = zipWith (+) ns1 (selectMax ns2) main = print problem018

 いろいろ推敲してがんばった結果、かなりシンプルなコードになりました。
 こういった簡潔なコードにまとまるのは Haskell のすごいところかな?でも、Haskell の文法をよく知らない人には、「なんのこっちゃ?」でしょうね。

« Project Euler : Problem 17 | トップページ | Project Euler : Problem 19 »

Haskell」カテゴリの記事

Project Euler」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/48005571

この記事へのトラックバック一覧です: Project Euler : Problem 18:

« Project Euler : Problem 17 | トップページ | Project Euler : Problem 19 »

2016年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

最近のトラックバック

無料ブログはココログ