/* zebra.c - Copyright 1998 by Mark Whitis (whitis@dbd.com) */ #include #include int combinations[120][5]; int yellow, blue, red, ivory, green; int kools, chesterfields, luckies, old_golds, parliaments; int english, spanish, norwegian, japanese, ukrainian; int water, milk, oj, tea, coffee; int horse, dog, fox, snails, zebra; struct { char color[20]; char nationality[20]; char drinks[20]; char smokes[20]; char pet[20]; } house[5]; print_houses() { int i; strcpy(house[yellow].color,"yellow"); strcpy(house[blue].color,"blue"); strcpy(house[red].color,"red"); strcpy(house[ivory].color,"ivory"); strcpy(house[green].color,"green"); strcpy(house[kools].smokes,"kools"); strcpy(house[chesterfields].smokes,"chesterfields"); strcpy(house[luckies].smokes,"luckies"); strcpy(house[old_golds].smokes,"old_golds"); strcpy(house[parliaments].smokes,"parliaments"); strcpy(house[english].nationality,"english"); strcpy(house[spanish].nationality,"spanish"); strcpy(house[norwegian].nationality,"norwegian"); strcpy(house[japanese].nationality,"japanese"); strcpy(house[ukrainian].nationality,"ukrainian"); strcpy(house[water].drinks,"water"); strcpy(house[milk].drinks,"milk"); strcpy(house[oj].drinks,"oj"); strcpy(house[tea].drinks,"tea"); strcpy(house[coffee].drinks,"coffee"); strcpy(house[horse].pet,"horse"); strcpy(house[dog].pet,"dog"); strcpy(house[fox].pet,"fox"); strcpy(house[snails].pet,"snails"); strcpy(house[zebra].pet,"zebra"); printf(" House #1 House #2 House #3 House #4 House #5 \n"); printf("============ ============ ============= ============ ============\n"); for(i=0;i<5;i++) { printf("%12s ",house[i].color); } printf("\n"); for(i=0;i<5;i++) { printf("%12s ",house[i].nationality); } printf("\n"); for(i=0;i<5;i++) { printf("%12s ",house[i].drinks); } printf("\n"); for(i=0;i<5;i++) { printf("%12s ",house[i].smokes); } printf("\n"); for(i=0;i<5;i++) { printf("%12s ",house[i].pet); } printf("\n"); printf("\n"); printf("\n"); } main() { int comb; int i,j,k,l,m; /* unbuffer standard output so we can see progress */ setbuf(stdout, NULL); /* Build table of combinations of 5 */ comb=0; for(i=0;i<5;i++) { for(j=0;j<5;j++) { if(j==i) continue; for(k=0;k<5;k++) { if(k==i) continue; if(k==j) continue; for(l=0;l<5;l++) { if(l==i) continue; if(l==j) continue; if(l==k) continue; for(m=0;m<5;m++) { if(m==i) continue; if(m==j) continue; if(m==k) continue; if(m==l) continue; combinations[comb][0]=i; combinations[comb][1]=j; combinations[comb][2]=k; combinations[comb][3]=l; combinations[comb][4]=m; comb++; } } } } } #if 0 printf("comb=%d\n",comb); for(i=0;i<120;i++) { printf("%d,%d,%d,%d,%d\n", combinations[i][0], combinations[i][1], combinations[i][2], combinations[i][3], combinations[i][4] ); } #endif printf("Begin puzzle search\n"); for(i=0;i<120;i++) { printf("Begin major iterration %d\n",i); yellow = combinations[i][0]; blue = combinations[i][1]; red = combinations[i][2]; ivory = combinations[i][3]; green = combinations[i][4]; for(j=0;j<120;j++) { /* printf("Begin secondary iterration %d\n",j); */ kools = combinations[j][0]; chesterfields = combinations[j][1]; luckies = combinations[j][2]; old_golds = combinations[j][3]; parliaments = combinations[j][4]; for(k=0;k<120;k++) { english = combinations[k][0]; spanish = combinations[k][1]; norwegian = combinations[k][2]; japanese = combinations[k][3]; ukrainian = combinations[k][4]; for(l=0;l<120;l++) { water = combinations[l][0]; milk = combinations[l][1]; oj = combinations[l][2]; tea = combinations[l][3]; coffee = combinations[l][4]; for(m=0;m<120;m++) { horse = combinations[m][0]; dog = combinations[m][1]; fox = combinations[m][2]; snails = combinations[m][3]; zebra = combinations[m][4]; if(english!=red) continue; if(spanish!=dog) continue; if(coffee!=green) continue; if(ukrainian!=tea) continue; if(green!=ivory+1) continue; if(old_golds!=snails) continue; if(kools!=yellow) continue; if(milk!=2) continue; if(norwegian!=0) continue; if(abs(chesterfields-fox)!=1) continue; if(abs(kools-horse)!=1) continue; if(luckies!=oj) continue; if(japanese!=parliaments) continue; if(abs(norwegian-blue)!=1) continue; printf("**Match found**\n"); print_houses(); } } } } } printf("end puzzle search\n"); }