One-dimensional cellular automata: Difference between revisions
Content added Content deleted
(added Icon example) |
|||
Line 977: | Line 977: | ||
"_________________________________#__" |
"_________________________________#__" |
||
"____________________________________"</lang> |
"____________________________________"</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}}== |
=={{header|J}}== |
||
<lang j>life1d=: '_#'{~ (2 = 3+/\ 0,],0:)^:a:</lang> |
<lang j>life1d=: '_#'{~ (2 = 3+/\ 0,],0:)^:a:</lang> |
||
Line 1,009: | Line 1,051: | ||
__##_____#__________ |
__##_____#__________ |
||
__##________________</lang> |
__##________________</lang> |
||
=={{header|Java}}== |
=={{header|Java}}== |