Haskell Quiz/PP Pascal/Solution Jethr0

From HaskellWiki
< Haskell Quiz‎ | PP Pascal
Revision as of 11:12, 13 January 2007 by Quale (talk | contribs) (+cat)
(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:

-- also using the pascal triangle function from [[Blow your Mind]]
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