Programozás‎ > ‎Feladatok‎ > ‎Mastermind‎ > ‎Megoldás‎ > ‎

mb_master.cpp

Letöltés: mb_master.cpp

#include <cstdio>
#include <cstdlib>
#include <iostream>

using namespace std;

void beolvas(char*);
void gen(int at);
bool check(int id);

int n;

int** t;
int c = 0;

int main()
{
    beolvas("mastermind05.be");
    gen(0);
    printf("Count: %d\n", c);
    return 0;
}

int tmp [4];
void gen(int at)
{
    if(at==4)
    {
        bool good=true;
        for(int i=0; i<n; i++)
        {
            if(!check(i))
                good = false;
        }
        if(good)
        {
            printf("%d%d%d%d\n", tmp[0], tmp[1], tmp[2], tmp[3]);
            c++;
        }
    } else
    {
        for(int i=1; i<=6; i++)
        {
            tmp[at]=i;
            gen(at+1);
        }
    }
}

bool check(int id)
{
    for(int i=0; i<4; i++)
        for(int j=i+1; j<4; j++)
            if(tmp[i] == tmp[j])
                return false;

    int elso=0;
    int masodik=0;

    for(int i=0; i<4; i++)
        if(t[id][i] == tmp[i])
            elso++;
        else
        {
            bool cont = true;
            for(int j=0; j<4; j++)
                if(i!=j && t[id][i] == tmp[j] && cont)
                {
                    masodik++;
                    cont=false;
                }
        }
   

    if(elso == t[id][4] && masodik == t[id][5])
        return true;
    else
        return false;
}


void beolvas(char* fn)
{
    FILE* reader = fopen(fn, "r");
    fscanf(reader, "%d", &n);

    t = new int*[n];
    for(int i=0; i<n; i++)
    {
        t[i]=new int[6];
        for(int j=0; j<6; j++)
        {
            fscanf(reader, "%d", &t[i][j]);
        }
    }

    fclose(reader);
}