#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;
}