One-dimensional cellular automata: Difference between revisions

Content added Content deleted
(added Icon example)
Line 977:
"_________________________________#__"
"____________________________________"</lang>
 
=={{header|Icon}} and {{header|Unicon}}==
 
<lang icon>
# One dimensional Cellular automaton
record Automaton(size, cells)
 
procedure make_automaton (size, items)
automaton := Automaton (size, items)
while (*items < size) do push (automaton.cells, 0)
return automaton
end
 
procedure automaton_display (automaton)
every (write ! automaton.cells)
end
 
procedure automaton_evolve (automaton)
revised := make_automaton (automaton.size, [])
# do the left-most cell
if ((automaton.cells[1] + automaton.cells[2]) = 2) then
revised.cells[1] := 1
# do the right-most cell
if ((automaton.cells[automaton.size] + automaton.cells[automaton.size-1]) = 2) then
revised.cells[revised.size] := 1
# do the intermediate cells
every (i := 2 to (automaton.size-1)) do {
if ((automaton.cells[i-1] + automaton.cells[i] + automaton.cells[i+1]) = 2) then
revised.cells[i] := 1
}
return revised
end
 
procedure main ()
automaton := make_automaton (20, [0,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0])
every (1 to 10) do { # generations
automaton_display (automaton)
automaton := automaton_evolve (automaton)
}
end
</lang>
 
=={{header|J}}==
<lang j>life1d=: '_#'{~ (2 = 3+/\ 0,],0:)^:a:</lang>
Line 1,009 ⟶ 1,051:
__##_____#__________
__##________________</lang>
 
 
=={{header|Java}}==