One-dimensional cellular automata: Difference between revisions

m
syntax highlighting fixup automation
m (syntax highlighting fixup automation)
Line 19:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">V gen = ‘_###_##_#_#_#_#__#__’.map(ch -> Int(ch == ‘#’))
L(n) 10
print(gen.map(cell -> (I cell != 0 {‘#’} E ‘_’)).join(‘’))
gen = [0] [+] gen [+] [0]
gen = (0 .< gen.len - 2).map(m -> Int(sum(:gen[m .+ 3]) == 2))</langsyntaxhighlight>
 
{{out}}
Line 40:
 
=={{header|8th}}==
<langsyntaxhighlight lang="forth">
\ one-dimensional automaton
 
Line 73:
bye
 
</syntaxhighlight>
</lang>
 
=={{header|ACL2}}==
<langsyntaxhighlight lang="lisp">(defun rc-step-r (cells)
(if (endp (rest cells))
nil
Line 108:
nil
(prog2$ (pretty-row (first out))
(pretty-output (rest out)))))</langsyntaxhighlight>
 
=={{header|Action!}}==
<langsyntaxhighlight Actionlang="action!">CHAR FUNC CalcCell(CHAR prev,curr,next)
IF prev='. AND curr='# AND next='# THEN
RETURN ('#)
Line 148:
FI
OD
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/One-dimensional_cellular_automata.png Screenshot from Atari 8-bit computer]
Line 165:
 
=={{header|Ada}}==
<langsyntaxhighlight lang="ada">with Ada.Text_IO; use Ada.Text_IO;
 
procedure Cellular_Automata is
Line 206:
Step (Culture);
end loop;
end Cellular_Automata;</langsyntaxhighlight>
 
The implementation defines Petri dish type with Boolean items
Line 231:
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny]}}
{{wont work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d] - due to extensive use of FORMATted transput}}
<langsyntaxhighlight lang="algol68">INT stop generation = 9;
INT universe width = 20;
FORMAT alive or dead = $b("#","_")$;
Line 273:
FI;
universe := next universe
OD</langsyntaxhighlight>
{{out}}
<pre>
Line 293:
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny]}}
{{wont work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d] - due to extensive use of FORMATted transput}}
<langsyntaxhighlight lang="algol68">INT stop generation = 9;
INT upb universe = 20;
FORMAT alive or dead = $b("#","_")$;
Line 327:
next universe[UPB universe] := couple(universe[UPB universe - 1: ]);
universe := next universe
OD</langsyntaxhighlight>
{{out}}
<pre>
Line 344:
=={{header|ALGOL W}}==
Using a string to represent the cells and stopping when the next state is th same as the previous one.
<langsyntaxhighlight lang="algolw">begin
string(20) state;
string(20) nextState;
Line 363:
generation := generation + 1
end while_not_finished
end.</langsyntaxhighlight>
{{out}}
<pre>
Line 379:
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">evolve: function [arr][
ary: [0] ++ arr ++ [0]
ret: new []
Line 405:
newGen: evolve arr
printIt newGen
]</langsyntaxhighlight>
 
{{out}}
Line 421:
=={{header|AutoHotkey}}==
ahk [http://www.autohotkey.com/forum/viewtopic.php?t=44657&postdays=0&postorder=asc&start=147 discussion]
<langsyntaxhighlight lang="autohotkey">n := 22, n1 := n+1, v0 := v%n1% := 0 ; set grid dimensions, and fixed cells
 
Loop % n { ; draw a line of checkboxes
Line 443:
 
GuiClose: ; exit when GUI is closed
ExitApp</langsyntaxhighlight>
 
=={{header|AWK}}==
 
<langsyntaxhighlight lang="awk">#!/usr/bin/awk -f
BEGIN {
edge = 1
Line 516:
}
}
</syntaxhighlight>
</lang>
 
{{out}}
Line 532:
</pre>
 
<langsyntaxhighlight lang="awk">Another new solution (twice size as previous solution) :
cat automata.awk :
 
Line 575:
} while (str_ != str_previous)
}
</syntaxhighlight>
</lang>
 
{{out}}
Line 596:
{{works with|QuickBasic|4.5}}
{{trans|Java}}
<langsyntaxhighlight lang="qbasic">DECLARE FUNCTION life$ (lastGen$)
DECLARE FUNCTION getNeighbors! (group$)
CLS
Line 648:
NEXT i
life$ = newGen$
END FUNCTION</langsyntaxhighlight>
{{out}}
<pre>Generation 0 : _###_##_#_#_#_#__#__
Line 662:
 
==={{header|FreeBASIC}}===
<langsyntaxhighlight lang="freebasic">#define SIZE 640
 
randomize timer
Line 704:
'or Q to exit
loop
wend</langsyntaxhighlight>
 
==={{header|Sinclair ZX81 BASIC}}===
Works with the unexpanded (1k RAM) ZX81.
<langsyntaxhighlight lang="basic"> 10 LET N$="01110110101010100100"
20 LET G=1
30 PRINT N$
Line 726:
170 NEXT I
180 LET G=G+1
190 IF N$<>O$ THEN GOTO 40</langsyntaxhighlight>
{{out}}
The program overwrites each cell on the screen as it updates it (which it does quite slowly—there is no difficulty about watching what it is doing), with a counter to the right showing the generation it is currently working on. When it is part of the way through, for example, the display looks like this:
Line 734:
 
=={{header|BASIC256}}==
<langsyntaxhighlight BASIC256lang="basic256">arraybase 1
dim start = {0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0}
dim sgtes(start[?]+1)
Line 749:
start[j] = sgtes[j]
next j
next k</langsyntaxhighlight>
 
=={{header|Batch File}}==
This implementation will not stop showing generations, unless the cellular automata is already stable.
<langsyntaxhighlight lang="dos">@echo off
setlocal enabledelayedexpansion
 
