Created
September 9, 2012 08:17
-
-
Save notogawa/3683300 to your computer and use it in GitHub Desktop.
第4回 スタートHaskell2 exercise9 Project Euler problem 8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
main = interact $ 値を文字列に変換する . | |
最大値だけを取りだす . | |
最大値プラスアルファを求める . | |
各文字を数値に変換する . | |
各行の文字列を一つに繋げる | |
各行の文字列を一つに繋げる = concat . lines | |
各文字を数値に変換する = map 文字一つを数値に変換する | |
文字一つを数値に変換する = read . (:"") | |
最大値プラスアルファを求める = | |
あるところまでの最大値プラスアルファがわかっているとき | |
列の先頭に数値をひとつくっつけたらどうなるかを計算する | |
まず列が空のときの最大値プラスアルファはこの値になる | |
あるところまでの最大値プラスアルファがわかっているとき = foldr | |
列の先頭に数値をひとつくっつけたらどうなるかを計算する | |
今回先頭にくっつけた値 | |
( 先頭から一つ前までの連続した値の積 | |
, 先頭から二つ前までの連続した値の積 | |
, 先頭から三つ前までの連続した値の積 | |
, 先頭から四つ前までの連続した値の積 | |
, これまでのうちで五つ連続した積の最大値 ) = | |
( 今回先頭にくっつけた値 | |
, 今回先頭にくっつけた値 * 先頭から一つ前までの連続した値の積 | |
, 今回先頭にくっつけた値 * 先頭から二つ前までの連続した値の積 | |
, 今回先頭にくっつけた値 * 先頭から三つ前までの連続した値の積 | |
, 次のふたつのどちらか大きいほう | |
(今回先頭にくっつけた値 * 先頭から四つ前までの連続した値の積) | |
これまでのうちで五つ連続した積の最大値) | |
次のふたつのどちらか大きいほう = max | |
最大値だけを取りだす ( 一つ前までの積 | |
, 二つ前までの積 | |
, 三つ前までの積 | |
, 四つ前までの積 | |
, 五つ連続した積の最大値 ) = 五つ連続した積の最大値 | |
まず列が空のときの最大値プラスアルファはこの値になる = | |
( 先頭から一つ連続した値の積 | |
, 先頭から二つ連続した値の積 | |
, 先頭から三つ連続した値の積 | |
, 先頭から四つ連続した値の積 | |
, 五つ連続した値の積の最大値 ) | |
where | |
先頭から一つ連続した値の積 = 0 -- ここから | |
先頭から二つ連続した値の積 = 0 | |
先頭から三つ連続した値の積 = 0 | |
先頭から四つ連続した値の積 = 0 -- ここまではプラスアルファ | |
五つ連続した値の積の最大値 = 0 -- これが本当に欲しい最大値 | |
値を文字列に変換する = show |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment