Skip to content

Instantly share code, notes, and snippets.

@MrZhouZh
Last active April 29, 2024 06:05
Show Gist options
  • Save MrZhouZh/7234a49f6fe0d80842833aa84c0f0608 to your computer and use it in GitHub Desktop.
Save MrZhouZh/7234a49f6fe0d80842833aa84c0f0608 to your computer and use it in GitHub Desktop.
1A2B 猜数字算法

1A2B 猜数字游戏

标准规则:

一方出数字, 一方猜. 数字不重复. 出数者需根据猜的人给的数字给出几个A几个B.

A 代表位置且数字都正确 B 代表数字正确但位置不正确

例如: 出 4057

  1. 1234, 则输出 0A1B
  2. 5678, 则输出 0A2B
  3. 3490, 则输出 0A2B
  4. 1290, 则输出 0A1B
  5. 0345, 则输出 0A3B
  6. 4056, 则输出 3A0B
  7. 4057, 则输出 4A0B

参考资料

export function generateTarget() {
let digits = []
while(digits.length < 4) {
let digit = Math.floor(Math.random() * 10).toString()
if (!digits.includes(digit)) {
digits.push(digit)
}
}
return digits.join('');
}
export function evaluateGuess(target, guess) {
let A = 0
let B = 0
let targetArr = target.join('')
let guessArr = guess.join('')
for (let i = 0; i < 4; i++) {
if (guessArr[i] === targetArr[i]) {
A++
guessArr[i] = targetArr[i] = null
}
}
for (let i = 0; i < 4; i++) {
if (guessArr[i] !== null) {
let index = targetArr.findIndex(t => t === guessArr[i])
if (index > -1) {
B++
targetArr[i] = null
}
}
}
return A === 4 ? `Congratulations! You guessed it!` : `${A}A${B}B`
}
// ========== test ===========
const target = generateTarget()
const guess = `1234`
evaluateGuess(target, guess) // output:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment