Problème avec un Algorithme Complexe.

Fermé
zemzm Messages postés 4 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 21 mars 2010 - 20 mars 2010 à 23:39
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 - 21 mars 2010 à 11:57
bonsoir tout le monde.
je suis bloqué sur un Algorithme qui consiste à coder les pions d'un jeu de dominos.
en effet je pars du principe qu'un jeu de dominos, on a chaque pion qui est constitué d'un couple (donc orienté) d'entiers, chacun compris entre 1 et 6. et dans ce jeu, une suite de pions est valide si le seconde entier d'un pions est égale au premier entier du pion suivant dans la suite.

Ce que je souhaite faire est de coder chaque pion par un entier. qui le déterminera (entier qui identifiera ce pion).
je me demande aussi quel serai dans ce cas le plus grand entier (entier max) et le plus petit (entier min).


j'ai pensé à une première solution qui représentera un pion par une fonction de hachage. or dans ce cas je ne vois pas quel opérande utiliser. l'addition ne marche pas. car si on un pions; p1 (4:2) avec l'addition on le confondra avec p2(3:3), p3(5:1). qui valent tous 6.

merci à ceux qui peuvent me donner un coup de pousse ou un piste.
zem
A voir également:

3 réponses

bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 860
21 mars 2010 à 00:30
Tu peux utiliser n'importe quelle base > 7.
La plus "simple" (pour débuguer en tout cas) est la base 10.
Considérant un pion(a; b), cela ferait : 10a+b
p1(4;2) => 42,
p2(3;3) => 33,
p3(5:1) => 51

Je n'ai pas bien saisi si ce n'était que ça ton problème ou si je n'y réponds qu'à moitié par cette réponse.
2
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 860
21 mars 2010 à 11:57
En fait, si j'avais à le faire moi je ferai une liste chaînée de domino (contenant les 2 nombres séparément, le nombre a + le nombre b + domino suivant éventuellement doublement chaîné avec le précédent également) mais je ne sais pas ton niveau voilà pourquoi je n'avais que simplement répondu.

Avec ma solution, par exemple en base 10. Pour retrouver les 2 nombres tu n'as qu'à utiliser la division et le modulo. Par exemple 42/10 = 4, le premier ; et 42%10 = 2 le deuxième.
Donc la condition de vérification qui en découle devient :
Si T[i]/10 = T[i+1]%10 (ou inversement : la division pour le i+1ème, et le modulo pour le ième).

Par rapport à ton petit algo, je rectifierais affiche ("suite correcte. " ); qui n'est pas vraiment exact, ce devrait être "suite localement correcte" puisque ce n'est qu'entre les 2 dominos testés.

Par contre j'y ajouterais un booléen (ou un entier 0/1 faisant office de booléen si par la suite tu codes ça dans un langage qui n'a pas de type booléen) : initialisé à VRAI (on suppose que la suite de domino est bonne), et dans la boucle 'tant que' on vérifie tant que la suite est bonne déjà (parce que dès qu'on trouve qu'elle n'est pas bonne ça ne sert à rien de chercher à vérifier la suite de la chaîne), et ensuite dans la condition, quand la suite n'est localement pas bonne, on le passe à FAUX (car si c'est localement faux, c'est entièrement faux).
1
zemzm Messages postés 4 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 21 mars 2010
21 mars 2010 à 01:50
bonsoir bizu53,
tout d'abord je tiens a te remercie d'avoir pris de ton temps pour me répondre. j'aurai jamais pensé à ta solution. énorme. en effet cela me parait plus que correcte. et en plus il ne y aura pas de collision.
cependant je me demandais avec ta solution comment peut on vérifier si la suite de pions est correspondante et valide (la régle du jeu de domino que j'ai expliquer dans le 1er post ) . j'ai penser a stocker une suite de N pions dans un tableau. puis de vérifier si la case i+1=case i +2(on part de l'indice 0).

ex:
soit une suite de N pions (N constant) stocker dans un Tableau d'entier T.
soit i j;tailleT

Début:

Tant que(i<tailleT) faire
{

si T[i+1] =T[i+2];

affiche ("suite correcte. " );

sinon
affiche (suite incorrecte)

fin si
Fin Tan que

Fin


}

*****
Qu'en pense tu?
merci encore et bon week end.
0