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