Haskell Quiz/PP Pascal/Solution Ltriant
From HaskellWiki
Works...kind of; adds a space or two (or three) to the end of each line.
module Main where import System.Environment ( getArgs ) fac n = product [1..n] nck n k = (fac n) `div` ((fac $ n - k) * (fac k)) space_len n = mylength $ show $ (n-1) `nck` ((n-1) `div` 2) mylength = toInteger . length indent n t = (concat $ replicate (fromInteger $ (n-p) * space_len n) " "):t where p = mylength t space_out n t = map (\x -> show x ++ (concat $ replicate (num_spaces x) " ")) t where num_spaces x = fromInteger $ (2 * space_len n) - (mylength $ show x) pp_pascal n = map (concat . indent n . space_out n) $ f 0 n where f acc n | acc == n = [] | otherwise = (map (nck acc) [0..acc]):(f (acc+1) n) main = do args <- getArgs case args of [v] -> mapM_ putStrLn $ pp_pascal (read v :: Integer) _ -> error "No argument specified."