Line 810:
set proc=%newgen%
goto :nextgen
::/THE (LLLLLLOOOOOOOOOOOOONNNNNNNNGGGGGG.....) PROCESSOR</langsyntaxhighlight>
{{out}}
<pre> | __###__##_#_##_###__######_###_#####_#__##_____#_#_#######__ |
Line 824:
 
=={{header|BBC BASIC}}==
<langsyntaxhighlight lang="bbcbasic"> DIM rule$(7)
rule$() = "0", "0", "0", "1", "0", "1", "1", "0"
Line 836:
NEXT cell%
SWAP now$, next$
NEXT generation%</langsyntaxhighlight>
{{out}}
<pre>Generation 0: 01110110101010100100
Line 850:
 
=={{header|Befunge}}==
<langsyntaxhighlight lang="befunge">v
" !!! !! ! ! ! ! ! " ,*25 <v
" " ,*25,,,,,,,,,,,,,,,,,,,,<v
Line 865:
^ >$$$$320p10g1+:9`v > >$"!"> 20g10g1+p 20g1+:20p
^ v_10p10g
> ^</langsyntaxhighlight>
 
=={{header|Bracmat}}==
<langsyntaxhighlight lang="bracmat"> ( ( evolve
= n z
. @( !arg
Line 897:
& evolve$!S:?S
)
);</langsyntaxhighlight>
{{out}}
<pre>11101101010101001001
Line 910:
 
=={{header|C}}==
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <string.h>
 
Line 937:
do { printf(c + 1); } while (evolve(c + 1, b + 1, sizeof(c) - 3));
return 0;
}</langsyntaxhighlight>
{{out}}
<pre>###_##_#_#_#_#__#__
Line 950:
 
Similar to above, but without a backup string:
<langsyntaxhighlight lang="c">#include <stdio.h>
char trans[] = "___#_##_";
Line 976:
do { printf(c + 1); } while (evolve(c + 1, sizeof(c) - 3));
return 0;
}</langsyntaxhighlight>
 
=={{header|C sharp}}==
<langsyntaxhighlight lang="csharp">using System;
using System.Collections.Generic;
 
Line 1,017:
}
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
Uses std::bitset for efficient packing of bit values.
<langsyntaxhighlight Cpplang="cpp">#include <iostream>
#include <bitset>
#include <string>
Line 1,049:
std::cout << std::endl;
}
}</langsyntaxhighlight>
 
{{out}}
Line 1,064:
 
=={{header|Ceylon}}==
<langsyntaxhighlight lang="ceylon">shared abstract class Cell(character) of alive | dead {
shared Character character;
string => character.string;
Line 1,129:
print("generation `` ++generation `` ``automata``");
}
}</langsyntaxhighlight>
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="clojure">(ns one-dimensional-cellular-automata
(:require (clojure.contrib (string :as s))))
 
Line 1,147:
'()
(cons cells (generate (dec n) (next-gen cells)))))
</syntaxhighlight>
</lang>
<langsyntaxhighlight lang="clojure">one-dimensional-cellular-automata> (doseq [cells (generate 9 "_###_##_#_#_#_#__#__")]
(println cells))
_###_##_#_#_#_#__#__
Line 1,160:
__##________________
nil
</syntaxhighlight>
</lang>
 
Another way:
 
<langsyntaxhighlight lang="clojure">#!/usr/bin/env lein-exec
 
(require '[clojure.string :as str])
Line 1,188:
(do (println g)
(recur (compute-next-genr g)
(inc i)))))</langsyntaxhighlight>
 
Yet another way, easier to understand
 
<langsyntaxhighlight lang="clojure">
(def rules
{
Line 1,216:
(doseq [g (take 10 (iterate nextgen [0 1 1 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0]))]
(println g))
</syntaxhighlight>
</lang>
 
=={{header|COBOL}}==
 
<langsyntaxhighlight lang="cobol">
Identification division.
Program-id. rc-1d-cell.
Line 1,329:
end-perform
.
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,353:
_##_____#__________
_##________________={{header|CoffeeScript}}==
<langsyntaxhighlight lang="coffeescript">
# We could cheat and count the bits, but let's keep this general.
# . = dead, # = alive, middle cells survives iff one of the configurations
Line 1,386:
simulate (c == '#' for c in ".###.##.#.#.#.#..#..")
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,404:
=={{header|Common Lisp}}==
Based upon the Ruby version.
<langsyntaxhighlight lang="lisp">(defun value (x)
(assert (> (length x) 1))
(coerce x 'simple-bit-vector))
Line 1,431:
do (princ (if (zerop (bit value i)) #\. #\#)
stream))
(terpri stream))</langsyntaxhighlight>
 
<langsyntaxhighlight lang="lisp">CL-USER> (loop for previous-value = nil then value
for value = #*01110110101010100100 then (next-cycle value)
until (equalp value previous-value)
Line 1,445:
..##....#.#.........
..##.....#..........
..##................</langsyntaxhighlight>
 
=={{header|D}}==
<langsyntaxhighlight lang="d">void main() {
import std.stdio, std.algorithm;
 
Line 1,466:
writeln;
}
}</langsyntaxhighlight>
{{out}}
<pre>__###_##_#_#_#_#__#___
Line 1,481:
===Alternative Version===
{{trans|Raku}}
<langsyntaxhighlight lang="d">void main() {
import std.stdio, std.algorithm, std.range;
 
Line 1,493:
A.swap(B);
} while (A != B);
}</langsyntaxhighlight>
{{out}}
<pre>_###_##_#_#_#_#__#__
Line 1,508:
This version saves memory representing the state in an array of bits. For a higher performance a SWAR approach should be tried.
{{trans|C++}}
<langsyntaxhighlight lang="d">void main() {
import std.stdio, std.algorithm, std.range, std.bitmanip;
 
Line 1,531:
A.swap(B);
}
}</langsyntaxhighlight>
The output is the same as the second version.
 
=={{header|DWScript}}==
<langsyntaxhighlight lang="delphi">const ngenerations = 10;
const table = [0, 0, 0, 1, 0, 1, 1, 0];
 
Line 1,555:
PrintLn('');
end;
</syntaxhighlight>
</lang>
{{out}}
<pre>_###_##_#_#_#_#__#__
Line 1,570:
=={{header|Déjà Vu}}==
 
<langsyntaxhighlight lang="dejavu">new-state size:
0 ]
repeat size:
Line 1,605:
return print-state drop
 
run 60</langsyntaxhighlight>
{{out}}
<pre>001110011010110111001111110111011111010011000001010111111100
Line 1,619:
=={{header|E}}==
 
<langsyntaxhighlight lang="e">def step(state, rule) {
var result := state(0, 1) # fixed left cell
for i in 1..(state.size() - 2) {
Line 1,636:
}
return state
}</langsyntaxhighlight>
 
<langsyntaxhighlight lang="e">def rosettaRule := [
" " => " ",
" #" => " ",
Line 1,660:
8 | ##
9 | ##
# value: " ## "</langsyntaxhighlight>
 
=={{header|Eiffel}}==
<syntaxhighlight lang="eiffel">
<lang Eiffel>
class
APPLICATION
Line 1,736:
 
end
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,753:
=={{header|Elixir}}==
{{trans|Ruby}}
<langsyntaxhighlight lang="elixir">defmodule RC do
def run(list, gen \\ 0) do
print(list, gen)
Line 1,773:
end
 
RC.run([0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0])</langsyntaxhighlight>
 
{{out}}
Line 1,790:
 
=={{header|Elm}}==
<langsyntaxhighlight lang="elm">import Maybe exposing (withDefault)
import List exposing (length, tail, reverse, concat, head, append, map3)
import Html exposing (Html, div, h1, text)
Line 1,879:
, update = update
, subscriptions = subscriptions
}</langsyntaxhighlight>
 
Link to live demo: https://dc25.github.io/oneDimensionalCellularAutomataElm/
 
=={{header|Erlang}}==
<langsyntaxhighlight lang="erlang">
-module(ca).
-compile(export_all).
Line 1,933:
next([1,1,1|T],Acc) ->
next([1,1|T],[0|Acc]).
</syntaxhighlight>
</lang>
Example execution:
<langsyntaxhighlight lang="erlang">
44> ca:run(9,[0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0]).
0: __###_##_#_#_#_#__#___
Line 1,947:
8: ___##_________________
9: ___##_________________
</syntaxhighlight>
</lang>
 
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
<lang ERRE>
PROGRAM ONEDIM_AUTOMATA
 
Line 1,984:
END FOR
END PROGRAM
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,010:
 
=={{header|Euphoria}}==
<langsyntaxhighlight lang="euphoria">include machine.e
 
function rules(integer tri)
Line 2,055:
 
printf(1,"Generation %d: ",n)
print_gen(gen)</langsyntaxhighlight>
 
{{out}}
Line 2,069:
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USING: bit-arrays io kernel locals math sequences ;
IN: cellular
 
Line 2,090:
10 [ dup print-cellular step ] times print-cellular ;
MAIN: main-cellular
</syntaxhighlight>
</lang>
<pre>( scratchpad ) "cellular" run
_###_##_#_#_#_#__#__
Line 2,105:
 
=={{header|Fantom}}==
<langsyntaxhighlight lang="fantom">
class Automaton
{
Line 2,136:
}
}
</syntaxhighlight>
</lang>
 
=={{header|FOCAL}}==
<langsyntaxhighlight FOCALlang="focal">1.1 S OLD(2)=1; S OLD(3)=1; S OLD(4)=1; S OLD(6)=1; S OLD(7)=1
1.2 S OLD(9)=1; S OLD(11)=1; S OLD(13)=1; S OLD(15)=1; S OLD(18)=1
1.3 F N=1,10; D 2
Line 2,159:
7.1 T "#"
 
8.1 T "."</langsyntaxhighlight>
{{output}}
<pre>
Line 2,175:
 
=={{header|Forth}}==
<langsyntaxhighlight lang="forth">: init ( bits count -- )
0 do dup 1 and c, 2/ loop drop ;
 
Line 2,199:
.state 1 do gen .state loop ;
 
10 life1d</langsyntaxhighlight>
 
ouput
<syntaxhighlight lang="text">
### ## # # # # #
# ##### # # #
Line 2,213:
##
## ok
</syntaxhighlight>
</lang>
 
=={{header|Fortran}}==
{{works with|Fortran|90 and later}}
<langsyntaxhighlight lang="fortran">PROGRAM LIFE_1D
IMPLICIT NONE
Line 2,266:
END SUBROUTINE Drawgen
END PROGRAM LIFE_1D</langsyntaxhighlight>
{{out}}
<pre>
Line 2,282:
=={{header|GFA Basic}}==
 
<syntaxhighlight lang="text">
'
' One Dimensional Cellular Automaton
Line 2,396:
RETURN result%
ENDFUNC
</syntaxhighlight>
</lang>
 
=={{header|Go}}==
===Sequential===
<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 2,437:
return g0[1:last]
}
}</langsyntaxhighlight>
{{out}}
<pre>
Line 2,457:
Separate read and write phases.
Single array of cells.
<langsyntaxhighlight lang="go">package main
 
import (
Line 2,511:
write.Wait()
}
}</langsyntaxhighlight>
Output is same as sequential version.
 
=={{header|Groovy}}==
Solution:
<langsyntaxhighlight lang="groovy">def life1D = { self ->
def right = self[1..-1] + [false]
def left = [false] + self[0..-2]
[left, self, right].transpose().collect { hood -> hood.count { it } == 2 }
}</langsyntaxhighlight>
 
Test:
<langsyntaxhighlight lang="groovy">def cells = ('_###_##_#_#_#_#__#__' as List).collect { it == '#' }
println "Generation 0: ${cells.collect { g -> g ? '#' : '_' }.join()}"
(1..9).each {
cells = life1D(cells)
println "Generation ${it}: ${cells.collect { g -> g ? '#' : '_' }.join()}"
}</langsyntaxhighlight>
 
{{out}}
Line 2,543:
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import Data.List (unfoldr)
import System.Random (newStdGen, randomRs)
 
Line 2,573:
. take 36
. randomRs (0, 1)
)</langsyntaxhighlight>
{{Out}}
For example:
Line 2,587:
=={{header|Icon}} and {{header|Unicon}}==
 
<langsyntaxhighlight lang="icon">
# One dimensional Cellular automaton
record Automaton(size, cells)
Line 2,624:
}
end
</syntaxhighlight>
</lang>
 
An alternative approach is to represent the automaton as a string.
Line 2,635:
the evolve procedure fails if a new generation is unchanged from the previous, stopping the generation cycle early.
 
<langsyntaxhighlight lang="unicon">procedure main(A)
A := if *A = 0 then ["01110110101010100100"]
CA := show("0"||A[1]||"0") # add always dead border cells
Line 2,650:
every newCA[i := 2 to (*CA-1)] := (CA[i-1]+CA[i]+CA[i+1] = 2, "1")
return CA ~== newCA # fail if no change
end</langsyntaxhighlight>
 
{{out|A couple of sample runs}}
Line 2,671:
 
=={{header|J}}==
<langsyntaxhighlight lang="j">life1d=: '_#'{~ (2 = 3+/\ 0,],0:)^:a:</langsyntaxhighlight>
 
{{out|Example use}}
<langsyntaxhighlight lang="j"> life1d ? 20 # 2
_###_##_#_#_#_#__#__
_#_#####_#_#_#______
Line 2,683:
__##____#_#_________
__##_____#__________
__##________________</langsyntaxhighlight>
 
Alternative implementation:
 
<langsyntaxhighlight lang="j">Rule=:2 :0 NB. , m: number of generations, n: rule number
'_#'{~ (3 ((|.n#:~8#2) {~ #.)\ 0,],0:)^:(i.m)
)</langsyntaxhighlight>
 
{{out|Example use}}
<langsyntaxhighlight lang="j"> 9 Rule 104 '#'='_###_##_#_#_#_#__#__'
_###_##_#_#_#_#__#__
_#_#####_#_#_#______
Line 2,701:
__##____#_#_________
__##_____#__________
__##________________</langsyntaxhighlight>
 
=={{header|Java}}==
This example requires a starting generation of at least length two
(which is what you need for anything interesting anyway).
<langsyntaxhighlight lang="java">public class Life{
public static void main(String[] args) throws Exception{
String start= "_###_##_#_#_#_#__#__";
Line 2,747:
return ans;
}
}</langsyntaxhighlight>
{{out}}
<pre>Generation 0: _###_##_#_#_#_#__#__
Line 2,763:
which is local to the <code>evolve</code> method,
and the <code>evolve</code> method returns a boolean.
<langsyntaxhighlight lang="java">public class Life{
private static char[] trans = "___#_##_".toCharArray();
 
Line 2,793:
}while(evolve(c));
}
}</langsyntaxhighlight>
{{out}}
<pre>###_##_#_#_#_#__#__
Line 2,812:
state[i-1] refers to the new cell in question,
(old[i] == 1) checks if the old cell was alive.
<langsyntaxhighlight lang="javascript">function caStep(old) {
var old = [0].concat(old, [0]); // Surround with dead cells.
var state = []; // The new state.
Line 2,824:
}
return state;
}</langsyntaxhighlight>
 
{{out|Example usage}}
<langsyntaxhighlight lang="javascript">alert(caStep([0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0]));</langsyntaxhighlight>
shows an alert with "0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0".
 
=={{header|jq}}==
The main point of interest in the following is perhaps the way the built-in function "recurse" is used to continue the simulation until quiescence.
<langsyntaxhighlight lang="jq"># The 1-d cellular automaton:
def next:
# Conveniently, jq treats null as 0 when it comes to addition
Line 2,853:
 
# Example:
[0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0] | go</langsyntaxhighlight>
{{out}}
<langsyntaxhighlight lang="sh">$ jq -c -r -n -f One-dimensional_cellular_automata.jq
*** ** * * * * *
* ***** * * *
Line 2,864:
** * *
** *
**</langsyntaxhighlight>
 
=={{header|Julia}}==
This solution creates an automaton with with either empty or periodic bounds. The empty bounds case, is typical of many of the solutions here. The periodic bounds case is a typical physics approach where, in effect, the beginning and end of the list touch each other to form a circular rather than linear array. In practice, the effects of boundary conditions are subtle for long arrays.
<syntaxhighlight lang="julia">
<lang Julia>
function next_gen(a::BitArray{1}, isperiodic=false)
b = copy(a)
Line 2,904:
a = next_gen(a, true)
end
</syntaxhighlight>
</lang>
 
{{out}}
Line 2,927:
 
=={{header|K}}==
<langsyntaxhighlight Klang="k">f:{2=+/(0,x,0)@(!#x)+/:!3}</langsyntaxhighlight>
 
{{out|Example usage}}
<langsyntaxhighlight Klang="k"> `0:"_X"@f\0 1 1 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0
_XXX_XX_X_X_X_X__X__
_X_XXXXX_X_X_X______
Line 2,940:
__XX_____X__________
__XX________________
</syntaxhighlight>
</lang>
 
