@lololoshka2010

Ошибка codewars?

Банкоматы позволяют использовать 4- или 6-значные PIN-коды, а PIN-коды не могут содержать ничего, кроме ровно 4 или ровно 6 цифр.

Если функции передана допустимая строка PIN-кода, верните true, иначе верните false.

Примеры ( Ввод --> Вывод)
"1234" --> true
"12345" --> false
"a234" --> false
function validatePIN(pin) {
    const a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0," "]
    pin = pin.split("")
    console.log(pin.length)
    if (pin.length == 4 || pin.length == 6) {
        var n = 0
        for (i = 0; i < pin.length; i++) {
            for (f = 0; f < a.length+1; f++) {
                if (pin[i] == a[f]) {
                    n++
                    console.log(n)
                }
            }
        }
        if (n == 4 || n == 6) {
            console.log("ok")
            return true
        }
        else {
            console.log("oshibka")
            return false
        }
    } else {
        console.log("oshibka")
        return false
    }
}

ошибка:Wrong output for '123
': expected true to equal false
  • Вопрос задан
  • 847 просмотров
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
function validatePIN(pin) {
     return /^\d{4}(\d\d)?$/.test(pin);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@lomeat
абстрактный ленивый прокрастинатор
у тебя пробел в массиве, что недопустимо для пинкода

Варианты красивых решений без регулярок и без 100500 строк кода:
const validatePIN = (pin) =>
  (pin.toString().trim().length === 4 || pin.toString().trim().length === 6) &&
  pin.every((symbol) => typeof symbol === "number");

function validatePin2(pin) {
  const length = pin.toString().trim().length;
  const isRightLength = length === 4 || length === 6;
  const isOnlyNumber = pin.every((symbol) => typeof symbol === "number");
  return isRightLength && isOnlyNumber;
}

function validatePin3(pin, sizes) {
  const length = pin.toString().split(" ").join("").length;
  const isRightLength = sizes.some((size) => length === size);
  const isOnlyNumber = pin.every((symbol) => typeof symbol === "number");
  return isRightLength && isOnlyNumber;
}

validatePin2('123a') -> false
validatePin2('1234') -> true
validatePin2(345146) -> true

validatePin3('1234', [4, 6]) -> true
validatePin2(1234, [2]) -> false
validatePin2('1234 567 89', [1, 4, 9]) -> true
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы