Difference between revisions of "Haskell Quiz/PP Pascal/Solution Jethr0"
< Haskell Quiz | PP Pascal
Jump to navigation
Jump to search
m |
m (using 3 spaces to make the triangle more symmetrical) |
||
Line 2: | Line 2: | ||
<pre> |
<pre> |
||
> pp_pascal 10 |
> pp_pascal 10 |
||
− | 1 |
+ | 1 |
− | 1 1 |
+ | 1 1 |
− | 1 2 1 |
+ | 1 2 1 |
− | 1 3 3 1 |
+ | 1 3 3 1 |
− | 1 4 6 4 1 |
+ | 1 4 6 4 1 |
− | 1 5 10 10 5 1 |
+ | 1 5 10 10 5 1 |
− | 1 6 15 20 15 6 1 |
+ | 1 6 15 20 15 6 1 |
− | 1 7 21 35 35 21 7 1 |
+ | 1 7 21 35 35 21 7 1 |
− | 1 8 28 56 70 56 28 8 1 |
+ | 1 8 28 56 70 56 28 8 1 |
− | 1 9 36 84 126 126 84 36 9 1 |
+ | 1 9 36 84 126 126 84 36 9 1 |
</pre> |
</pre> |
||
Line 17: | Line 17: | ||
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 " " . map show |
+ | 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 |
Revision as of 00:48, 21 December 2006
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