Haskell Quiz/PP Pascal/Solution Jethr0

From HaskellWiki
< Haskell Quiz‎ | PP Pascal
Revision as of 00:35, 21 December 2006 by JohannesAhlmann (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Example:

> pp_pascal 10
                 1
                1  1
              1  2  1
             1  3  3  1
           1  4  6  4  1
         1  5  10  10  5  1
       1  6  15  20  15  6  1
     1  7  21  35  35  21  7  1
   1  8  28  56  70  56  28  8  1
1  9  36  84  126  126  84  36  9  1


Solution:

pp_pascal n = unlines . map (center . showp) $ pascal
    where pascal   = take n $ iterate (\row -> zipWith (+) ([0] ++ row) (row ++ [0])) [1]
          showp    = concat . intersperse "  " . map show
          len      = length . showp $ last pascal
          center s = replicate ((len - (length s)) `div` 2) ' ' ++ s