Elementary cellular automaton: Difference between revisions

Added solution for Action!
(Added 11l)
(Added solution for Action!)
Line 70:
* * * * * * * * * * * * * * * *
</pre>
 
=={{header|Action!}}==
<lang Action!>DEFINE ROW_LEN="320"
DEFINE MAX_COL="319"
DEFINE MAX_ROW="191"
 
PROC GenerateMask(BYTE rule BYTE ARRAY mask)
BYTE i
 
FOR i=0 TO 7
DO
mask(i)=rule&1
rule==RSH 1
OD
RETURN
 
PROC InitRow(BYTE ARRAY row)
INT c
FOR c=0 TO MAX_COL
DO
row(c)=0
OD
row(ROW_LEN RSH 1)=1
RETURN
 
PROC DrawRow(BYTE ARRAY row BYTE y)
INT c
 
FOR c=0 TO MAX_COL
DO
Color=row(c)
Plot(c,y)
OD
RETURN
 
PROC CalcNextRow(BYTE ARRAY currRow,nextRow,mask)
INT c
BYTE v
 
v=currRow(MAX_COL) LSH 2
v==%currRow(0) LSH 1
v==%currRow(1)
nextRow(0)=mask(v)
FOR c=1 TO MAX_COL-1
DO
v==&3
v==LSH 1
v==%currRow(c+1)
nextRow(c)=mask(v)
OD
v==&3
v==LSH 1
v==%currRow(0)
nextRow(MAX_COL)=mask(v)
RETURN
 
PROC DrawRule(BYTE rule)
BYTE ARRAY row1(ROW_LEN),row2(ROW_LEN),mask(8)
BYTE ARRAY currRow,nextRow,tmp
BYTE y
 
GenerateMask(rule,mask)
currRow=row1
nextRow=row2
InitRow(currRow)
y=0
WHILE y<=MAX_ROW
DO
DrawRow(currRow,y)
CalcNextRow(currRow,nextRow,mask)
tmp=currRow currRow=nextRow nextRow=tmp
y==+1
OD
RETURN
 
PROC Main()
BYTE CH=$02FC,COLOR1=$02C5,COLOR2=$02C6
 
Graphics(8+16)
Color=1
COLOR1=$0C
COLOR2=$02
 
DrawRule(30)
 
DO UNTIL CH#$FF OD
CH=$FF
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Elementary_cellular_automaton.png Screenshot from Atari 8-bit computer]
 
=={{header|Ada}}==
Anonymous user