This program supposes to print out all the possible solution of given the guess pattern, the number of black pegs, and the number of white pegs in a mastermind game.
In addition, it has to be done by using recursion, and it has to have a runtime less than 15 second with a pattern length of 15.
An example of the output of the code would look like below:
and here is the my code:Code:Enter the pattern length: 3 Input the guess pattern: abc Enter the number of black pegs in the feedback: 2 Enter the number of white pegs in the feedback: 0 The possible key patterns are: aac aba abb abd abe abf acc adc aec afc bbc cbc dbc ebc fbc
The only problem I have now is that it takes too long to generate all the possibility. What can I do to make it faster? Should I check for matches as the program generates the pattern? If so, how? Please help. You can either help by changing my code or make a brand new one.Code:#include<stdio.h> #include<stdlib.h> #include<stdbool.h> void scanIn(char *pattern, int length) { char input[length + 1]; scanf("%s", input); int i; for(i = 0; i < length; i++) { pattern[i] = input[i]; } } bool pegsTester1(char *guess, char *test, int black, int white, int length) { int i,j,k; bool guess_Hit[length]; bool testHit[length]; int blackFeedBack; int whiteFeedBack; for(i = 0; i < length; i++) { guess_Hit[i] = false; testHit[i] = false; blackFeedBack = 0; whiteFeedBack = 0; } if(black) { for(i = 0; i < length; i++) { if(guess[i] == test[i]) { blackFeedBack++; guess_Hit[i] = true; testHit[i] = true; } } } if(white) { for(i = 0; i < length; i++) { for(j = 0; j < length && !testHit[i]; j++) { if(guess[i] == test[j] && !gues........[j]) { whiteFeedBack++; testHit[i] = true; guess_Hit[j] = true; } } } } if(blackFeedBack != black || whiteFeedBack != white) return false; else return true; } void printresult(int length, int count, char *guess, int black, int white, char *test) { if(count == length) { bool rightGuess = pegsTester1(guess, test, black, white, length); if(rightGuess) { int x; for(x = 0; x < length; x++) printf("%c", test[x]); printf("\n"); } return; } else { char t; for (t = 'a'; t <= 'f'; t++) { test[count] = t; printresult(length, count + 1, guess, black, white, test); } } } int main(void) { int length; printf("Enter the pattern length: "); scanf("%d", &length); char guess[length]; printf("Input the guess pattern: "); scanIn(guess, length); int black, white; printf("Enter the number of black pegs in the feedback: "); scanf("%d", &black); printf("Enter the number of white pegs in the feedback: "); scanf("%d", &white); char test[length+1]; int i; for(i = 0; i < length; i++) { test[i]='a'; } test[length] = '\0'; printf("The possible key patterns are: \n"); printresult(length, 0, guess, black, white, test); return 0; }
Thank you!



1Likes
LinkBack URL
About LinkBacks



