begin process at 2012 05 27 19:04:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > RESOLUTION MASTERMIND

RESOLUTION MASTERMIND


 Information sur la source

Note :
5 / 10 - par 3 personnes
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :29/04/2004 Date de mise à jour :29/04/2004 15:28:49 Vu :6 179

Auteur : oliverman

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Un petit prog de resolution de Mastermind. C'est programmé un peu rapidement, mais ca marche plutot bien.

Source

  • #include <stdlib.h>
  • #include <stdio.h>
  • #include <time.h>
  • #define MAX_COLOR 8
  • #define MAX_PION 7
  • int pion[MAX_PION];
  • int combi[50][MAX_PION];//pour stoker toutes les combinaisons test
  • int bp[50],mp[50];//pour stoker le nombre de bien/mal placé des combinaisons
  • int ok=0;
  • int coups=0;
  • //test des pions bien plac
  • int testbp(int no)
  • {
  • int i=0;
  • for (int j=0;j<MAX_PION;j++)
  • if (combi[no][j]==pion[j])i++;
  • return i;
  • }
  • //test des pions mal plac
  • int testmp(int no)
  • {
  • int tmpcomb[MAX_PION];
  • int tmpplac[MAX_PION];
  • int i,j,plac=0;
  • for (i=0;i<MAX_PION;i++)
  • {
  • tmpcomb[i]=combi[no][i];
  • tmpplac[i]=pion[i];
  • }
  • for (i=0;i<MAX_PION;i++)
  • for (j=0;j<MAX_PION;j++)
  • if (i==j)
  • if (tmpcomb[i]==tmpplac[j])
  • {
  • tmpcomb[i]=-1;
  • tmpplac[j]=-2;
  • }
  • for (i=0;i<MAX_PION;i++)
  • for (j=0;j<MAX_PION;j++)
  • if (i!=j)
  • if (tmpcomb[i]==tmpplac[j])
  • {
  • plac++;
  • tmpcomb[i]=-1;
  • tmpplac[j]=-2;
  • }
  • return plac;
  • }
  • int cherchecomb(int p)
  • {
  • int i;
  • while (pion[p]<MAX_COLOR)
  • {
  • if (p)
  • {
  • if (cherchecomb(p-1))return 1;
  • }
  • else
  • {
  • if (!ok)
  • {
  • printf("\ncombinaison: ");
  • for (i=0;i<MAX_PION;i++)
  • printf("%d ",pion[i]);
  • printf("\nBP??:");
  • scanf("%d",&bp[coups]);
  • if (bp[coups]==MAX_PION)return 1;
  • printf("\nMP??:");
  • scanf("%d",&mp[coups]);
  • for (i=0;i<MAX_PION;i++) combi[coups][i]=pion[i];
  • coups++;
  • ok=1;
  • }
  • ok=0;
  • for (i=0;i<coups;i++)
  • if ((mp[i]==testmp(i))&&(bp[i]==testbp(i)))ok++;
  • if (ok==coups)
  • {
  • ok=0;
  • }
  • else
  • {
  • ok=1;
  • pion[0]++;
  • }
  • }
  • }
  • pion[p]=0;
  • if (p<MAX_PION)pion[p+1]++;
  • return 0;
  • }
  • int main(void)
  • {
  • int i;
  • srand ((unsigned)time (0));
  • for (i=0;i<MAX_PION;i++)
  • pion[i]=rand()%(MAX_COLOR-1);
  • while (!cherchecomb(MAX_PION));
  • return 0;
  • }
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define MAX_COLOR 8
#define MAX_PION 7


int pion[MAX_PION];
int combi[50][MAX_PION];//pour stoker toutes les combinaisons test
int bp[50],mp[50];//pour stoker le nombre de bien/mal placé des combinaisons

int ok=0;
int coups=0;

//test des pions bien plac
int testbp(int no)
{
	int i=0;
	for (int j=0;j<MAX_PION;j++)
	if (combi[no][j]==pion[j])i++;
	return i;
}

