Skip to content

Instantly share code, notes, and snippets.

@swr1bm86
Forked from Xophmeister/sierpinski.hs
Created November 1, 2015 03:54
Show Gist options
  • Save swr1bm86/d82e20c74127bd2b403e to your computer and use it in GitHub Desktop.
Save swr1bm86/d82e20c74127bd2b403e to your computer and use it in GitHub Desktop.
Sierpinski Triangle in Haskell
sumPairs :: [Integer] -> [Integer]
sumPairs (x:y:s) = (x + y) : sumPairs (y:s)
sumPairs _ = []
pascal :: Integer -> [Integer]
pascal 0 = [1]
pascal n = sumPairs $ [0] ++ (pascal $ n - 1) ++ [0]
sierpinski :: Integer -> String
sierpinski n = concat $ map (ascii . odd) $ pascal n
where ascii True = "##"
ascii False = " "
sierpinskiTriangle :: Integer -> [String]
sierpinskiTriangle n = map (centre . sierpinski) [0..n]
where centre line = (spaces padding) ++ line
where padding = 1 + (fromIntegral n) - ((length line) `div` 2)
spaces m = take m [' ',' '..]
main :: IO ()
main = putStr $ unlines $ sierpinskiTriangle 63
##
####
## ##
########
## ##
#### ####
## ## ## ##
################
## ##
#### ####
## ## ## ##
######## ########
## ## ## ##
#### #### #### ####
## ## ## ## ## ## ## ##
################################
## ##
#### ####
## ## ## ##
######## ########
## ## ## ##
#### #### #### ####
## ## ## ## ## ## ## ##
################ ################
## ## ## ##
#### #### #### ####
## ## ## ## ## ## ## ##
######## ######## ######## ########
## ## ## ## ## ## ## ##
#### #### #### #### #### #### #### ####
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
################################################################
## ##
#### ####
## ## ## ##
######## ########
## ## ## ##
#### #### #### ####
## ## ## ## ## ## ## ##
################ ################
## ## ## ##
#### #### #### ####
## ## ## ## ## ## ## ##
######## ######## ######## ########
## ## ## ## ## ## ## ##
#### #### #### #### #### #### #### ####
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
################################ ################################
## ## ## ##
#### #### #### ####
## ## ## ## ## ## ## ##
######## ######## ######## ########
## ## ## ## ## ## ## ##
#### #### #### #### #### #### #### ####
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
################ ################ ################ ################
## ## ## ## ## ## ## ##
#### #### #### #### #### #### #### ####
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
######## ######## ######## ######## ######## ######## ######## ########
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
#### #### #### #### #### #### #### #### #### #### #### #### #### #### #### ####
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
################################################################################################################################
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment