• + 0 comments
    -- Enter your code here. Read input from STDIN. Print output to STDOUT
    import Data.List
    
    generateRow :: Int -> Int -> [[Int]] -> [[Int]]
    generateRow current max list
        | current >= max = []
        | current == 0 = [[1]] ++ (generateRow (current + 1) max [[1]])
        | current == 1 = [[1,1]] ++ (generateRow (current + 1) max [[1,1]])
        | current < max = do
                          let x = ([[1] ++ (addTogether (last list)) ++ [1]])
                          x ++ (generateRow (current + 1) max x)
                          
    addTogether :: [Int] -> [Int]
    addTogether x = (zipWith (+) x (tail x))
    
    generateTriangle :: Int -> IO [[Int]]
    generateTriangle max = return (generateRow 0 max [])
    
    convertLineToInt :: String -> IO Int
    convertLineToInt line = return (read line :: Int)
    
    printTriangle :: [[Int]] -> IO ()
    printTriangle x = case x of
                        [] -> return ()
                        (a:b) -> do
                                 let y = (intercalate " " (map show a))
                                 putStrLn $ y
                                 printTriangle b
    

    main = getLine >>= convertLineToInt >>= generateTriangle >>= printTriangle

    main :: IO () main = getLine >>= convertLineToInt >>= generateTriangle >>= printTriangle