=={{header|Kotlin}}==
{{trans|C}}
<langsyntaxhighlight lang="scala">// version 1.1.4-3
 
val trans = "___#_##_"
Line 2,970:
}
while (evolve(c,b))
}</langsyntaxhighlight>
 
{{out}}
Line 2,988:
{{works with|Just BASIC}}
{{works with|Run BASIC}}
<langsyntaxhighlight lang="lb">' [RC] 'One-dimensional cellular automata'
 
' does not wrap so fails for some rules
Line 3,012:
next j
 
end</langsyntaxhighlight>
 
=={{header|Locomotive Basic}}==
 
<langsyntaxhighlight lang="locobasic">10 MODE 1:n=10:READ w:DIM x(w+1),x2(w+1):FOR i=1 to w:READ x(i):NEXT
20 FOR k=1 TO n
30 FOR j=1 TO w
Line 3,024:
70 FOR j=1 TO w:x(j)=x2(j):NEXT
80 NEXT
90 DATA 20,0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0</langsyntaxhighlight>
 
{{out}}
Line 3,031:
=={{header|Logo}}==
{{works with|UCB Logo}}
<langsyntaxhighlight lang="logo">make "cell_list [0 1 1 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0]
make "generations 9
 
Line 3,068:
end
 
CA_1D :cell_list :generations</langsyntaxhighlight>
{{out}}
<pre>
Line 3,084:
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">num_iterations = 9
f = { 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0 }
 