//test des pions mal plac
int testmp(int no)
{
	int tmpcomb[MAX_PION];
	int tmpplac[MAX_PION];
	int i,j,plac=0;
	for (i=0;i<MAX_PION;i++)
	{
		tmpcomb[i]=combi[no][i];
		tmpplac[i]=pion[i];
	}
	for (i=0;i<MAX_PION;i++)
	for (j=0;j<MAX_PION;j++)
	if (i==j)
	if (tmpcomb[i]==tmpplac[j])
	{
		tmpcomb[i]=-1;
		tmpplac[j]=-2;
	}
	for (i=0;i<MAX_PION;i++)
	for (j=0;j<MAX_PION;j++)
	if (i!=j)
	if (tmpcomb[i]==tmpplac[j])
	{
		plac++;
		tmpcomb[i]=-1;
		tmpplac[j]=-2;
	}
	return plac;
}
int cherchecomb(int p)
{
	int i;
	while (pion[p]<MAX_COLOR)
	{
		if (p)
		{
			if (cherchecomb(p-1))return 1;
		}
		else
		{
			if (!ok)
			{
				printf("\ncombinaison:  ");
				for (i=0;i<MAX_PION;i++)
				printf("%d ",pion[i]);
				printf("\nBP??:");
				scanf("%d",&bp[coups]);
				if (bp[coups]==MAX_PION)return 1;
				printf("\nMP??:");
				scanf("%d",&mp[coups]);
				for (i=0;i<MAX_PION;i++) combi[coups][i]=pion[i];
				coups++;
				ok=1;
			}
			ok=0;
			for (i=0;i<coups;i++)
			if ((mp[i]==testmp(i))&&(bp[i]==testbp(i)))ok++;

			if (ok==coups)
			{
				ok=0;

			}
			else
			{
				ok=1;
				pion[0]++;
			}
		}
	}
	pion[p]=0;
	if (p<MAX_PION)pion[p+1]++;
	return 0;
}
int main(void)
{

	int i;

	srand ((unsigned)time (0));
	for (i=0;i<MAX_PION;i++)
	pion[i]=rand()%(MAX_COLOR-1);

	while (!cherchecomb(MAX_PION));
	return 0;
}

 Conclusion

Si quelqu'un a un algo de resolution plus performant, je suis preneur!!
L'interet de commencer avec des combinaisons aleatoire et de ne pas pouvoir toujours pieger le programme avec la meme combinaison.


 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

Commentaires et avis

Commentaire de BruNews le 29/04/2004 14:26:55 administrateur CS

Salut,

mon mastermind que tu as teste, tu trouveras sources completes sur asmfr si cela t'interesse.
Un gros taf en urgence est arrive hier soir, je verrai ton code plus tard.

ciao...

Commentaire de oliverman le 29/04/2004 14:32:01

Humm, ok. Pour ma part, je vais ameliorer mon prog pour qu'il puisse resoudre le jeu avec un nombre de pions parametrable, et un nombre de couleur parametrable aussi. (pour les couleurs c'est sans probleme, mais le nombre de pions, je sais pas encore...)

Commentaire de oliverman le 29/04/2004 15:30:03

Bon Ben voila, code MAJ, on peut maintenant choisir le nombre de couleur et le nombre de pions. Normalement, ca devrait marcher.

Commentaire de magma le 29/04/2004 15:39:48


www.cppfrance.com/code.aspx?ID=10783

Commentaire de 18535671 le 06/12/2004 19:24:20

Yo también necesito urgentemente el programa Mastermind; así como su código fuente, diagramas de flujo, pruebas de escritorio y pseudocódigo. Es de vital importancia, ya que podría perder el avance de dos años de carrera. ¡Mil gracias!
carlos-botelho@simplesnet.pt

Commentaire de cameleon37 le 12/05/2008 23:36:50 1/10

Aprés plusieurs essai ,le programme plante a un certain moment...

Commentaire de oliverman le 13/05/2008 09:07:01

Retesté aujourd'hui sur Mac os, ça marche très bien. Je l'avais déjà testé des centaines (vraiment!) de fois il y a quelques années sous dos et linux, et ça marchait très bien.
Seule chose, ligne 20, la déclaration dans la boucle ne passe pas dans certains compilo, donc a changer.

Sinon, si il "plante", je suppose que c'est parce qu'il tourne dans le vide parce que tu as du faire une erreur à un moment lorsque tu lui dis le nombre de bien place/ mal placé. Reessais parce que je trouve ça vraiment étonnant.

Autre chose dans les améliorations possible, utilisation d'une liste chaîné à la place de "int combi[50][MAX_PION]; int bp[50],mp[50];". Ca serait beaucoup plus logique et plus propre a mon goût.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales