En entrant dans une requête à Wolfram Alpha, vous voyez généralement une animation indiquée pendant quelques secondes avant que le résultat ne soit affiché. Il semble être un automate cellulaire avec 3 états distinctifs. P>
J'aimerais savoir ce qu'on appelle cet automate particulier et où je peux trouver des informations à ce sujet. Merci! P>
3 Réponses :
C'est Game de la vie de Conway Strong>. Il y a un très bon article Wikipedia sur celui-ci, je vous suggère d'aller jeter un coup d'oeil là-bas. P>
Cela ne peut pas être vrai, car le jeu de la vie de convoite n'a que 2 états possibles: morts et vivants. L'automate montré sur la page de chargement de WA a cependant 3 états: vide, petit cercle et grand cercle. Peut-être que c'est une variation du jeu de la vie? Si oui, pouvez-vous me signaler une description / une implémentation particulière?
C'est un automate cellulaire avec 5 états. La règle est Il possède 5 états: Voici un oscillateur avec la période 15: p>
Voici une bouffante avec la période 24: p>
3457/357/5 code> à l'aide de Notation de Golly's . P>
0 code>, 1 code>, 2 code>, 3 code>, 4 code>. À chaque étape, les cellules se comportent comme suit: p>
0 code> -> 1 code> Si 3, 5 ou 7 de ses huit voisins sont 1 code> ou 0 code> sinon li>
1 code> -> 1 code> si 3, 4, 5 ou 7 de ses huit voisins sont 1 code> ou 2 code> sinon li>
2 code> -> 3 code> li>
3 code> -> 4 code> li>
4 code> -> 0 code> li>
ul>
p>
p>
C'est ça! Le lien vers Golly est extrêmement utile. Jamais entendu parler de ça avant!
Voici un jsfiddle de ma mise en œuvre JavaScript de l'animation spécifique de Wolfram. Dû attraper une capture d'écran de l'un des cadres pour l'initialiser lol. Celui que j'ai attrapé était assez simple, mais j'aimerais connaître le point de départ absolu qu'ils utilisent. jsfiddle.net/iammortos/espncctd
Voici une implémentation de matlab très rapide de l'automatisation cellulaire de 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