Created
January 8, 2011 01:01
-
-
Save bavardage/770395 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*Main Data.Bits> printRuleLines 20 90 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] | |
# | |
# # | |
# # | |
# # # # | |
# # | |
# # # # | |
# # # # | |
# # # # # # # # | |
# # | |
# # # # | |
# # # # | |
# # # # # # # # | |
# # # # | |
# # # # # # # # | |
# # # # # # # # | |
# # # # # # # # # # # # # # # # | |
# # | |
# # # # | |
# # # # | |
# # # # # # # # | |
import Data.Bits | |
threes :: [a] -> [(a,a,a)] | |
threes (x:y:z:xs) = (x,y,z) : threes (y:z:xs) | |
threes (x:y:[]) = [] | |
firstThree (x:y:xs) = (last xs,x,y) | |
lastThree (x:xs) = last $ threes (xs ++ [x]) | |
neighbourStates :: [a] -> [(a,a,a)] | |
neighbourStates xs = firstThree xs : threes xs ++ [lastThree xs] | |
transition :: Int -> (Int,Int,Int) -> Int | |
transition rule (l,c,r) = if (2^(l*4 + c*2 + r) .&. rule) == 0 | |
then 0 | |
else 1 | |
step rule xs = map (transition rule) $ neighbourStates xs | |
showState (1:xs) = '#' : showState xs | |
showState (0:xs) = ' ' : showState xs | |
showState [] = "" | |
printRuleLines n r xs = mapM_ putStrLn $ map showState $ take n $ iterate (step r) xs |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment