Master Mind 2.0

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Master Mind 2.0

    Sinceramente è la prima volta che provo a fare il debug con devc++, ho messo il brackpoint dopo le istruzioni che immette l'utente e compilato in modalità debug. Poi sono andato a fare il debug riga per riga come mi hai suggerito (cliccando su NEXT LINE) ma il debug non termina quindi stando a cio che mi hai detto a quanto pare non trova nessun errore. Una volta uscito dal ciclo lo rinizia perchè appunto il ciclo dovrebbe esser fatto per 1296 volte quindi tutto torna. Che pensi?
  • Re: Master Mind 2.0

    Come ti ho detto il codice non è compilabile, mi sembra assurdo che compili per te, quindi non saprei come aiutarti

    Di errori evidenti vedo
    char temporary[4],s_found[4];
    che hanno un byte in meno di quello che serve.

    Poi non ho capito perché ti sei impuntato con le stringhe quando poi gestisci il tutto come array di char
  • Re: Master Mind 2.0

    Si effettivamente hai ragione, in c++ sintatticamente è errato scrivere gli operatori and e or cosi, ma il compilatore che uso io non mi ha mai dato problemi (uso DEVC++). In ogni caso, ho rivisto il codice e utilizzato la giusta sintassi per gli operatori && e ||.
    Per quanto riguarda invece utilizzare le stringhe, l'ho fatto semplicemente perchè anche nel Mastermind 1 ( dove era l'utente che doveva indovinare la soluzione) ho utilizzato un array di stringhe come mostrato anche nel codice che mi ha consigliato Rubik, poichè è quello che sono riuscito a comprendere meglio...il codice di Nippolo non mi era molto chiaro. Inoltre utilizzando un array di stringhe per ogni indice dell'array posso considerare un tentativo(composto da 4 lettere) evitando cosi di utilizzare una matrice come mi avevi mostrato inizialmente .
    Poi non ho capito perchè dici che quei due array hanno un byte in meno, li ho dichiarati di 4 byte perchè il tentativo è composto da 4 caratteri appunto, o sbaglio?
    intanto ti lascio il codice dove ho corretto la sintassi degli operatori
    CODICE COMPLETO:
    
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <time.h>
    #include <iostream>
    #include <string>
    #include <cstring>
    using namespace std;
    char car;
    bool marca[1296];
    int n_attempts=0,c=1296;
    float t_dif;
    time_t ini,fin; 
    
    void gotoxy( short column, short line );
    
    int esc_function();
    
    void show_solution();
    
    void check_solution(string array_s[]);
    
    
    int main(){
        int y;
        do{
        	
        	for(y=0;y<1296;y++){
        		marca[y]=false;
    		}
        	n_attempts=0; //set  number of attempts
    		system("cls");
    		gotoxy(33,5);
    		cout<<" MISTER MIND **PLAYER** by Daniele Di Girolamo  ";
    		gotoxy(41,25);
    		cout<<"Click enter to continue--> ";
    		do{
    			car=getch();
    		}while(car==0 &&  car!=27);
        	if(car==27 ) esc_function();
        	system("cls");
        	do{
        	show_solution();
        	}while(car==13 && car!=27);
    	}while(car!=27 && car==13);
        
        
    	return 0;	
    }
    void gotoxy( short column, short line ){ //position of the text on screen 25 lines and 80 columns
      COORD pos={column,line};
      SetConsoleCursorPosition(GetStdHandle( STD_OUTPUT_HANDLE ),pos);}
      
    int esc_function(){if(car==27){{system("cls");gotoxy(40,15);cout<<"----Thanks to played! bye!---- ";ini=time(NULL);do{ fin=time(NULL); t_dif=difftime(fin,ini);} while(t_dif<3);exit(true);return (0);}}}
    
    void show_solution(){
    	string s[1296],indication,indication_comp;
    	char temporary[5],s_found[5];
    	bool found=false;
    	int i, j, k, l, n = 0,indice;
        
        for(i = 0; i < 6; i++)
            for(j = 0; j < 6; j++)
                for(k = 0; k < 6; k++)
                    for(l = 0; l < 6; l++){
                        s[n]  = i + 'A';
                        s[n] += j + 'A';
                        s[n] += k + 'A';
                        s[n] += l + 'A';
                        s[n++];
                    } 
        srand(time(NULL));j=0;
        		/*richiesta input dell' utente (input controllato), indication rappresenta la stringa con i caratteri Strikes e bals, 
    		da confrontare più tardi*/
    	if(n_attempts==0){
    		indice=rand()%1296;
    		marca[indice]=true;
    		gotoxy(36,5);
    		cout<<" MISTER MIND **PLAYER** by Daniele Di Girolamo  ";
    		gotoxy(10,8);
    		cout<<"  "<<c<<" Try N. "<<n_attempts+1<<" ==> ";
    		cout<<s[indice]<<" ? ";
    		n_attempts++;
    		do{
    		car=getch();
    		if((car==88 || car==79)&& j!=4){ putch(car);indication+=car;j++;}	
    		if((car==120 || car==111) && j!=4  ){car=car-32;putch(car); indication+=car; j++;}
    		if (car==8 && j>0 ) {putch(8);putch(32);putch(8);j--;}
    		}while((car!=13 && car!=27));
    		n=0; 
    		do{
    			strcpy(temporary,s[indice].c_str()); //utilizzo la funzione strcpy per copiare il tentativo tentato nell' array temporary(c_str() da array di stringa ad array di char)
    			strcpy(s_found,s[n].c_str());  //utilizzo la funzione strcpy per copiare il possibile  tentativo nell' array s_found.
    			//da qui in poi viene utilizzato il codice di Rubik presente nel forum Master Mind(per verificare gli strikes e i bals)
    			for ( i=0 ; i<4; i++){
            		if (temporary[i] == s_found[i]){ 
                		s_found[i]='0'; // avoiding count like a bal
                		temporary[i]='1';//avoiding reuse the char
    					indication_comp += "X";} //il confronto tra il tentativo provato e quello nell'array s, ha prodotto uno Strike.
            	}	
    			for ( int x=0 ; x<4; x++){
            		for ( j=0 ; j<4; j++){
                		if (s_found[x] == temporary[j]){ 
                    		s_found[x]='0'; //avoiding double count
                    		temporary[j]='1';//avoiding reuse the char 
    						indication_comp += "O";} //il confronto tra il tentativo provato e quello nell'array s, ha prodotto un Bal
                	}
        		}
        			//controllo se le indicazioni dell' utente sono uguali a quelle del computer
        		if((indication==indication_comp ) && (indication!="       " && indication_comp!="      ")){
        			found=true; //ho trovato il tentativo successivo
        			marca[n]=true; //marco alla posizione n, nell' array parallelo a s[1296]
    			}
    			else{marca[n]=true;} //altrimento marco perchè vuol dire che il possibile tentativo non è sicuramente la soluzione
    			indication="       ";indication_comp="      "; n=n+1; //svuoto le stringhe e incremento n
    		}while(n<=1296 && !found);
    		gotoxy(10,9);
    		cout<<"  "<<c<<" Try N. "<<n_attempts+1<<" ==> ";
    		cout<<s[n-1]<<" ? ";/*stampo n-1 
    		perchè n viene incrementato anche se ho trovato il tentativo successivo(quindi prendo quello alla posizione precedente)*/
    	}
    }
    
    Ricerca della soluzione
    
    		/*richiesta input dell' utente (input controllato), indication rappresenta la stringa con i caratteri Strikes e bals, 
    		da confrontare più tardi*/
    	if(n_attempts==0){
    		indice=rand()%1296;
    		marca[indice]=true;
    		gotoxy(36,5);
    		cout<<" MISTER MIND **PLAYER** by Daniele Di Girolamo  ";
    		gotoxy(10,8);
    		cout<<"  "<<c<<" Try N. "<<n_attempts+1<<" ==> ";
    		cout<<s[indice]<<" ? ";
    		n_attempts++;
    		do{
    		car=getch();
    		if((car==88 || car==79)&& j!=4){ putch(car);indication+=car;j++;}	
    		if((car==120 || car==111) && j!=4  ){car=car-32;putch(car); indication+=car; j++;}
    		if (car==8 && j>0 ) {putch(8);putch(32);putch(8);j--;}
    		}while((car!=13 && car!=27));
    		n=0; 
    		do{
    			strcpy(temporary,s[indice].c_str()); //utilizzo la funzione strcpy per copiare il tentativo tentato nell' array temporary(c_str() da array di stringa ad array di char)
    			strcpy(s_found,s[n].c_str());  //utilizzo la funzione strcpy per copiare il possibile  tentativo nell' array s_found.
    			//da qui in poi viene utilizzato il codice di Rubik presente nel forum Master Mind(per verificare gli strikes e i bals)
    			for ( i=0 ; i<4; i++){
            		if (temporary[i] == s_found[i]){ 
                		s_found[i]='0'; // avoiding count like a bal
                		temporary[i]='1';//avoiding reuse the char
    					indication_comp += "X";} //il confronto tra il tentativo provato e quello nell'array s, ha prodotto uno Strike.
            	}	
    			for ( int x=0 ; x<4; x++){
            		for ( j=0 ; j<4; j++){
                		if (s_found[x] == temporary[j]){ 
                    		s_found[x]='0'; //avoiding double count
                    		temporary[j]='1';//avoiding reuse the char 
    						indication_comp += "O";} //il confronto tra il tentativo provato e quello nell'array s, ha prodotto un Bal
                	}
        		}
        			//controllo se le indicazioni dell' utente sono uguali a quelle del computer
        		if((indication==indication_comp ) && (indication!="       " && indication_comp!="      ")){
        			found=true; //ho trovato il tentativo successivo
        			marca[n]=true; //marco alla posizione n, nell' array parallelo a s[1296]
    			}
    			else{marca[n]=true;} //altrimento marco perchè vuol dire che il possibile tentativo non è sicuramente la soluzione
    			indication="       ";indication_comp="      "; n=n+1; //svuoto le stringhe e incremento n
    		}while(n<=1296 && !found);
    		gotoxy(10,9);
    		cout<<"  "<<c<<" Try N. "<<n_attempts+1<<" ==> ";
    		cout<<s[n-1]<<" ? ";/*stampo n-1 
    		perchè n viene incrementato anche se ho trovato il tentativo successivo(quindi prendo quello alla posizione precedente)*/
    	}
    }
    
  • Re: Master Mind 2.0

    Ciao Weirestrass,
    scusa il disturbo ma sono quasi arrivato alla fine del progetto ed ho bisogno di un piccolo aiuto:
    come vedrai dal codice che sto postando sono finalmente riuscito a risolvere il problema precedentemente discusso.
    Ora il programma funziona quasi correttamente, ma c’ è un problema: l’ algoritmo che anche tu hai usato impiega in media 15 tentativi per arrivare alla soluzione finale. A parità di soluzioni ho provato anche il tuo e funziona decisamente meglio in quanto utilizza meno tentativi.
    Il fatto è che se la soluzione inizia con lettere quali A-B la soluzione arriva più facilmente, perché i possibili tentativi con A-B iniziali sono all’ inizio dell’ array s, mentre se ho delle soluzioni con la prima lettera che inizia con E-F allora il programma impiega circa 15 tentativi al raggiungimento della soluzione.
    Non capisco il motivo, dato che l’ algoritmo implementato è lo stesso.
    Ad esempio con la soluzione FFFF il mio funziona in questo modo: Addirittura il programma termina con tentativi -1 e con violazione alla memoria!
    Il tuo, invece, funziona correttamente e a partire dal terzo tentativo invece di CAAA inserisce CCCC, come se il tentativo successivo lo facesse in funzione di quelli tentati precedentemente e non solo in funzione del precedente, come è possibile?
    solution_Weirestrass.JPG
    solution_Weirestrass.JPG

    Ecco il codice, ho tolto gli and e or , sostituendoli con && e ||, ora spero che compili.

    CODICE:
    
    #include <iostream>
    #include <conio.h>
    #include <windows.h>
    #include <time.h>
    #include <string>
    #include <cstring>
    using namespace std;
    char car;
    bool marca[1296];
    int n_attempts=0,c;
    float t_dif;
    time_t ini,fin; 
    
    struct outcome{
    	int strikes;
    	int bals;
    };
    
    void gotoxy( short column, short line );
    
    int esc_function();
    
    void show_solution();
    
    
    
    int main(){
        int y;
        do{
        	for(y=0;y<1296;y++){
        		marca[y]=false;
    		}
    		c=1296;
        	n_attempts=0; //set  number of attempts
    		system("cls");
    		gotoxy(33,5);
    		cout<<" MISTER MIND **PLAYER** by Daniele Di Girolamo  ";
    		gotoxy(41,25);
    		cout<<"Click enter to continue--> ";
    		do{
    			car=getch();
    		}while(car==0 && car!=27);
        	if(car==27 ) esc_function();
        	system("cls");
    		show_solution();
    		if(car==27) esc_function();
    		gotoxy(41,25);
    		cout<<"Click enter to continue--> ";
    		do{
    			car=getch();
    		}while(car==0 && car!=27);
        	}while(car!=27 && car==13);
    	return 0;	
    }
    void gotoxy( short column, short line ){ //position of the text on screen 25 lines and 80 columns
      COORD pos={column,line};
      SetConsoleCursorPosition(GetStdHandle( STD_OUTPUT_HANDLE ),pos);}
      
    int esc_function(){if(car==27){{system("cls");gotoxy(40,15);cout<<"----Thanks to played! bye!---- ";ini=time(NULL);do{ fin=time(NULL); t_dif=difftime(fin,ini);} while(t_dif<3);exit(true);return (0);}}}
    
    void show_solution(){ //funzione cerca la soluzione
    	string s[1296];
    	outcome user, comp;
    	char temporary[4],s_found[4],indication[4]; //temporary per il tentativo precedente, s_found per il possibile tentativo successivo, indication per le indicazioni dell' utente
    	bool found; //flag per verificare quando si trova un tentativo plausibile in base alle informazioni dell' user
    	int i, j, k, l, n = 0,indice;
        
        for(i = 0; i < 6; i++)
            for(j = 0; j < 6; j++)
                for(k = 0; k < 6; k++)
                    for(l = 0; l < 6; l++){
                        s[n]  = i + 'A';
                        s[n] += j + 'A';
                        s[n] += k + 'A';
                        s[n] += l + 'A';
                        s[n++];
                    } 
        srand(time(NULL));j=0;
    	if(n_attempts==0){
    		indice=rand()%1296; //generazione indice random
    		marca[indice]=true; //marco il primo tentativo
    		gotoxy(36,5);
    		cout<<" MISTER MIND **PLAYER** by Daniele ";
    		gotoxy(10,8);
    		cout<<"  "<<c<<" Try N. "<<n_attempts+1<<" ==> ";
    		cout<<s[indice]<<" ? ";
    		n_attempts++;
    		do{//gestione dell' input controllato 
    		car=getch();
    		if((car==88 || car==79)&& j!=4){ putch(car);indication[j]=car;j++;}	// 88==X 79==O 
    		if((car==120 || car==111) && j!=4  ){car=car-32;putch(car); indication[j]=car; j++;} //caso in cui l'utente abbia il block maiusc disattivo
    		if (car==8 && j>0 ) {putch(8);putch(32);putch(8);indication[j-1]='0';j--;} //premo backslash se ho sbagliato a dare le informazioni e voglio cambiarle
    		}while((car!=13 && car!=27));
    		for(i=0;i<4;i++){ //conteggio degli strikes e bals dell' utente
    			if(indication[i]=='X') user.strikes++;
    			if(indication[i]=='O') user.bals++;}
    		if(user.strikes!=4){//esecuzione del blocco se strikes dell' utente è diverso da 4
    		n=0; found=false;
    		do{
    			strcpy(temporary,s[indice].c_str()); //copio il tentativo fatto su temporary 
    			strcpy(s_found,s[n].c_str());//copio il possibile tentativo successivo in s_found
    			for ( i=0 ; i<4; i++){
            		if (temporary[i] == s_found[i]){ 
                		s_found[i]='0'; // avoiding count like a bal
                		temporary[i]='1'; ///avoiding reuse the char
    					comp.strikes++;} //incremento il numero di strikes dell' computer
            	}
    			for ( int x=0 ; x<4; x++){
            		for ( j=0 ; j<4; j++){
                		if (s_found[x] == temporary[j]){ 
                    		s_found[x]='0'; //avoiding double count
                    		temporary[j]='1'; ///avoiding reuse the char
    						comp.bals++; }  //incremento il numero di bals dell' computer
                	}
        		}
        		if(user.strikes==comp.strikes && user.bals==comp.bals) {found=true;c=c-1;marca[n]=true;} //se la condizione è vera: setto il flag found a true per uscire, decremento il numero dei possibili tentativi e marco il tentativo 
    			c=c-1; marca[n]=true; n=n+1;  comp.strikes=0;comp.bals=0; // altrimenti vado avanti con n=n+1, scarto il tentativo
    		}while( n<=1296 && !found && user.strikes!=4 && car!=27);
    		gotoxy(10,9); //output del secondo tentativo
    		cout<<"  "<<c<<" Try N. "<<n_attempts+1<<" ==> ";
    		cout<<s[n-1]<<" ? "; n_attempts++;}
    	}l=10; k=0;  //k== nuovo n per gli altri tentativi , l=line del tentativo successivo
    	//Da qui inizia il terzo tentativo fino alla soluzione
    	do{
    		j=0; user.strikes=0;  user.bals=0; found=false;
    		do{//gestione input controllato
    			car=getch();
    			if((car==88 || car==79)&& j!=4){ putch(car);indication[j]=car;j++;}	
    			if((car==120 || car==111) && j!=4  ){car=car-32;putch(car); indication[j]=car; j++;}
    			if (car==8 && j>0 ) {putch(8);putch(32);putch(8);indication[j-1]='0';j--;}
    		}while((car!=13 && car!=27));
    		for(i=0;i<4;i++){ //conteggio strikes e bals dell' user
    			if(indication[i]=='X') user.strikes++;
    			if(indication[i]=='O') user.bals++;}
    		do{
    			strcpy(temporary,s[n-1].c_str()); //indica il tentativo precente 
    			if(marca[k]!=true){ //controllo se il tentativo non sia stato già preso in considerazione
    			strcpy(s_found,s[k].c_str()); 
    			for ( i=0 ; i<4; i++){
            		if (temporary[i] == s_found[i]){ 
                		s_found[i]='0'; // avoiding count like a bal
                		temporary[i]='1';//avoiding reuse the char
    					comp.strikes++;} 
            	}
    			for ( int x=0 ; x<4; x++){
            		for ( j=0 ; j<4; j++){
                		if (s_found[x] == temporary[j]){ 
                    		s_found[x]='0'; //avoiding double count
                    		temporary[j]='1'; ///avoiding reuse the char
    						comp.bals++; }  
                	}
        		}
        		if(user.strikes==comp.strikes && user.bals==comp.bals) {found=true;c=c-1;marca[k]=true;n=k;user.strikes=0; user.bals=0; }
        		//n=k indica che n avrà il valore del nuovo tentativo che sta per essere stampato a schermo
        		else{c=c-1; marca[k]=true;}
        		comp.strikes=0;comp.bals=0;  
        		}
    			k=k+1;  
    		}while(k<=1296 && !found && user.strikes!=4 && car!=27);
    		if(user.strikes==4){ cout<<"\t\t ***SOLUTION***";}
    		else{
    		gotoxy(10,l++); 
    		cout<<"  "<<c<<" Try N. "<<n_attempts+1<<" ==> ";
    		cout<<s[k-1]<<" ? "; n_attempts++;} 
    	}while(user.strikes!=4 && car!=27);
    }
    
    ESEMPIO : Cosa ne pensi? Cosa posso fare per ottimizzare il codice?
    Grazie mille in anticipo!
  • Re: Master Mind 2.0

    Prova così
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    typedef struct {
        int strikes;
        int bals;
    } outcome;
    
    outcome round(string sol, string ten){
        outcome ret = {0,0};
        int i, occ[6] = {0};
      
        for(i = 0; i < 4; i++){
            ret.strikes += sol[i] == ten[i];
            ++occ[sol[i] - 'A'];
            --occ[ten[i] - 'A'];
        }
        ret.bals = 4 - ret.strikes;
        for(i = 0; i < 6; i++)
            if(occ[i] > 0)
                ret.bals -= occ[i]; 
        
        return ret;
    }
    
    outcome user_round(string ten){
        string sol;
        outcome ret;
        bool ok;
        
        do{
            ok = true;
            ret.strikes = 0;
            ret.bals = 0;
            getline(cin, sol);
            for(int i = 0; i < sol.length(); i++){
                if(sol[i] == 'X' || sol[i] == 'x')
                    ret.strikes++;
                else if(sol[i] == 'O' || sol[i] == 'o')
                    ret.bals++;            
            }
            if(ret.strikes + ret.bals > 4){
                cout <<  "Too many strikes and bals - retry\n > ";   
                ok = false;
            }
        }while(!ok);
     
        return ret;
    }
    
    int main() {
        string soluzione[1296];
        int i, j, k, l, m = 0;
        
        for(i = 0; i < 6; i++)
            for(j = 0; j < 6; j++)
                for(k = 0; k < 6; k++)
                    for(l = 0; l < 6; l++){
                        soluzione[m]    = i + 'A';
                        soluzione[m]   += j + 'A';
                        soluzione[m]   += k + 'A';
                        soluzione[m++] += l + 'A';  
                    }   
                  
        bool scartata[1296] = {0}, no_solution = false;
        outcome n, o = {0,0};
        
        cout << "Reversed Master Mind\n\n";
        
        k = 1;
        while(o.strikes != 4){
            for(i = 0; i < 1296 && scartata[i]; i++);
            if(i >= 1296){
                no_solution = true;
                break;
            }
            cout <<  "Try N. " << k << " - " << soluzione[i] << " > ";        
            o = user_round(soluzione[i]);
            if(o.strikes != 4){
                scartata[i] = true;
                for(j = i; j < 1296; j++)
                    if(!scartata[j]){
                        n = round(soluzione[j], soluzione[i]);
                        if(n.strikes != o.strikes || n.bals != o.bals)
                            scartata[j] = true;
                }
                k++;
            }
        }
        
        if(no_solution)
            cout << "\n\nThere is no possible solution!" << endl;    
        else
            cout << "\n\nSolution found!" << endl;
            
        return 0;
    }
    
  • Re: Master Mind 2.0

    Se invece lo vuoi con la prima scelta casuale
    #include <iostream>
    #include <string>
    #include <stdlib.h>
    #include <time.h>   
    using namespace std;
    
    typedef struct {
        int strikes;
        int bals;
    } outcome;
    
    outcome round(string sol, string ten){
        outcome ret = {0,0};
        int i, occ[6] = {0};
      
        for(i = 0; i < 4; i++){
            ret.strikes += sol[i] == ten[i];
            ++occ[sol[i] - 'A'];
            --occ[ten[i] - 'A'];
        }
        ret.bals = 4 - ret.strikes;
        for(i = 0; i < 6; i++)
            if(occ[i] > 0)
                ret.bals -= occ[i]; 
        
        return ret;
    }
    
    outcome user_round(string ten){
        string sol;
        outcome ret;
        bool ok;
        
        do{
            ok = true;
            ret.strikes = 0;
            ret.bals = 0;
            getline(cin, sol);
            for(int i = 0; i < sol.length(); i++){
                if(sol[i] == 'X' || sol[i] == 'x')
                    ret.strikes++;
                else if(sol[i] == 'O' || sol[i] == 'o')
                    ret.bals++;            
            }
            if(ret.strikes + ret.bals > 4){
                cout <<  "Too many strikes and bals - retry\n > ";   
                ok = false;
            }
        }while(!ok);
     
        return ret;
    }
    
    int main() {
        string soluzione[1296];
        int i, j, k, l, m = 0;
        
        for(i = 0; i < 6; i++)
            for(j = 0; j < 6; j++)
                for(k = 0; k < 6; k++)
                    for(l = 0; l < 6; l++){
                        soluzione[m]    = i + 'A';
                        soluzione[m]   += j + 'A';
                        soluzione[m]   += k + 'A';
                        soluzione[m++] += l + 'A';  
                    }   
                  
        bool scartata[1296] = {0}, no_solution = false;
        outcome n, o = {0,0};
        
        cout << "Reversed Master Mind\n\n";
        
        srand(time(NULL));    
        i = rand()%1296;
        string tmp = soluzione[i];
        soluzione[i] = soluzione[0];
        soluzione[0] = tmp;
        
        k = 1;
        while(o.strikes != 4){
            for(i = 0; i < 1296 && scartata[i]; i++);
            if(i >= 1296){
                no_solution = true;
                break;
            }
            cout <<  "Try N. " << k << " - " << soluzione[i] << " > ";        
            o = user_round(soluzione[i]);
            if(o.strikes != 4){
                scartata[i] = true;
                for(j = i; j < 1296; j++)
                    if(!scartata[j]){
                        n = round(soluzione[j], soluzione[i]);
                        if(n.strikes != o.strikes || n.bals != o.bals)
                            scartata[j] = true;
                }
                k++;
            }
        }
        
        if(no_solution)
            cout << "\n\nThere is no possible solution!" << endl;    
        else
            cout << "\n\nSolution found!" << endl;
            
        return 0;
    }
    
    Così la indovina al massimo con 9 tentativi

    Se inizi sempre con "AABB" la indovina al massimo in 8 tentativi.

    La soluzione migliore la indovina al massimo con 5, ma è più complessa
  • Re: Master Mind 2.0

    Ciao @Weirestrass,
    dopo tanta fatica sono riuscito a concludere questo progetto.
    Ti ringrazio tanto per la pazienza e il supporto che mi hai dato.
Devi accedere o registrarti per scrivere nel forum
21 risposte