一个人设定一组四码的数字作为谜底,另一方猜。每猜一个数,出数者就要根据这个数字给出提示,提示以XAYB形式呈现,直到猜中位置。其中X表示位置正确的数的个数(数字正确且位置正确),而Y表示数字正确而位置不对的数的个数。例如,当谜底为8123,而猜谜者猜1052时,出题者必须提示0A2B。例如,当谜底为5637,而猜谜者才4931时,出题者必须提示1AOB。当前已知N组猜谜者猜的数字与提示,如果答案确定,请输出答案,不确定则输出NA。用js代码写
时间: 2023-10-29 15:04:18 浏览: 134
以下是使用 JavaScript 实现猜数字游戏的代码:
```javascript
// 假设谜底为 8123,猜测为 1052,提示为 0A2B
const secret = [8, 1, 2, 3];
const guess = [1, 0, 5, 2];
const hint = "0A2B";
// 枚举所有可能的四位数字,用一个数组记录下来
function generateAllPossibleNumbers() {
const arr = [];
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
for (let k = 0; k < 10; k++) {
for (let l = 0; l < 10; l++) {
if (i !== j && i !== k && i !== l && j !== k && j !== l && k !== l) {
arr.push([i, j, k, l]);
}
}
}
}
}
return arr;
}
// 根据猜测和提示,排除所有与该猜测不符合提示的数字
function eliminateImpossibleNumbers(numbers, guess, hint) {
const newNumbers = [];
for (let i = 0; i < numbers.length; i++) {
const n = numbers[i];
const newHint = generateHint(n, guess);
if (newHint === hint) {
newNumbers.push(n);
}
}
return newNumbers;
}
// 计算猜测和谜底之间的提示
function generateHint(secret, guess) {
let a = 0, b = 0;
for (let i = 0; i < secret.length; i++) {
if (secret[i] === guess[i]) {
a++;
} else if (secret.includes(guess[i])) {
b++;
}
}
return `${a}A${b}B`;
}
// 初始化所有数字的可能取值
function initializePossibleValues() {
const values = [];
for (let i = 0; i < 4; i++) {
const arr = [];
for (let j = 0; j < 10; j++) {
arr.push(j);
}
values.push(arr);
}
return values;
}
// 根据已知的数字和提示,更新可能的取值
function updatePossibleValues(possibleValues, guess, hint) {
for (let i = 0; i < guess.length; i++) {
if (hint[i] === "A") {
possibleValues[i] = [guess[i]];
} else {
possibleValues[i] = possibleValues[i].filter(n => !guess.includes(n));
}
}
}
// 判断是否所有数字都已经确定
function isAllValuesDetermined(possibleValues) {
return possibleValues.every(arr => arr.length === 1);
}
// 获取确定的数字
function getDeterminedValues(possibleValues) {
return possibleValues.map(arr => arr[0]);
}
// 猜数字游戏
function guessNumberGame(secret, guesses, hints) {
let possibleNumbers = generateAllPossibleNumbers();
let possibleValues = initializePossibleValues();
for (let i = 0; i < guesses.length; i++) {
possibleNumbers = eliminateImpossibleNumbers(possibleNumbers, guesses[i], hints[i]);
updatePossibleValues(possibleValues, guesses[i], hints[i]);
if (isAllValuesDetermined(possibleValues)) {
const determinedValues = getDeterminedValues(possibleValues);
if (determinedValues.join("") === secret.join("")) {
return determinedValues.join("");
} else {
return "NA";
}
}
}
return "NA";
}
// 测试
const guesses = [[1, 0, 5, 2], [4, 9, 3, 1]];
const hints = ["0A2B", "1AOB"];
console.log(guessNumberGame(secret, guesses, hints)); // 输出 NA
```
以上代码实现了一个猜数字游戏的基本框架,可以根据输入的猜测和提示,逐步确定谜底,并最终输出确定的四位数字。如果无法确定,则输出 NA。
阅读全文