Line 3,115:
 
Output( f, l )
end </langsyntaxhighlight>
{{out}}
<pre>0: _###_##_#_#_#_#__#__
Line 3,129:
 
=={{header|M4}}==
<langsyntaxhighlight M4lang="m4">divert(-1)
define(`set',`define(`$1[$2]',`$3')')
define(`get',`defn(`$1[$2]')')
Line 3,164:
for(`j',1,10,
`show(x)`'evolve(`x',`y')`'swap(`x',x,`y')
')`'show(x)</langsyntaxhighlight>
 
{{out}}
Line 3,183:
=={{header|Mathematica}} / {{header|Wolfram Language}}==
Built-in function:
<langsyntaxhighlight Mathematicalang="mathematica">CellularAutomaton[{{0,0,_}->0,{0,1,0}->0,{0,1,1}->1,{1,0,0}->0,{1,0,1}->1,{1,1,0}->1,{1,1,1}->0},{{1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1},0},12]
Print @@@ (% /. {1 -> "#", 0 -> "."});</langsyntaxhighlight>
For succinctness, an integral rule can be used:
<langsyntaxhighlight Mathematicalang="mathematica">CellularAutomaton[2^^01101000 (* == 104 *), {{1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1}, 0}, 12];</langsyntaxhighlight>
{{out}}
<langsyntaxhighlight Mathematicalang="mathematica">###.##.#.#.#.#..#
#.#####.#.#.#....
.##...##.#.#.....
Line 3,200:
.##..............
.##..............
.##..............</langsyntaxhighlight>
 
=={{header|MATLAB}} / {{header|Octave}}==
<langsyntaxhighlight MATLABlang="matlab">function one_dim_cell_automata(v,n)
V='_#';
while n>=0;
Line 3,211:
v = v(3:end)==2;
end;
end</langsyntaxhighlight>
{{out}}
<pre>octave:27> one_dim_cell_automata('01110110101010100100'=='1',20);
Line 3,233:
but it segfaults when trying to use <code>BOOLEAN</code> types,
so we use <code>INTEGER</code> instead.
<langsyntaxhighlight lang="modula3">MODULE Cell EXPORTS Main;
 
IMPORT IO, Fmt, Word;
Line 3,275:
Step(culture);
END;
END Cell.</langsyntaxhighlight>
{{out}}
<pre>
Line 3,291:
 
=={{header|MontiLang}}==
<langsyntaxhighlight MontiLanglang="montilang">30 VAR length .
35 VAR height .
FOR length 0 ENDFOR 1 0 ARR VAR list .
Line 3,369:
next printArr .
next 0 ADD APPEND . VAR list .
ENDFOR</langsyntaxhighlight>
 
=={{header|Nial}}==
(life.nial)
<langsyntaxhighlight lang="nial">% we need a way to write a values and pass the same back
wi is rest link [write, pass]
% calculate the neighbors by rotating the array left and right and joining them
Line 3,382:
nextgen is each igen neighbors
% 42
life is fork [ > [sum pass, 0 first], life nextgen wi, pass ]</langsyntaxhighlight>
 
{{out|Using it}}
<langsyntaxhighlight lang="nial">|loaddefs 'life.nial'
|I := [0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0]
|life I</langsyntaxhighlight>
 
=={{header|Nim}}==
<langsyntaxhighlight Nimlang="nim">import random
 
 
Line 3,437:
 
if map2 == map: break
map = map2</langsyntaxhighlight>
{{out}}
<pre>_###_##_#_#_#_#__#____________
Line 3,451:
 
'''Using a string character counting method''':
<langsyntaxhighlight lang="nim">import strutils
 
const
Line 3,478:
q0 = q1
q1 = evolve(q0)
echo(q1)</langsyntaxhighlight>
{{out}}
<pre>_###_##_#_#_#_#__#__
Line 3,492:
 
'''Using nested functions and method calling style:'''
<langsyntaxhighlight Nimlang="nim">proc cellAutomata =
proc evolveInto(x, t : var string) =
for i in x.low..x.high:
Line 3,512:
swap t, x
 
cellAutomata()</langsyntaxhighlight>
 
{{out}}
Line 3,528:
=={{header|OCaml}}==
 
<langsyntaxhighlight lang="ocaml">let get g i =
try g.(i)
with _ -> 0
Line 3,556:
else print_char '#'
done;
print_newline()</langsyntaxhighlight>
 
put the code above in a file named "life.ml",
Line 3,592:
=={{header|Oforth}}==
 
<langsyntaxhighlight Oforthlang="oforth">: nextGen( l )
| i s |
l byteSize dup ->s String newSize
Line 3,604:
: gen( l n -- )
l dup .cr #[ nextGen dup .cr ] times( n ) drop ;</langsyntaxhighlight>
 
{{out}}
Line 3,624:
 
=={{header|Oz}}==
<langsyntaxhighlight lang="oz">declare
A0 = {List.toTuple unit "_###_##_#_#_#_#__#__"}
 
Line 3,659:
do
{System.showInfo "Gen. "#I#": "#{Record.toList A}}
end</langsyntaxhighlight>
 
{{out}}
Line 3,679:
This function generates one generation from a previous one,
passed as a 0-1 vector.
<langsyntaxhighlight lang="parigp">step(v)=my(u=vector(#v),k);u[1]=v[1]&v[2];u[#u]=v[#v]&v[#v-1];for(i=2,#v-1,k=v[i-1]+v[i+1];u[i]=if(v[i],k==1,k==2));u;</langsyntaxhighlight>
 
To simulate a run of 10 generations of the automaton, the function above can be put in a loop that spawns a new generation as a function of nth generations passed (n=0 is the initial state):
 
<langsyntaxhighlight lang="parigp">cur = [0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0]; for(n=0, 9, print(cur); cur = step(cur));</langsyntaxhighlight>
 
=== Output ===
<syntaxhighlight lang="text">
[0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0]
[0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0]
Line 3,697:
[0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
</syntaxhighlight>
</lang>
 
=={{header|Pascal}}==
<langsyntaxhighlight lang="pascal">program Test;
{$IFDEF FPC}{$MODE DELPHI}{$ELSE}{$APPTYPE}{$ENDIF}
uses
Line 3,772:
NextRow(@row[0],High(row));
end;
end.</langsyntaxhighlight>
{{Out}}<pre>
__###_##_#_#_#_#__#__
Line 3,790:
 
Convert cells to zeros and ones to set complement state
<langsyntaxhighlight lang="perl">
$_="_###_##_#_#_#_#__#__\n";
do {
Line 3,798:
s/(?<=(.))(.)(?=(.))/$1 == $3 ? $1 ? 1-$2 : 0 : $2/eg;
} while ($x ne $_ and $x=$_);
</syntaxhighlight>
</lang>
 
Use hash for complement state
<langsyntaxhighlight lang="perl">
$_="_###_##_#_#_#_#__#__\n";
%h=qw(# _ _ #);
Line 3,808:
s/(?<=(.))(.)(?=(.))/$1 eq $3 ? $1 eq "_" ? "_" : $h{$2} : $2/eg;
} while ($x ne $_ and $x=$_);
</syntaxhighlight>
</lang>
 
{{out}} for both versions:
Line 3,823:
=={{header|Phix}}==
Ludicrously optimised:
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #004080;">string</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"_###_##_#_#_#_#__#__"</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">prev</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'_'</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">curr</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">toggled</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
Line 3,841:
<span style="color: #000000;">toggled</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre style="font-size: 8px">
Line 3,856:
</pre>
And of course I had to have a crack at that Sierpinski_Triangle:
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #004080;">string</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"________________________#________________________"</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">prev</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'_'</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">curr</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">toggled</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
Line 3,870:
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre style="font-size: 6px">
Line 3,900:
 
=={{header|Phixmonti}}==
<langsyntaxhighlight Phixmontilang="phixmonti">0 1 1 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0 stklen var w
w tolist 0 0 put
0 w 1 + repeat var x2
Line 3,914:
nl
drop x2
endfor</langsyntaxhighlight>
 
=={{header|Picat}}==
<langsyntaxhighlight Picatlang="picat">go =>
% _ # # # _ # # _ # _ # _ # _ # _ _ # _ _
S = [0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0],
Line 3,967:
rule([1,0,1]) = 1. % Two neighbours giving birth
rule([1,1,0]) = 1. % Needs one neighbour to survive
rule([1,1,1]) = 0. % Starved to death.</langsyntaxhighlight>
 
{{out}}
Line 4,015:
 
The program is fairly general. Here's the additional code for the rule 30 CA.
<langsyntaxhighlight Picatlang="picat">go2 =>
N = 4,
Ns = [0 : _ in 1..N],
Line 4,029:
rule30([1,0,1]) = 0.
rule30([1,1,0]) = 0.
rule30([1,1,1]) = 0.</langsyntaxhighlight>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(let Cells (chop "_###_##_#_#_#_#__#__")
(do 10
(prinl Cells)
Line 4,046:
(link "#") ) ) )
Cells )
(link "_") ) ) ) )</langsyntaxhighlight>
{{out}}
<pre>_###_##_#_#_#_#__#__
Line 4,061:
=={{header|Prolog}}==
Works ith SWI-Prolog.
<langsyntaxhighlight Prologlang="prolog">one_dimensional_cellular_automata(L) :-
maplist(my_write, L), nl,
length(L, N),
Line 4,134:
L = [0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0],
one_dimensional_cellular_automata(L).
</syntaxhighlight>
</lang>
{{out}}
<pre> ?- one_dimensional_cellular_automata.
Line 4,150:
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">EnableExplicit
Dim cG.i(21)
Dim nG.i(21)
Line 4,180:
Until Gen > 9
PrintN("Press any key to exit"): Repeat: Until Inkey() <> ""</langsyntaxhighlight>
{{out}}
<pre>Generation 0: _###_##_#_#_#_#__#__
Line 4,196:
===Procedural===
====Python: Straightforward interpretation of spec====
<langsyntaxhighlight lang="python">import random
 
printdead, printlive = '_#'
Line 4,220:
universe.replace('0', printdead).replace('1', printlive) )
universe = offendvalue + universe + offendvalue
universe = ''.join(neighbours2newstate[universe[i:i+3]] for i in range(cellcount))</langsyntaxhighlight>
{{out}}
<pre>Generation 0: _###_##_#_#_#_#__#__
Line 4,235:
====Python: Using boolean operators on bits====
The following implementation uses boolean operations to realize the function.
<langsyntaxhighlight lang="python">import random
 
