grid_bad 0 _ = 1 grid_bad r c | r == c = 2 * (grid_bad (r-1) c) | otherwise = (grid_bad (r-1) c) + (grid_bad r (c-1)) grid 0 _ = 1 grid 1 n = n + 1 grid 2 n = sum [1..n] + n + 1 grid r c | r == c = 2 * (grid (r-1) c) | otherwise = (grid (r-1) c) + (grid r (c-1)) p15 :: Int -> Int p15 n = grid n n main = putStrLn $ "Solution: " ++ show (p15 20)