(Four shades of zero, decomposition method)
Google translate article in English
Ссылка для ознакомления с элементарными клеточными автоматами, и с правилом 30 Стивена Вольфрама в частности. http://mathworld.wolfram.com/ElementaryCellularAutomaton.html
Правило 30 определяет следующее состояние клетки таким образом:
\\Pari/GP code:
{M=matrix(15,31);
M[1,16]=1;
for(i=2,15, for(j=2, 30, if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==1, M[i,j]=0);
if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==0, M[i,j]=0);
if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==1, M[i,j]=0);
if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==0, M[i,j]=1);
if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==1, M[i,j]=1);
if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==0, M[i,j]=1);
if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==1, M[i,j]=1);
if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==0, M[i,j]=0) ));
}
Добавим к правилу 30 следующие значения:
0={0, 5, 6, 7} ; 1={1, 2, 3, 4}
Вместо 0 и 1 в следующем шаге будем записывать десятичное значение трех соседних клеток. Получим такую картину:
{N=matrix(15,31);
N[1,16]=1;
for(i=2,15, for(j=2, 30, if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==1, N[i,j]=7);
if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==0, N[i,j]=6);
if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==1, N[i,j]=5);
if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==0, N[i,j]=4);
if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==1, N[i,j]=3);
if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==0, N[i,j]=2);
if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==1, N[i,j]=1);
if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==0, N[i,j]=0) ));
}
Начало последовательности центральной вертикальной колонны : {1, 2, 7, 4, 3, 2, 7, 0, 4, 3, 6, 5, 5, 1, 7, 4, 2, 6, ….. }
С новыми значениями мы имеем 8^3=512 состояний клетки для следующего шага, но реальные из них только 2^5=32 , так как для последующего состояния трех последовательных ячеек нужно учитывать пять последовательных ячеек нынешнего состояния :
252 - possible for N[i, j] ; N[i, j+1]; N[i, j+2] :
i j
23 1012
24 1014
29 996
30 1012
30 1023
32 1020
... ...
222 - impossible.
32 возможных состояния трех соседних клеток :
0) 000 8) 240 16) 400 24) 640
1) 001 9) 241 17) 401 25) 641
2) 012 10) 252 18) 412 26) 652
3) 013 11) 253 19) 413 27) 653
4) 124 12) 364 20) 524 28) 764
5) 125 13) 365 21) 525 29) 765
6) 136 14) 376 22) 536 30) 776
7) 137 15) 377 23) 537 31) 777
{L=matrix(15,31);
L[1,16]=1;
for(i=2,15, for(j=2, 30,
if(N[i-1,j-1]==0&&N[i-1,j]==0&&N[i-1,j+1]==0, L[i,j]=0);
if(N[i-1,j-1]==0&&N[i-1,j]==0&&N[i-1,j+1]==1, L[i,j]=1);
if(N[i-1,j-1]==0&&N[i-1,j]==1&&N[i-1,j+1]==2, L[i,j]=2);
if(N[i-1,j-1]==0&&N[i-1,j]==1&&N[i-1,j+1]==3, L[i,j]=3);
if(N[i-1,j-1]==1&&N[i-1,j]==2&&N[i-1,j+1]==4, L[i,j]=4);
if(N[i-1,j-1]==1&&N[i-1,j]==2&&N[i-1,j+1]==5, L[i,j]=5);
if(N[i-1,j-1]==1&&N[i-1,j]==3&&N[i-1,j+1]==6, L[i,j]=6);
if(N[i-1,j-1]==1&&N[i-1,j]==3&&N[i-1,j+1]==7, L[i,j]=7);
if(N[i-1,j-1]==2&&N[i-1,j]==4&&N[i-1,j+1]==0, L[i,j]=8);
if(N[i-1,j-1]==2&&N[i-1,j]==4&&N[i-1,j+1]==1, L[i,j]=9);
if(N[i-1,j-1]==2&&N[i-1,j]==5&&N[i-1,j+1]==2, L[i,j]=10);
if(N[i-1,j-1]==2&&N[i-1,j]==5&&N[i-1,j+1]==3, L[i,j]=11);
if(N[i-1,j-1]==3&&N[i-1,j]==6&&N[i-1,j+1]==4, L[i,j]=12);
if(N[i-1,j-1]==3&&N[i-1,j]==6&&N[i-1,j+1]==5, L[i,j]=13);
if(N[i-1,j-1]==3&&N[i-1,j]==7&&N[i-1,j+1]==6, L[i,j]=14);
if(N[i-1,j-1]==3&&N[i-1,j]==7&&N[i-1,j+1]==7, L[i,j]=15);
if(N[i-1,j-1]==4&&N[i-1,j]==0&&N[i-1,j+1]==0, L[i,j]=16);
if(N[i-1,j-1]==4&&N[i-1,j]==0&&N[i-1,j+1]==1, L[i,j]=17);
if(N[i-1,j-1]==4&&N[i-1,j]==1&&N[i-1,j+1]==2, L[i,j]=18);
if(N[i-1,j-1]==4&&N[i-1,j]==1&&N[i-1,j+1]==3, L[i,j]=19);
if(N[i-1,j-1]==5&&N[i-1,j]==2&&N[i-1,j+1]==4, L[i,j]=20);
if(N[i-1,j-1]==5&&N[i-1,j]==2&&N[i-1,j+1]==5, L[i,j]=21);
if(N[i-1,j-1]==5&&N[i-1,j]==3&&N[i-1,j+1]==6, L[i,j]=22);
if(N[i-1,j-1]==5&&N[i-1,j]==3&&N[i-1,j+1]==7, L[i,j]=23);
if(N[i-1,j-1]==6&&N[i-1,j]==4&&N[i-1,j+1]==0, L[i,j]=24);
if(N[i-1,j-1]==6&&N[i-1,j]==4&&N[i-1,j+1]==1, L[i,j]=25);
if(N[i-1,j-1]==6&&N[i-1,j]==5&&N[i-1,j+1]==2, L[i,j]=26);
if(N[i-1,j-1]==6&&N[i-1,j]==5&&N[i-1,j+1]==3, L[i,j]=27);
if(N[i-1,j-1]==7&&N[i-1,j]==6&&N[i-1,j+1]==4, L[i,j]=28);
if(N[i-1,j-1]==7&&N[i-1,j]==6&&N[i-1,j+1]==5, L[i,j]=29);
if(N[i-1,j-1]==7&&N[i-1,j]==7&&N[i-1,j+1]==6, L[i,j]=30);
if(N[i-1,j-1]==7&&N[i-1,j]==7&&N[i-1,j+1]==7, L[i,j]=31)));
}
Начало последовательности центральной вертикальной колонны : { 1, 0, 4, 14, 25, 23, 4, 30, 16, 25, 7, 12, 11, 26, 19, 14, 24, 5, 29, 1, 1, 9, 30, 1, 3, 22, 4, 15, 8, 28, 3, 22, 5, 29, … }
Этот метод декомпозиции элементарных клеточных автоматов может быть использован для генерации псевдослучайных натуральных чисел со значениями от нуля до тридцати одного, также для исследования и анализа элементарных клеточных автоматов.