Skip to content

Instantly share code, notes, and snippets.

@sgillis
Created December 31, 2014 13:48
Show Gist options
  • Save sgillis/7d83d8ad5a34f9101a5e to your computer and use it in GitHub Desktop.
Save sgillis/7d83d8ad5a34f9101a5e to your computer and use it in GitHub Desktop.
Sierpinski's Gasket
module Sierpinski where
import Data.List
sierpinski :: Integral a => a -> String
sierpinski = intercalate "\n" . listSierpinski
listSierpinski :: Integral a => a -> [String]
listSierpinski 0 = ["L"]
listSierpinski n = listSierpinski (n-1) ++ duplicate (listSierpinski (n-1))
duplicate :: [String] -> [String]
duplicate [s] = [s ++ " " ++ s]
duplicate ss@(s:ss') = [pad l s ++ " " ++ s] ++ duplicate ss'
where l = maximum . map length $ ss
pad :: Int -> String -> String
pad n s | length s < n = s ++ replicate (n - length s) ' '
| otherwise = s
-- putStrLn $ sierpinski 5
-- L
-- L L
-- L L
-- L L L L
-- L L
-- L L L L
-- L L L L
-- L L L L L L L L
-- L L
-- L L L L
-- L L L L
-- L L L L L L L L
-- L L L L
-- L L L L L L L L
-- L L L L L L L L
-- L L L L L L L L L L L L L L L L
-- L L
-- L L L L
-- L L L L
-- L L L L L L L L
-- L L L L
-- L L L L L L L L
-- L L L L L L L L
-- L L L L L L L L L L L L L L L L
-- L L L L
-- L L L L L L L L
-- L L L L L L L L
-- L L L L L L L L L L L L L L L L
-- L L L L L L L L
-- L L L L L L L L L L L L L L L L
-- L L L L L L L L L L L L L L L L
-- L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment