ProjectEular

-- Problem 11

module Main (main) where

main :: IO ()
main = do
    grid_str <- getContents
    print $ problem11 $ to_grid grid_str

problem11 :: [[Int]] -> Int
problem11 = maximum . prods

to_grid :: String -> [[Int]]
to_grid = map (map read . words) . lines

prods :: [[Int]] -> [Int]
prods grid = [ prod4 grid (x,y) (dx,dy) | x <- [0..19], y <- [0..19], (dx,dy) <- [ (1,0), (0,1), (1,1), (-1,1) ] ]

prod4 :: [[Int]] -> (Int,Int) -> (Int,Int) -> Int
prod4 grid (x,y) (dx,dy)
    | not (elem (x + 3*dx) [0..19]) || not (elem (y + 3*dy) [0..19]) = 0
    | otherwise = product [ grid !! (y+t*dy) !! (x+t*dx) | t <- [0..3] ]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS