Skip to content

Instantly share code, notes, and snippets.

@notogawa
Created September 9, 2012 08:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save notogawa/3683300 to your computer and use it in GitHub Desktop.
Save notogawa/3683300 to your computer and use it in GitHub Desktop.
第4回 スタートHaskell2 exercise9 Project Euler problem 8
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