Jump to content

One-dimensional cellular automata: Difference between revisions

added Haskell
m (typo)
(added Haskell)
Line 84:
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}}==
life1d=: '_#'{~]@(([:3&(2=+/\)0,],0:)^:a:)
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.