nquads = 5
Line 4,250:
print "Generation %3i: %s" % (i,(''.join(tr[int(t,16)] for t in (fmt%(a>>1)))))
a |= endvals
a = ((a&((a<<1) | (a>>1))) ^ ((a<<1)&(a>>1))) & endmask</langsyntaxhighlight>
 
====Python: Sum neighbours == 2====
This example makes use of the observation that a cell is alive in the next generation if the sum with its current neighbours of alive cells is two.
<langsyntaxhighlight lang="python">>>> gen = [ch == '#' for ch in '_###_##_#_#_#_#__#__']
>>> for n in range(10):
print(''.join('#' if cell else '_' for cell in gen))
Line 4,271:
__##________________
__##________________
>>> </langsyntaxhighlight>
 
===Composition of pure functions===
 
Interpreting the rule shown in the task description as Wolfram rule 104, and generalising enough to allow for other rules of this kind:
<langsyntaxhighlight lang="python">'''Cellular Automata'''
 
from itertools import islice, repeat
Line 4,481:
# MAIN -------------------------------------------------
if __name__ == '__main__':
main()</langsyntaxhighlight>
{{Out}}
<pre>Rule 104:
Line 4,537:
=={{header|Quackery}}==
 
<langsyntaxhighlight Quackerylang="quackery"> [ stack 0 ] is cells ( --> s )
 
