#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
void generateAnswer(int answer[])
{
bool used[10] = {false};
int count = 0;
while (count < 4)
{
if (!used[digit])
{
used[digit] = true;
answer[count++] = digit;
}
}
}
bool isValidInput(char input[])
{
if (strlen(input
) != 4) return false;
bool used[10] = {false};
for (int i = 0; i < 4; i++)
{
if (!isdigit(input
[i
])) return false; int digit = input[i] - '0';
if (used[digit]) return false;
used[digit] = true;
}
return true;
}
bool getGuess(int guess[])
{
char input[100];
if (scanf("%s", input
) == EOF
) {
return false;
}
if (!isValidInput(input))
{
return false;
}
for (int i = 0; i < 4; i++)
{
guess[i] = input[i] - '0';
}
return true;
}
void checkAB(int answer[], int guess[], int* A, int* B)
{
*A = 0;
*B = 0;
for (int i = 0; i < 4; i++)
{
if (guess[i] == answer[i])
{
(*A)++;
} else
{
for (int j = 0; j < 4; j++)
{
if (guess[i] == answer[j] && i != j)
{
(*B)++;
break;
}
}
}
}
}
bool playAgain()
{
char choice;
return (choice == 'y' || choice == 'Y');
}
int main()
{
int answer[4], guess[4];
int A = 0, B = 0;
int attempts = 0;
do
{
generateAnswer(answer);
A = 0; B = 0; attempts = 0;
while (A != 4)
{
if (!getGuess(guess))
{
break;
}
checkAB(answer, guess, &A, &B);
attempts++;
}
if (A == 4)
{
printf("你猜對了!總共猜了 %d 次~\n", attempts
); }
} while (playAgain());
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KI2luY2x1ZGUgPHN0ZGJvb2wuaD4KCnZvaWQgZ2VuZXJhdGVBbnN3ZXIoaW50IGFuc3dlcltdKSAKewogICAgYm9vbCB1c2VkWzEwXSA9IHtmYWxzZX07CiAgICBpbnQgY291bnQgPSAwOwogICAgd2hpbGUgKGNvdW50IDwgNCkgCiAgICB7CiAgICAgICAgaW50IGRpZ2l0ID0gcmFuZCgpICUgMTA7CiAgICAgICAgaWYgKCF1c2VkW2RpZ2l0XSkgCiAgICAgICAgewogICAgICAgICAgICB1c2VkW2RpZ2l0XSA9IHRydWU7CiAgICAgICAgICAgIGFuc3dlcltjb3VudCsrXSA9IGRpZ2l0OwogICAgICAgIH0KICAgIH0KfQoKYm9vbCBpc1ZhbGlkSW5wdXQoY2hhciBpbnB1dFtdKSAKewogICAgaWYgKHN0cmxlbihpbnB1dCkgIT0gNCkgcmV0dXJuIGZhbHNlOwoKICAgIGJvb2wgdXNlZFsxMF0gPSB7ZmFsc2V9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIAogICAgewogICAgICAgIGlmICghaXNkaWdpdChpbnB1dFtpXSkpIHJldHVybiBmYWxzZTsKICAgICAgICBpbnQgZGlnaXQgPSBpbnB1dFtpXSAtICcwJzsKICAgICAgICBpZiAodXNlZFtkaWdpdF0pIHJldHVybiBmYWxzZTsKICAgICAgICB1c2VkW2RpZ2l0XSA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBnZXRHdWVzcyhpbnQgZ3Vlc3NbXSkgCnsKICAgIGNoYXIgaW5wdXRbMTAwXTsKCiAgICBpZiAoc2NhbmYoIiVzIiwgaW5wdXQpID09IEVPRikgCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOyAKICAgIH0KCiAgICBpZiAoIWlzVmFsaWRJbnB1dChpbnB1dCkpIAogICAgewogICAgICAgIHJldHVybiBmYWxzZTsgCiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIAogICAgewogICAgICAgIGd1ZXNzW2ldID0gaW5wdXRbaV0gLSAnMCc7CiAgICB9CgogICAgcmV0dXJuIHRydWU7Cn0KCnZvaWQgY2hlY2tBQihpbnQgYW5zd2VyW10sIGludCBndWVzc1tdLCBpbnQqIEEsIGludCogQikgCnsKICAgICpBID0gMDsKICAgICpCID0gMDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgCiAgICB7CiAgICAgICAgaWYgKGd1ZXNzW2ldID09IGFuc3dlcltpXSkKICAgICAgICB7CiAgICAgICAgICAgICgqQSkrKzsKICAgICAgICB9IGVsc2UgCiAgICAgICAgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykgCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChndWVzc1tpXSA9PSBhbnN3ZXJbal0gJiYgaSAhPSBqKSAKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKkIpKys7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmJvb2wgcGxheUFnYWluKCkgCnsKICAgIGNoYXIgY2hvaWNlOwogICAgcHJpbnRmKCLmmK/lkKblho3njqnkuIDmrKHpgYrmiLLvvJ8oeS9uKTogIik7CiAgICBzY2FuZigiICVjIiwgJmNob2ljZSk7IAogICAgcmV0dXJuIChjaG9pY2UgPT0gJ3knIHx8IGNob2ljZSA9PSAnWScpOwp9CgppbnQgbWFpbigpIAp7CiAgICBpbnQgYW5zd2VyWzRdLCBndWVzc1s0XTsKICAgIGludCBBID0gMCwgQiA9IDA7CiAgICBpbnQgYXR0ZW1wdHMgPSAwOwoKICAgIHNyYW5kKHRpbWUoTlVMTCkpOyAKCiAgICBkbyAKICAgIHsKICAgICAgICBnZW5lcmF0ZUFuc3dlcihhbnN3ZXIpOwogICAgICAgIEEgPSAwOyBCID0gMDsgYXR0ZW1wdHMgPSAwOyAKICAgIAogICAgICAgIHdoaWxlIChBICE9IDQpIAogICAgICAgIHsKICAgICAgICAgICAgaWYgKCFnZXRHdWVzcyhndWVzcykpIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwcmludGYoIui8uOWFpemMr+iqpOaIlui8uOWFpee1kOadn+OAglxuIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBjaGVja0FCKGFuc3dlciwgZ3Vlc3MsICZBLCAmQik7CiAgICAgICAgICAgIHByaW50ZigiJWRBJWRCXG4iLCBBLCBCKTsKICAgICAgICAgICAgYXR0ZW1wdHMrKzsKICAgICAgICB9CgogICAgICAgIGlmIChBID09IDQpIAogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCLkvaDnjJzlsI3kuobvvIHnuL3lhbHnjJzkuoYgJWQg5qyh772eXG4iLCBhdHRlbXB0cyk7CiAgICAgICAgfQoKICAgIH0gd2hpbGUgKHBsYXlBZ2FpbigpKTsgCgogICAgcHJpbnRmKCLmhJ/orJ3pgYrnjqnvvIFcbiIpOwoKICAgIHJldHVybiAwOwp9