Вопрос, который я пытаюсь решить:
Вы играете в следующую игру «Быки и коровы» со своим другом: вы записываете число и просите своего друга угадать, что это за число. Каждый раз, когда ваш друг делает предположение, вы предоставляете подсказку, которая указывает, сколько цифр в указанном предположении соответствует вашему секретному номеру точно как в di git, так и в позиции (называемой «быками»), и сколько цифр соответствует секретному номеру, но находится в неправильная позиция (называется "коровы"). Ваш друг будет использовать последовательные догадки и подсказки, чтобы в конечном итоге получить секретное число.
Напишите функцию для возврата подсказки в соответствии с секретным номером и предположением друга, используйте A, чтобы указать быков, и B, чтобы указать коров.
Обратите внимание, что как секретное число, так и догадка друга могут содержать повторяющиеся цифры.
Вот примеры того, что должно произойти для функции, которую я пишу:
Пример 1: Ввод : secret = "1807", предположить = "7810" Вывод: "1A3B" Объяснение: 1 бык и 3 коровы. Быка 8, коров 0, 1 и 7.
Пример 2: Ввод: секрет = "1123", догадка = "0111" Выход: "1А1Б" Объяснение: 1-я 1 по предположению друга бык, 2-й или 3-й 1 - корова.
Код, который я написал, не работает на третьем для l oop. Кажется, он не перебирает все элементы массива, и я не могу понять, почему.
const getHint = (secret, guess) => {
s = secret.split('')
g = guess.split('')
const secretHash = {}
const guessHash = {}
let bulls = 0
let cows = 0
for (let i = 0; i < secret.length; i++) {
secretHash[i] = s[i]
guessHash[i] = g[i]
}
for (let key in secretHash) {
if (secretHash[key] === guessHash[key]) {
bulls++
delete secretHash[key]
delete guessHash[key]
}
}
let values = Object.values(secretHash)
//let guessVal = Array.from(new Set(Object.values(guessHash))) //works for the first two but not the last
let guessVal = Object.values(guessHash) //amended, but now breaks the code for the previous two examples
console.log(values, 'i am the values')
console.log(guessVal, 'i am the guessVal')
//amended but won't work for the last example which includes duplicates
for (let key of guessVal) {
console.log(key);
if (values.includes(key)) {
delete values[key]
delete guessVal[key]
cows++
}
}
return `${bulls}A${cows}B`
}
console.log(getHint('1807', '7810')) //'1A3B'
console.log(getHint('1123', '0111')) //'1A1B'
console.log(getHint('1122', '2211')) //'0A4B'
Логика c, кажется, правильна, но это не итерация так, как я ожидать этого. Любые мысли или предложения относительно того, почему это не работает?