One-dimensional cellular automata: Difference between revisions
Content added Content deleted
m (typo) |
(added Haskell) |
||
Line 84: | Line 84: | ||
Generation 9 : __##________________</pre> |
Generation 9 : __##________________</pre> |
||
=={{header|Haskell}}== |
|||
<pre> |
|||
module Life1D where |
|||
import Data.List |
|||
import System.Random |
|||
import Control.Monad |
|||
import Control.Arrow |
|||
bnd :: [Char] -> Char |
|||
bnd bs = |
|||
case bs of |
|||
"_##" -> '#' |
|||
"#_#" -> '#' |
|||
"##_" -> '#' |
|||
_ -> '_' |
|||
donxt xs = unfoldr(\xs -> case xs of [_,_] -> Nothing ; |
|||
_ -> Just (bnd $ take 3 xs, drop 1 xs)) $ '_':xs++"_" |
|||
lahmahgaan xs = init.until (liftM2 (==) last (last. init)) (ap (++)(return. donxt. last)) $ [xs, donxt xs] |
|||
main = do |
|||
g <- newStdGen |
|||
let oersoep = map ("_#"!!). take 36 $ randomRs(0,1) g |
|||
mapM_ print . lahmahgaan $ oersoep |
|||
</pre> |
|||
Some output: |
|||
<pre> |
|||
*Life1D> mapM_ print . lahmahgaan $ "_###_##_#_#_#_#__#__" |
|||
"_###_##_#_#_#_#__#__" |
|||
"_#_#####_#_#_#______" |
|||
"__##___##_#_#_______" |
|||
"__##___###_#________" |
|||
"__##___#_##_________" |
|||
"__##____###_________" |
|||
"__##____#_#_________" |
|||
"__##_____#__________" |
|||
"__##________________" |
|||
*Life1D> main |
|||
"__##_##__#____###__#__#_______#_#_##" |
|||
"__#####_______#_#______________#_###" |
|||
"__#___#________#________________##_#" |
|||
"________________________________###_" |
|||
"________________________________#_#_" |
|||
"_________________________________#__" |
|||
"____________________________________" |
|||
</pre> |
|||
=={{header|J}}== |
=={{header|J}}== |
||
life1d=: '_#'{~]@(([:3&(2=+/\)0,],0:)^:a:) |
life1d=: '_#'{~]@(([:3&(2=+/\)0,],0:)^:a:) |