#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;

//Cette procédure modifie a,b et c pour leur donner des valeurs aléatoires entre 0 et 9
void creer_challenge( int &a , int &b , int &c){

	//On génère un nombre entier aléatoire avec rand() et garde son reste modulo 10 dans a,b et c
	a = rand()%10;
	b = rand()%10;
	c = rand()%10;
}

//Cette fonction calcule le nombre de nombres bien placése et le renvoit
int nb_correct( int a, int b, int c, int x, int y, int z){

	int resultat;
	resultat = 0;
	if(a==x)
		resultat++;
	if(b==y)
		resultat++;
	if(c==z)
		resultat++;
	return resultat;
}

//Cette fonction calcule le nombre de nombres mal placés et le renvoit
int nb_pas_correct( int a, int b, int c, int x, int y, int z){

	int resultat;
	resultat = 0;
	//On efface les valeurs biens placées pour ne pas les recompter
	if(a==x)
		a = -1;
	if(b==y)
		b = -1;
	if(c==z)
		c = -1;
	//On teste toutes les possibilités et on efface celle qui sont juste pour ne pas les recompter 
	if(x==b){
		b = -1;
		resultat++;
	}
	if(x==c){
		c = -1;
		resultat++;
	}
	if(y==a){
		a = -1;
		resultat++;
	}
	if(y==c){
		c = -1;
		resultat++;
	}
	if(z==a){
		a = -1;
		resultat++;
	}
	if(z==b){
		b = -1;
		resultat++;
	}
	return resultat;
}

int main(){

	//Les nombres à deviner seront dans les variables n1, n2 et n3
	int n1,n2,n3;
	//Les nombres à saisir par le joueur le seront dans d1,d2 et d3
	int d1,d2,d3;
	//On a besoin d'une variable pour comptabiliser le nombre d'essais
	int nb_essais = 0;

	//Initialisation du générateur aléatoire
	srand(time(NULL));

	creer_challenge(n1,n2,n3);
	//Pour éviter que ne rentre pas dans la boucle on choisit d1 dirrérent de n1
	d1 = n1+1;
	cout << n1 << n2 << n3;
	//Tant que les trois valeurs ne sont pas trouvées on continue le jeu
	while( n1!=d1 or n2!=d2 or n3!=d3){
		cout << "Donnez 3 nombres entre 0 et 9 :";
		cin >> d1 >> d2 >> d3;
		cout << "Nombres corrects : " << nb_correct(n1,n2,n3,d1,d2,d3) << endl;
		cout << "Nombres mal placés : " << nb_pas_correct(n1,n2,n3,d1,d2,d3) << endl;
		nb_essais++;
	}
	//On utilisera une petite astuce pour rajouter un 's' à la fin de essai :) 
	cout << "Bravo, vous avez trouvé en seulement "<< nb_essais << " essai"<< "s"[!(nb_essais-1)] << endl;
}
