Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/11/2015, à 13:37

Laërte

Les fonctions logiques et les tableaux à plus de deux entrées

Bonjour,

j'essaie de voir si il y a une fonction logique qui décrit "simplement" les règles du jeu de la vie.
L'idée c'est, pour chaque cellule d'un plan orthogonal en deux dimensions, de compter les cellules vivantes et mortes adjacentes (diagonales comprises).
Si notre cellule est vivante et qu'il y a deux ou trois cellules vivantes autour, elle restera vivante au tour suivant. Sinon elle meurt.
Si notre cellule est morte et qu'il y a trois cellules vivantes adjacentes, alors elle devient vivante.
Vous pouvez voir des exemples de ce que ça donne sur internet, c'est assez bluffant.

J'essaie donc de créer une fonction logique qui décrive cette état.

Elle serait en deux partie : si la cellule est vivante, ou si elle est morte.

Commençons par la partie où elle est morte.
Ça va être qqch du genre : non-O ET ( fonction retournant vrai si trois de huit variables sont vraies ).

Et ma question : C'est quoi la fonction en question ?
J'avais pensé à qqch avec l'opérateur XOR, mais celui-ci s'annule seulement si tous ses paramètres ont la mêmes valeurs.
Il me faudrait un opérateur ne retournant vrai que si un seul de ses paramètres est vrai.

À moins que l'un de vous n'ait une autre idée.

Merci !

Hors ligne

#2 Le 19/11/2015, à 16:46

pingouinux

Re : Les fonctions logiques et les tableaux à plus de deux entrées

Bonjour,
Quel est le langage de programmation ? Comment les cellules sont-elles stockées en mémoire ?
Tu peux faire un fonction qui prend en entrée une cellule, et qui retourne le nombre de cellules voisines vivantes.

Hors ligne

#3 Le 19/11/2015, à 17:54

MicP

Re : Les fonctions logiques et les tableaux à plus de deux entrées

Les 2 états d'une cellule :
  1 => vivante
  0 => morte

À chaque tour :

Cellule est vivante => si (somme des états des cellules adjacentes < 2)  => Cellule va mourir
Cellule est morte   => si (somme des états des cellules adjacentes >= 3) => Cellule va ressusciter

Il faut donc savoir comment récupérer la "somme des états des cellules adjacentes", et bien sûr savoir avec quel langage de programmation.

Hors ligne

#4 Le 20/11/2015, à 22:53

Laërte

Re : Les fonctions logiques et les tableaux à plus de deux entrées

Eh bien, il n’y a pas de langage de programmation, justement… C’est juste une formule en algèbre booléenne que j’essaie d’obtenir.
https://fr.wikipedia.org/wiki/Alg%C3%A8 … _(logique)
Pour récupérer la somme des états des cellules adjacentes, considérons qu’on connaît tout cela. Pour l’écriture, je pensais créer une variable pour chaque cellule adjacente — donc a, b, c, d, e, f, g et h — et regarder si ces variables sont vraies ou fausses.

Hors ligne

#5 Le 21/11/2015, à 09:50

pingouinux

Re : Les fonctions logiques et les tableaux à plus de deux entrées

Ça ne répond pas vraiment à la question, mais au lieu de traiter des variables booléennes, je mettrais les entiers 0 (cellule morte) ou 1 (cellule vivante) dans chacune des variables a, b,…,h. Il suffit de faire la somme de ces variables pour avoir le nombre de voisines vivantes.

Hors ligne

#6 Le 22/11/2015, à 18:04

alius

Re : Les fonctions logiques et les tableaux à plus de deux entrées

Salut Laërte, je vois que peu de personnes ne parlent couramment le Boolean ici.
Pour ton problème, il faut que tu écrive ta fonction logique de cette manière :

f(a,b,c,d,e,f,g,h,i) = <expression sous forme normale disjonctive>
9 variables : une (a) pour la cellule en question et 8 pour les cellules voisines (b,c,d,e,f,g,h,i)

Cette fonction représente donc l'état "futur" de la cellule

je pense que la forme disjonctive sera plus simple dans un premier temps.

Pour écrire cette expression il te faut donc (beaucoup de courage) parce que elle va être très longue. Il va te falloir prévoir tout les cas de figures qui seront distinguer par les OU logiques (la disjonction).

La première chose à faire est la table de vérité de la fonction avec les 2^9 solutions possibles il te faudra donc aussi détailler chaqu'un des termes (possibilité) du systemes par exemple !a.b.c.!d.e.f.g.h.!i qui correspond à l'état cellule morte et 6 cellules voisines vivantes.
Enfin quand tu aura tout ça ! tu devra analyser la table de vériter et trouver pour quels cas la fonction est a un en même temps que les termes qui t'intérressent sont à un. Ces termes là devront apparraitre dans l'expression logique.


Alius

Hors ligne

#7 Le 24/11/2015, à 19:22

Laërte

Re : Les fonctions logiques et les tableaux à plus de deux entrées

@Alius :
C’est bien ce que je craignais, j’espérais qu’il y ait un moyen plus simple de le faire, parce que tester 512 cas différents, je le sens moyen…
Peut-être qu’un programme python pourrait m’aider, en faisant ce qui m’a été conseillé — une simple somme — qui m’afficherait toutes les combinaisons fonctionnant…

Ensuite je devrais être capable — si l’expression l’autorise — à réduire celle-ci, je me trompe ?

Merci beaucoup d’avoir réduit à néant tous mes espoirs de simplicité… ^^

Hors ligne

#8 Le 24/11/2015, à 19:45

alius

Re : Les fonctions logiques et les tableaux à plus de deux entrées

Tout bien réflechit je pense que c'est réalisable avec un script python !
tu lui fait générer toutes les termes d'une forme normale canonique disjonctives à 9 variables avec pour contrainte, les contraintes du jeu de la vie.


Alius

Hors ligne

#9 Le 24/11/2015, à 20:24

pingouinux

Re : Les fonctions logiques et les tableaux à plus de deux entrées

En python, pour compter le nombre de variables logiques à vrai (ou différentes de zéro) dans une liste :

nombre=len(list(filter(None,(a,b,c,d,e,f,g,h))))

Ajouté :
Si les variables contiennent True, False ou 0, 1, ceci marche aussi :

(a,b,c,d,e,f,g,h).count(True)

Dernière modification par pingouinux (Le 25/11/2015, à 06:42)

Hors ligne