Что такое клеточный автомат, отображаемый в качестве экрана загрузки на Wolfram Alpha?
При вводе запроса в Wolfram Alpha вы обычно видите анимацию, отображаемую за пару секунд до отображения результата. Кажется, это клеточный автомат с 3 отличительными состояниями.
Я хотел бы знать, как называется этот конкретный автомат, и где я могу найти информацию о нем. Спасибо!
3 ответа
Решение
Это клеточный автомат с 5 состояниями. Правило 3457/357/5
используя нотацию Голли.
Имеет 5 состояний: 0
, 1
, 2
, 3
, 4
, На каждом этапе клетки ведут себя следующим образом:
0
->1
если 3, 5 или 7 из его восьми соседей1
, или же0
иначе1
->1
если 3, 4, 5 или 7 из его восьми соседей1
, или же2
иначе2
->3
3
->4
4
->0
Вот осциллятор с периодом 15:
Вот пух с периодом 24:
Вот очень быстрая реализация matlab сотовой автоматизации Wolfram Alpha:
rng(38); % 31 lasts a while / 38 has two oscillators / 39 lasts longer /42 lasts muuuuch longer
X = randi([0 4],30,40);
[a,b] = size(X);
initialFig = figure('toolbar','none','menubar','none');
[x,y] = meshgrid(1:b,1:a);
scathandle = scatter(x(:),y(:),20*X(:)+1,X(:)+1,'filled');
colormp = linspace(1,0.4,5)'*[1 1 1]; colormap(colormp);
axis([0 b+1 0 a+1]); axis off; set(gca,'position',[0 0 1 1]); set(gcf,'toolbar','none','menubar','none','color','w','numbertitle','off','name',''); axis equal;
n = [a 1:a-1]; % The previous row
s = [2:a 1]; % The next row
e = [2:b 1]; % The next column
w = [b 1:b-1]; % The previous column
[A,B,C] = meshgrid(1:a,1:b,[0 1]);
Xnew = X;
while 1
N = (X(n,:)==1) + (X(s,:)==1) + (X(:,e)==1) + (X(:,w)==1) + (X(n,e)==1) + (X(n,w)==1) + (X(s,e)==1) + (X(s,w)==1); % Look for the total number of nieghbours == 1
Xnew(X>=2) = mod(X(X>=2)+1,5); % if state is greater or equal to 2, increment 1 modulo 5
Xnew(X==0) = (N(X==0)==3 | N(X==0)==5 | N(X==0)==7); % if state is 0, turn to 1 when neighbours equal 3,5 or 7. Leave 0 otherwise.
Xnew(X==1) = 2 - (N(X==1)==3 | N(X==1)==4 | N(X==1)==5 | N(X==1)==7); % if state is 1, turn to 2 unless neighbours equal 3, 4 or 5. In the latter case, leave 1.
X = Xnew;
set(scathandle,'cdata',X(:)+1,'sizedata',20*X(:)+1);
drawnow;
if ~ishandle(initialFig)
return
end
end
Я предполагаю, что в любой момент кто-то найдет это полезным (как-то).
Это игра жизни Конвея. Там есть очень хорошая статья в Википедии, я предлагаю вам посмотреть.