[ dup size cells replace
Line 4,564:
echoline ] is automate ( $ --> )
 
$ "_###_##_#_#_#_#__#__" automate</langsyntaxhighlight>
 
{{out}}
Line 4,583:
=={{header|R}}==
 
<langsyntaxhighlight Rlang="r">set.seed(15797, kind="Mersenne-Twister")
 
maxgenerations = 10
Line 4,615:
universe <- cellularAutomata(universe, stayingAlive)
cat(format(i, width=3), deadOrAlive2string(universe), "\n")
}</langsyntaxhighlight>
 
{{out}}
Line 4,632:
 
=={{header|Racket}}==
<langsyntaxhighlight lang="racket">#lang racket
 
(define (update cells)
Line 4,658:
(0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0)
(0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
(0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) |#</langsyntaxhighlight>
 
Below is an alternative implementation using graphical output in the Racket REPL.
It works with DrRacket and Emacs + Geiser.
<langsyntaxhighlight lang="racket">#lang slideshow
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 4,710:
(apply vc-append 2 (map draw-row (reverse rows)))))
 
(draw-automaton 104 '(0 1 1 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0) 10)</langsyntaxhighlight>
 
=={{header|Raku}}==
Line 4,722:
and it makes the implementation a lot easier.
 
<syntaxhighlight lang="raku" perl6line>class Automaton {
has $.rule;
has @.cells;
Line 4,757:
$a = Automaton.new: :rule(90), :cells(flat @padding, 1, @padding);
say $a++ for ^20;</langsyntaxhighlight>
 
{{out}}
Line 4,795:
 
=={{header|Red}}==
<langsyntaxhighlight Rebollang="rebol">Red [
Purpose: "One-dimensional cellular automata"
Author: "Joe Smith"
Line 4,821:
evo display [1 1 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0]
]
</syntaxhighlight>
</lang>
 
{{out}}
Line 4,838:
 
=={{header|Retro}}==
<langsyntaxhighlight Retrolang="retro"># 1D Cellular Automota
 
Assume an array of cells with an initial distribution of live and
Line 4,993:
~~~
#10 generations
~~~</langsyntaxhighlight>
 
=={{header|REXX}}==
This REXX version will show (as a default) &nbsp; 40 &nbsp; generations, &nbsp; or less if the generations of cellular automata repeat.
<langsyntaxhighlight lang="rexx">/*REXX program generates & displays N generations of one─dimensional cellular automata. */
parse arg $ gens . /*obtain optional arguments from the CL*/
if $=='' | $=="," then $=001110110101010 /*Not specified? Then use the default.*/
Line 5,012:
if $==@ then do; say right('repeats', 40); leave; end /*does it repeat? */
$=@ /*now use the next generation of cells.*/
end /*#*/ /*stick a fork in it, we're all done. */</langsyntaxhighlight>
'''output''' when using the default input:
<pre>
Line 5,026:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
# Project : One-dimensional cellular automata
 
Line 5,051:
next
return binsum
</syntaxhighlight>
</lang>
Output:
<pre>
Line 5,067:
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">def evolve(ary)
([0]+ary+[0]).each_cons(3).map{|a,b,c| a+b+c == 2 ? 1 : 0}
end
Line 5,079:
until ary == (new = evolve(ary))
printit ary = new
end</langsyntaxhighlight>
{{out}}
<pre>.###.##.#.#.#.#..#..
Line 5,092:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">fn get_new_state(windowed: &[bool]) -> bool {
match windowed {
[false, true, true] | [true, true, false] => true,
Line 5,129:
}
}
</syntaxhighlight>
</lang>
 
=={{header|Scala}}==
{{works with|Scala|2.8}}
<langsyntaxhighlight lang="scala">def cellularAutomata(s: String) = {
def it = Iterator.iterate(s) ( generation =>
("_%s_" format generation).iterator
Line 5,143:
(it drop 1) zip it takeWhile Function.tupled(_ != _) map (_._2) foreach println
}</langsyntaxhighlight>
 
Sample:
Line 5,161:
=={{header|Scheme}}==
{{Works with|Scheme|R<math>^5</math>RS}}
<langsyntaxhighlight lang="scheme">(define (next-generation left petri-dish right)
(if (null? petri-dish)
(list)
Line 5,181:
(- generations 1)))))
 
