Précédement nous avons écrit une fonction pour produire une génération de
cellules au hasard. Nous allons aujourd’hui afficher une telle génération.
Je veux maintenant calculer le prochain état d’une cellule, en fonction de son
voisinage. Pour rappel:
Si la somme des 9 cellules du voisinage est 3, le nouvel état est «vivant».
Si la somme des 9 cellules du voisinage est 4, le nouvel état est le même
que l’ancien.
Dans tous les autres cas, le nouvel état est «mort».
Calculer le prochain état d’une cellule
Voici les différents tests qui m’ont conduits à l’écriture de la fonction
nextCellState. Notez bien que, selon les principes du TDD, je ne les ai pas
écrit tous d’un coup, mais bien un par un, en implémentant la fonction
minimale à chaque nouveau test.
Et voici cette fonction.
Maintenant il me faut une fonction qui extrait un voisinage à partir d’une
position dans une génération. C’est la partie la plus complexe. Comme toujours,
je commence doucement avec un test très simple et son code d’implémentation.
Je peux commencer à specer les choses sérieuses.
On note l’utilisation de toEqual pour tester l’égalité de deux tableaux,
toBe() testant l’identité d’après ce que j’ai compris.
Et voici le code qui fait passer tout ça, moche mais pragmatique.
C’est au tour des cellules du bord, d’abord en haut.
Le code devient de plus en plus moche.
Puisqu’il passe les tests, je cherche à l’améliorer un peu.
Si on suit les principes du TDD, il faut écrire le code tout juste suffisant
pour faire passer ce test. Je me contente donc de mapper les undefined en 0.
Si j’ajoute un test pour une cellule du bord droit, il passe.
Très bien, il faut maintenant s’occuper des cellules de coins. Je me rends
compte que les quatres tests suivants passent sans que je n’ai rien à modifier
dans le code.
Je suis donc prêt à tout mettre ensemble. Ce sera pour le prochain article car
celui-ci est déjà bien long.