Le jeu de la vie en Julia - partie 2
Calcul du prochain état d’un cellule
Au départ je voulais écrire une fonction nextcellstate
. C’est la convention
en Julia: séparer les mots par des underscores seulement si c’est
incompréhensible. Je ne sais pas pour vous, mais moi je trouve nextcellstate
incompréhensible. Donc ça devient next_cell_state
. C’est mieux. Mais on te
dis aussi que si tu ressens le besoin de mettre des underscores, c’est
peut-être parce que ta fonction en fait trop. Bon conseil.
Alors, cette fonction pourrait appartenir à un module Cell
. Elle devient donc
Cell.nextstate
. Pardon, Cell.next_state
, c’est mieux. Mais j’ai encore next
et
state
, qui font deux choses différentes.
state
calcule l’état d’un voisinage (neighborhood) de cellules, c’est à dire le
nombre de 1
(cellule vivante) parmi 9 cellules: celle qui nous intéresse et ses
8 voisines.
next
calcule le prochain état d’une cellule (1 ou 0, vivante ou morte) selon son
état actuel et l’état de son voisinage.
J’ai donc décidé d’avoir une fonction Neighborhood.state
plus une fonction
Cell.next
. Voici le test pour Neighborhood.state
, c’est loin d’être
exhaustif, mais j’ai envie d’avancer:
Et la fonction:
countnz
compte tout simplement le nombre d’éléments différents de zéro.
Passons à Cell.next
:
Il semble que Julia n’ai pas de switch/case, dommage.
Maintenant je passe à l’extraction d’une génération, c’est à dire les 9 cellules composées de notre cellule cible et de ses 8 voisines.
C’est tellement simple à implémenter… J’aime de plus en plus Julia.
Ensuite viennent les tests des cas exceptionnels. Je ne vous en montre que 3:
Là encore, l’implémentation est simple:
Ce qu’on peut ré-arrenger un peu, par exemple ainsi:
Rendez-vous dans le prochain article pour la fin du jeu de la vie en Julia.