0 0 0 0 1 0 0 0 0
A ideia é criar linhas novas a partir das linhas anteriores e a partir de regras pré-definidas. Chamemos a linha atual de L_atu, e a linha anterior, L_ant. Cada posição n de L_atu é dada da seguinte forma:
L_atu(n) = F( L_ant(n-1), L_ant(n), L_ant(n+1) ),
onde F( ) é uma função pré-definida. Por exemplo, podemos ter:
F(0, 0, 0) = 0
F(0, 0, 1) = 1
F(0, 1, 0) = 1
F(0, 1, 1) = 1
F(1, 0, 0) = 1
F(1, 0, 1) = 0
F(1, 1, 0) = 0
F(1, 1, 1) = 0
Repare que F( ) tem 3 entradas, que só recebem os valores 0 e 1. Assim, F( ) sempre possui 8 valores definidos de saída (2^3 valores). Além disso, as saídas de F( ) também só podem ser 0 ou 1. Temos então 2^8 = 256 funções F( ) possíveis.
A função mostrada acima é chamada de regra 30, pelo seguinte motivo: considerando que os valores de saída formam um número de 8 bits, então esta regra representa o número
0*(2^0) + 1*(2^1) + 1*(2^2) + 1*(2^3) + 1*(2^4) + 0*(2^5) + 0*(2^6) + 0*(2^7) = 2+4+8+16 = 30.
O video abaixo demonstra o processo de construção de um autômato celular com a regra 45.
O código a seguir gera um autômato celular, pergunta ao usuário qual a regra a ser seguida, o tamanho das linhas, e o número total de linhas.