(display-evolution (list 1 1 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0) 10)</langsyntaxhighlight>
Output:
<pre>(1 1 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0)
Line 5,197:
A graphical cellular automaton can be found [http://seed7.sourceforge.net/algorith/graphic.htm#cellauto here].
 
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
 
const string: start is "_###_##_#_#_#_#__#__";
Line 5,222:
g0 := g1;
end for;
end func;</langsyntaxhighlight>
 
Output:
Line 5,263:
 
=={{header|SequenceL}}==
<langsyntaxhighlight lang="sequencel">import <Utilities/Conversion.sl>;
 
main(args(2)) :=
Line 5,292:
1 when (left + cells[i] + right) = 2
else
0;</langsyntaxhighlight>
 
{{out}}
Line 5,311:
=={{header|Sidef}}==
{{trans|Perl}}
<langsyntaxhighlight lang="ruby">var seq = "_###_##_#_#_#_#__#__";
var x = '';
 
Line 5,320:
seq.gsub!(/(?<=(.))(.)(?=(.))/, {|s1,s2,s3| s1 == s3 ? (s1 ? 1-s2 : 0) : s2});
(x != seq) && (x = seq) || break;
}</langsyntaxhighlight>
 
{{out}}
Line 5,336:
 
{{trans|Raku}}
<langsyntaxhighlight lang="ruby">class Automaton(rule, cells) {
 
method init {
Line 5,368:
say "|#{auto}|";
auto.next;
}</langsyntaxhighlight>
 
{{out}}
Line 5,385:
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">proc evolve {a} {
set new [list]
for {set i 0} {$i < [llength $a]} {incr i} {
Line 5,420:
set array $new
print $array
}</langsyntaxhighlight>
 
=={{header|Ursala}}==
Line 5,429:
it according to the rule. The cells are maintained as a list of booleans
(0 and &) but are converted to characters for presentation in the example code.
<langsyntaxhighlight Ursalalang="ursala">#import std
#import nat
 
Line 5,440:
#show+
 
example = ~&?(`#!,`.!)** evolve10 <0,&,&,&,0,&,&,0,&,0,&,0,&,0,0,&,0,0></langsyntaxhighlight>
output:
<pre>
Line 5,458:
 
This implementation writes the calculated patterns into an edit buffer, where the results can viewed and saved into a file if required. The edit buffer also acts as storage during calculations.
<langsyntaxhighlight lang="vedit">IT("Gen 0: ..###.##.#.#.#.#..#.....") // initial pattern
#9 = Cur_Col
 
Line 5,475:
IT("Gen ") Num_Ins(#8, LEFT+NOCR) IT(": ")
Reg_Ins(20)
}</langsyntaxhighlight>
 
Sample output:
<langsyntaxhighlight lang="vedit">Gen 0: ..###.##.#.#.#.#..#.....
Gen 1: ..#.#####.#.#.#.........
Gen 2: ...##...##.#.#..........
Line 5,487:
Gen 7: ...##.....#.............
Gen 8: ...##...................
Gen 9: ...##...................</langsyntaxhighlight>
 
=={{header|Visual Basic .NET}}==
Line 5,493:
This implementation is run from the command line. The command is followed by a string of either 1's or #'s for an active cell, or 0's or _'s for an inactive one.
 
<langsyntaxhighlight Visuallang="visual Basicbasic .NETnet">Imports System.Text
 
Module CellularAutomata
Line 5,597:
Return sw.ToString()
End Function
End Module</langsyntaxhighlight>
 
Output:
Line 5,614:
=={{header|Wart}}==
===Simple===
<langsyntaxhighlight lang="python">def (gens n l)
prn l
repeat n
Line 5,630:
def (next a b c) # next state of b given neighbors a and c
if (and a c) not.b
(or a c) b</langsyntaxhighlight>
 
Output looks a little ugly:
Line 5,647:
Computing the next generation becomes much cleaner once you invest a few LoC in a new datatype.
 
<langsyntaxhighlight lang="python">def (uca l) # new datatype: Uni-dimensional Cellular Automaton
(tag uca (list l len.l))
 
Line 5,678:
def (next a b c)
if (and a c) not.b
(or a c) b</langsyntaxhighlight>
 
Output is prettier now:
Line 5,699:
=={{header|Wren}}==
{{trans|Kotlin}}
<langsyntaxhighlight lang="ecmascript">var trans = "___#_##_"
 
var v = Fn.new { |cell, i| (cell[i] != "_") ? 1 : 0 }
Line 5,721:
System.print(c[1..-1].join())
if (!evolve.call(c,b)) break
}</langsyntaxhighlight>
 
