Haskell Quiz/PP Pascal/Solution Jethr0
From HaskellWiki
< Haskell Quiz | PP Pascal(Difference between revisions)
m |
(+cat) |
||
| (One intermediate revision not shown.) | |||
| Line 1: | Line 1: | ||
| + | [[Category:Haskell Quiz solutions|PP Pascal]] | ||
Example: | Example: | ||
<pre> | <pre> | ||
> pp_pascal 10 | > 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 | + | 1 8 28 56 70 56 28 8 1 |
| - | 1 | + | 1 9 36 84 126 126 84 36 9 1 |
</pre> | </pre> | ||
| Line 17: | Line 18: | ||
Solution: | Solution: | ||
<haskell> | <haskell> | ||
| + | -- also using the pascal triangle function from [[Blow your Mind]] | ||
pp_pascal n = unlines . map (center . showp) $ pascal | pp_pascal n = unlines . map (center . showp) $ pascal | ||
where pascal = take n $ iterate (\row -> zipWith (+) ([0] ++ row) (row ++ [0])) [1] | where pascal = take n $ iterate (\row -> zipWith (+) ([0] ++ row) (row ++ [0])) [1] | ||
| - | showp = concat . intersperse " | + | showp = concat . intersperse " " . map show |
len = length . showp $ last pascal | len = length . showp $ last pascal | ||
center s = replicate ((len - (length s)) `div` 2) ' ' ++ s | center s = replicate ((len - (length s)) `div` 2) ' ' ++ s | ||
</haskell> | </haskell> | ||
Current revision
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
