TD: Jeu de la vie

Transcription

TD: Jeu de la vie
TD: Jeu de la vie
D’après Wikipédia
1 Position du problème
Le jeu de la vie, automate cellulaire imaginé par John Horton Conway en 1970, est probablement le plus
connu de tous les automates cellulaires1 .
Malgré des règles très simples, le jeu de la vie permet le développement de motifs extrêmement complexes.
Le jeu se déroule sur une grille à deux dimensions, théoriquement infinie (en réalité, 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 états distincts: “vivantes” ou “mortes”.
À chaque étape, l’évolution d’une cellule est entièrement déterminée par l’état de ses huit voisines de la
façon suivante:
- une cellule morte possédant exactement trois voisines vivantes devient vivante (elle naı̂t).
- une cellule vivante possédant deux ou trois voisines vivantes le reste, sinon elle meurt.
La nouvelle configuration, obtenue l’application de ces règles, sert de configuration de départ 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];
1
Un automate cellulaire est un modèle où chaque état conduit mécaniquement à l’état suivant à partir de
règles pré-établies.
2
En pratique, on prendra une grille infiniment périodique: les voisines des cases situées à un bord de la grille
seront supposées être celles situées 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

Documents pareils