begin comment Game of Life; integer array table[0:2,0:2]; procedure initialisetable (table, M,N); integer array table; integer M,N; begin integer i,j; for i ≔ step 1 until (M-1) do for j ≔ step 1 until (N-1) do begin if (i ≠ j) then table[i,j] ≔ 0 else table[i,j] ≔ ; end end; procedure printtable (table,M,N); integer array table; integer M,N; begin integer i,j; for i ≔ step 1 until M-1 do begin for j ≔ step 1 until N-1 do begin outinteger(1, table[i,j]); end; outstring(1, “\n”) end end; procedure applyRules (table, M,N); integer array table; integer M,N; begin integer Neighbours,actual,i,j; integer array prevGen[0:2,0:2]; copytable(prevGen,table,M,N); for i ≔ step 1 until M-1 do begin for j ≔ step 1 until N-1 do begin actual ≔ prevGen[i,j]; countNeighboursAlive (prevGen,M,N,i,j,Neighbours); if (actual = 1) then begin if (Neighbours < 2) then table[i,j] ≔ else if (Neighbours ⩽ 3) then table[i,j] ≔ else table[i,j] ≔ ; end else if (Neighbours = 3) then table[i,j] ≔ ; end; end end; procedure countNeighboursAlive (table, M,N, x,y, Neighbours); value M,N,x,y; integer array table; integer M,N,x,y,Neighbours; begin boolean isNeighbour; integer i,j; Neighbours ≔ 0; for i ≔ x-1) step 1 until (x+1) do begin for j ≔ y-1) step 1 until (y+1) do begin isNeighbour ≔ ( (i⩾0) ∧ (j⩾0) ∧ (i<M) ∧ (j<N) ∧ ( (x ≠ i) ∨ (y ≠ j) ) ); if isNeighbour then begin if (table[i,j] = 1) then Neighbours ≔ Neighbours +1 end end; end end; procedure copytable (prevGen,table,M,N); begin integer i,j; for i ≔ step 1 until (M-1) do for j ≔ step 1 until (N-1) do prevGen[i,j] ≔ table[i,j]; end; initialisetable(table,3,3); printtable(table,3,3); applyRules(table,3,3); printtable(table,3,3); end