2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
16
Task/Sierpinski-triangle/Haskell/sierpinski-triangle-3.hs
Normal file
16
Task/Sierpinski-triangle/Haskell/sierpinski-triangle-3.hs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import Data.List (intersperse)
|
||||
|
||||
sierpinski :: Int -> String
|
||||
sierpinski n = let
|
||||
|
||||
-- Top down, each row after the first is an XOR rewrite
|
||||
rule90 n = (scanl next ['*'] [1..n-1]) where
|
||||
next line _ = zipWith xor (" " ++ line) (line ++ " ")
|
||||
xor l r | l == r = ' ' | otherwise = '*'
|
||||
|
||||
-- Bottom up, each line above the base is indented 1 more space
|
||||
in fst (foldr spacing ("", "") (rule90 (2^n))) where
|
||||
spacing x (s, w) =
|
||||
(concat [w, intersperse ' ' x, "\n", s], w ++ " ")
|
||||
|
||||
main = putStr $ sierpinski 4
|
||||
Loading…
Add table
Add a link
Reference in a new issue