wvogel日記

自分用の技術備忘録が多めです.

Project Euler 8(2)

import Data.List

f8 :: Int -> Int
f8 0 = 1
f8 x = (f8 $x`div`10) * (x`mod`10)

take' :: String -> [Int]
take' xs | length xs < 5 = []
         | otherwise = (f8.read.take 5 $xs):(take'.drop 5 $xs)

euler8 :: String ->Int
euler8 xs = maximum.map (maximum.take') $take 5.tails $xs

main = readFile "file.txt">>= print.euler8


もっと綺麗に書けないかなあと研究してたけど、もう気がついたら4時だし。
いい加減寝る。


コメントで指摘を頂いたとおりです、
問題を読み違えて居ました。
連続する五文字であれば、開始点はどこからでもいいんですね。