//! Cette classe représente une entrée de règle de transition totalistique configurable,
//! c'est à dire d'une entrée dans la table de transition permettant de déterminer si une transition s'effectue selon un état de départ et un voisinage donnés.
classTotalisticRuleEntry
{
public:
//! Construit la règle à partir d'une chaîne contenant la définition de la règle.
TotalisticRuleEntry(std::stringrule_string);
//! Détermine si l'entrée accepte l'état et le voisinage donnés.
//! \param initial_state L'état de la cellule concernée.
//! \param neighborhood Le voisinage de la cellule concernée.
//! \param next Référence vers la valeur du prochain état de la cellule si l'entrée est acceptée.
On pourrait aussi ajouter une constante 'N' qui correspondrait au nombre d'états de la règle:
i, (i+1)%N:[3] -> (i+1)%N
Exemple jeu de la vie:
0,0:* ,1:[3]->1 (une cellule morte devient vivante si elle a exactement 3 voisisin vivants)
1,0:[0..1],1:* ->0 (une cellule vivante meurt si elle a 0 ou 1 voisins vivants)
1,0:[4..*],1:* ->0 (une cellule vivante meurt si elle a 4 ou plus voisins vivants)
Exemple Wireworld: (https://xalava.github.io/WireWorld/)
1->2
2->3
3,1:[1..2]->1
Exemple Brain's Brain: (https://www.conwaylife.com/wiki/OCA:Brian%27s_Brain)
0,1:[2]->1
2->0
Si il n'y a pas de règle correspondat à une cellule et son voisinage, alors cette cellule ne change pas d'état.
Les intervalles non mentionnés dans la règle sont considérés par défaut comme des '*'.
Les règles sont traitées dans l'ordre de leur écriture, si deux règles pourraient s'appliquer à une cellule et à un voisinage, on applique la première dans l'ordre des lignes, du haut vers le bas.