// prilagodjeno za gcc
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
const char *kraj="9999";
class komb {
char broj[5];
int crno;
int belo;
komb *sled;
public:
komb () { strcpy ( broj, "0000"); belo=0; crno=0; sled=NULL;};
komb ( char *a, komb *k) { strcpy (broj, a); belo=0; crno=0; sled=k;}
void ubaci_ocenu ( int icr, int ibe ) { crno=icr; belo=ibe;};
komb *uzmi_sled () { return sled; };
int oceni ( char [5] );
};
int komb::oceni ( char aa[5]) {
int cr=0;
int be=0;
int i;
int j;
char b[5];
char a[5];
strcpy ( b, broj);
strcpy ( a, aa);
for ( i=0; i<4; i++) { if (a==b) { cr++; a=' '; b=' ';};};
for ( i=0; i<4; i++) {
if ( a==' ' ) continue;
for ( j=0; j<4; j++) {
if (b[j]==' ') continue;
if (i==j) continue;
if (a==b[j]) { be++; a=' '; b[j]=' '; break;};
};
};
// cout << "KKKK" << broj << '$' << aa << '$' << cr << crno << be << belo << "***\n";
if ( (be==belo) && ( cr==crno)) return 0; else return 1;
};
int povecaj ( char *a )
{
char aa[5];
if (strcmp (a,kraj)==0) {
std::cout << " **** Negde je pogreseno kod ocenjivanja! ***\n";
exit (0);
};
strcpy (aa,a);
int prenos=0;
for ( int i=3; i>-1; i--) {
aa++;
if(aa>'9') {prenos=1; aa-=10;} else prenos=0;
if (prenos==0) break;
};
strcpy ( a,aa);
return prenos;
};
int main ( )
{
komb *tek=new komb;
komb *prvi=tek;
char a[5]="0000";
int icr;
int ibe;
int ok;
std::cout << "------- Wellcome to DULE's MASTER MIND -------\n\n\n";
std::cout << a << "<---PREDLOG (ocenite prvo crne pa bele!) ";
std::cin >> icr >> ibe;
tek->ubaci_ocenu ( icr, ibe);
if (icr==4) exit(0);
do {
while ( tek->oceni(a)!=0) povecaj(&a[0]);
do {
if (tek=tek->uzmi_sled()) {
ok=tek->oceni(a);
if ( ok!=0) break;} else ok=0;
} while (tek);
if (ok!=0) { tek=prvi; povecaj(&a[0]); continue;};
prvi=tek=new komb(&a[0], prvi);
std::cout << a << "<---PREDLOG (ocenite prvo crne pa bele!) ";
std::cin >> icr >> ibe;
tek->ubaci_ocenu ( icr, ibe );
} while (icr<4);
return 0;
}