program jogodavida ; type table = array [0..5,1..15,1..15] of boolean ; var matriz : table ; t : integer ; procedure marcarmatriz (t : integer) ; begin matriz[t,3,2] := true ; matriz[t,3,4] := true ; matriz[t,4,3] := true ; matriz[t,4,7] := true ; matriz[t,5,1] := true ; matriz[t,5,2] := true ; matriz[t,5,3] := true ; matriz[t,5,7] := true ; matriz[t,5,8] := true ; matriz[t,5,9] := true ; matriz[t,9,1] := true ; matriz[t,9,2] := true ; matriz[t,9,3] := true ; matriz[t,10,3] := true ; matriz[t,10,7] := true ; matriz[t,10,8] := true ; matriz[t,10,9] := true ; matriz[t,11,2] := true ; matriz[t,11,7] := true ; matriz[t,12,8] := true ; end ; procedure exibirmatriz (t : integer) ; var i, j : integer ; begin writeln ; writeln ('instante t = ', t, ':') ; for i := 0 to 15 do begin if i = 0 then begin write (' ') ; for j := 1 to 15 do write (' ', j:2, ' ') ; writeln ; end else begin write (' ', i:2, ' ') ; for j := 1 to 15 do if matriz[t,i,j] = false then write (' ') else write (' X ') ; end ; writeln ; end ; end ; function contarvizinhos (matriz : table ; t, i, j : integer): integer ; var x, y, contador : integer ; begin contador := 0 ; for x := (i - 1) to (i + 1) do begin for y := (j - 1) to (j + 1) do begin if (x >= 1) and (x <= 15) and (y >= 1) and (y <= 15) then begin if (x <> i) or (y <> j) then if matriz[t,x,y] = true then contador := contador + 1 ; end ; end ; end ; contarvizinhos := contador ; end ; procedure evoluirmatriz (t : integer) ; var i, j : integer ; cond1, cond2 : boolean ; begin for i := 1 to 15 do begin for j := 1 to 15 do begin cond1 := (matriz[t-1,i,j] = false) and (contarvizinhos(matriz,t-1,i,j) = 3) ; cond2 := (matriz[t-1,i,j] = true) and ((contarvizinhos(matriz,t-1,i,j) = 3) or (contarvizinhos(matriz,t-1,i,j) = 2)); if (cond1 = true) or (cond2 = true) then matriz[t,i,j] := true else matriz[t,i,j] := false ; end ; end ; end ; Begin marcarmatriz(0) ; exibirmatriz(0) ; for t := 1 to 5 do begin evoluirmatriz(t) ; exibirmatriz(t) ; end; readln; End.