In today’s Programming Praxis our task is to neatly display Pascal’s triangle. Let’s get started, shall we?
A quick import to making printing slightly more convenient:
import Text.Printf
Calculating Pascal’s triangle is trivial:
pascal :: [[Integer]] pascal = iterate (\prev -> 1 : zipWith (+) prev (tail prev) ++ [1]) [1]
To display the triangle correctly, we need to prepend the appropriate amount of spacing to each line based on the longest (i.e. last) line.
prettyPascal :: Int -> IO () prettyPascal n = mapM_ (\r -> printf "%*s\n" (div (longest + length r) 2) r) rows where rows = map (unwords . map show) $ take (n + 1) pascal longest = length $ last rows
An that’s all there is to it. A quick test to see if everything is working proprely:
main :: IO () main = prettyPascal 10
Tags: bonsai, code, Haskell, kata, pascal, praxis, programming, triangle
December 6, 2011 at 12:19 pm |
Nice to see you back. Learned so much from your answers. Thanks.