TD: Jeu de la vie
D’apr`es Wikip´edia
1 Position du probl`eme
Le jeu de la vie, automate cellulaire imagin´e par John Horton Conway en 1970, est probablement le plus
connu de tous les automates cellulaires1.
Malgr´e des r`egles tr`es simples, le jeu de la vie permet le d´eveloppement de motifs extrˆemement complexes.
Le jeu se d´eroule sur une grille `a deux dimensions, th´eoriquement infinie (en r´ealit´e, la grille a une longueur
et une largeur finies, plus ou moins grandes)2, dont les cases - qu’on appelle des “cellules”, par analogie avec
les cellules vivantes - peuvent prendre deux ´etats distincts: “vivantes” ou “mortes”.
`
A chaque ´etape, l’´evolution d’une cellule est enti`erement d´etermin´ee par l’´etat de ses huit voisines de la
fa¸con suivante:
- une cellule morte poss´edant exactement trois voisines vivantes devient vivante (elle naˆıt).
- une cellule vivante poss´edant deux ou trois voisines vivantes le reste, sinon elle meurt.
La nouvelle configuration, obtenue l’application de ces r`egles, sert de configuration de d´epart au tour
suivant.
2 Code avec Mathematica
Jeu de la vie
In[1]:= Xmax=100;Ymax=100;Proba0=.25;NbreIterations=100;
Initial=Table[If[Random[]<Proba0,0,1],{x,1,Xmax},{y,1,Ymax}];
ListDensityPlot[Initial,Frame->False,Mesh->False];
1Un automate cellulaire est un mod`ele o`u chaque ´etat conduit m´ecaniquement `a l’´etat suivant `a partir de
r`egles pr´e-´etablies.
2En pratique, on prendra une grille infiniment p´eriodique: les voisines des cases situ´ees `a un bord de la grille
seront suppos´ees ˆetre celles situ´ees sur l’autre bord.
1
ISEN-Brest. Kany. TD: Jeu de la vie
In[2]:= New=Initial;
For[n=1,n<=NbreIterations,n++,
Old=New;
For[i=1,i<=Xmax,i++,
im=If[i==1,Xmax,i-1]; ip=If[i==Xmax,1,i+1];
For[j=1,j<=Ymax,j++,
jm=If[j==1,Ymax,j-1]; jp=If[j==Ymax,1,j+1];
NbreVoisins1=Old[[im]][[jm]]+Old[[im]][[j]]+Old[[im]][[jp]] +Old[[i]][[jm]]
+Old[[i]][[jp]] +Old[[ip]][[jm]]+Old[[ip]][[j]]+Old[[ip]][[jp]];
New=If[NbreVoisins1==3,ReplacePart[New,1,{i,j}],
If[NbreVoisins1<2 || NbreVoisins1>3,ReplacePart[New,0,{i,j}],New]];
]];
If[Mod[n,NbreIterations/10]==0, ListDensityPlot[New,Frame->False,Mesh->False]];];
3 Code avec Python
from tkinter import *
import random
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !