标准规则:
一方出数字, 一方猜. 数字不重复. 出数者需根据猜的人给的数字给出几个A几个B.
A
代表位置且数字都正确
B
代表数字正确但位置不正确
例如: 出 4057
- 猜
1234
, 则输出0A1B
- 猜
5678
, 则输出0A2B
- 猜
3490
, 则输出0A2B
- 猜
1290
, 则输出0A1B
- 猜
0345
, 则输出0A3B
- 猜
4056
, 则输出3A0B
- 猜
4057
, 则输出4A0B
标准规则:
一方出数字, 一方猜. 数字不重复. 出数者需根据猜的人给的数字给出几个A几个B.
A
代表位置且数字都正确
B
代表数字正确但位置不正确
例如: 出 4057
1234
, 则输出 0A1B
5678
, 则输出 0A2B
3490
, 则输出 0A2B
1290
, 则输出 0A1B
0345
, 则输出 0A3B
4056
, 则输出 3A0B
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: |