{{out}}
Line 5,737:
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">code ChOut=8, CrLf=9;
int Gen, Now, New, I;
[Now:= $076A_A400;
Line 5,748:
Now:= New;
];
]</langsyntaxhighlight>
 
{{out}}
Line 5,766:
=={{header|Yabasic}}==
{{trans|Locomotive_Basic}}
<langsyntaxhighlight Yabasiclang="yabasic">10 n=10:READ w:DIM x(w+1),x2(w+1):FOR i=1 to w:READ x(i):NEXT
20 FOR k=1 TO n
30 FOR j=1 TO w
Line 5,774:
70 FOR j=1 TO w:x(j)=x2(j):NEXT
80 NEXT
90 DATA 20,0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0</langsyntaxhighlight>
 
Other solution
<langsyntaxhighlight Yabasiclang="yabasic">start$ = "0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0"
 
dim x$(1)
Line 5,791:
next j
print
next k</langsyntaxhighlight>
 
=={{header|zkl}}==
{{trans|Groovy}}
<langsyntaxhighlight lang="zkl">fcn life1D(line){
right:=line[1,*] + False; // shift left, False fill
left :=T(False).extend(line[0,-1]); // shift right
left.zip(line,right).apply(fcn(hood){ hood.sum(0)==2 });
}</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">chars:=T("_","#");
cells:="_###_##_#_#_#_#__#__".split("").apply('==("#")); //-->L(False,True,True,True,False...)
do(10){ cells.apply(chars.get).concat().println(); cells=life1D(cells); }</langsyntaxhighlight>
Or, using strings instead of lists:
<langsyntaxhighlight lang="zkl">fcn life1D(line){
right:=line[1,*] + "_"; // shift left, "_" fill
left :="_" + line[0,-1]; // shift right
Line 5,810:
fcn(a,b,c){ (String(a,b,c) - "_") == "##" and "#" or "_" },
left,line,right).concat();
}</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">cells:="_###_##_#_#_#_#__#__";
do(10){ cells.println(); cells=life1D(cells); }</langsyntaxhighlight>
{{out}}
<pre>
10,327

edits