Я пытаюсь вернуть догадки, где быки представляют правильные числа и индексы, а коровы показывают только правильные числа - PullRequest
0 голосов
/ 24 апреля 2020

Вопрос, который я пытаюсь решить:

Вы играете в следующую игру «Быки и коровы» со своим другом: вы записываете число и просите своего друга угадать, что это за число. Каждый раз, когда ваш друг делает предположение, вы предоставляете подсказку, которая указывает, сколько цифр в указанном предположении соответствует вашему секретному номеру точно как в 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, кажется, правильна, но это не итерация так, как я ожидать этого. Любые мысли или предложения относительно того, почему это не работает?

1 Ответ

0 голосов
/ 24 апреля 2020

Я решил это следующим образом, не уверенный, если есть какие-либо оптимизации, которые могут быть предложены. Я не мог найти способ оптимизировать дальше, чем это.

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 = Object.values(guessHash)
    let findIndex


    for (let i = 0; i < guessVal.length; i++) {
        if (values.includes(guessVal[i])) {
            findIndex = values.findIndex(val => val === guessVal[i])
            values[findIndex] = -1
            guessVal[i] = -1
            cows++
        }
    }
    return `${bulls}A${cows}B`
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...