Problem 11

http://projecteuler.net/index.php?section=problems&id=11
traih.log様のSmartなコードを参考に.

--Haskell (Input data from STDIN), 20090101

import List (tails, transpose)

horizon, diagonal :: [[Int]] -> Int
horizon = maximum . map (maximum . map (product . take 4) . tails)
diagonal = horizon . transpose . zipWith drop [0..]

process :: [[Int]] -> Int
process = maximum . flip map [horizon, horizon.transpose, diagonal, diagonal.(map reverse)] . flip ($)

main = getContents >>= print . process . map (map read . words) . lines