CodeWars Javascript Challenge: они «одинаковые»? - PullRequest
1 голос
/ 28 мая 2020

Ката: ссылка

Мое решение:

function comp(array1, array2) {
    let result;
    if (Array.isArray(array1) && Array.isArray(array2) && array1.length && array2.length) {
        result = true;
        const squares = array2.map(e => Math.sqrt(e));
        squares.forEach((e) => {
            if (array1.includes(e)) return;
            result = false;
        });
    } else {
        result = false
    }
    return result;
}

Мне не нужно другое решение. Я хочу выяснить почему мой не проходит все тесты. (Не удается выполнить два теста, но я не могу понять, какой из них)

Я подозреваю, что тест ожидает true, если оба массива имеют []. Но в описании ката сказано иное:

Если a или b равны нулю (или null или None), проблема не имеет смысла, поэтому верните false.

Помощь были бы признательны.


Рабочее решение На основе ответов:

function comp(array1, array2) {
    let result;
    if (Array.isArray(array1) && Array.isArray(array2)) {
        result = true;
        const sortedArray1 = array1.sort((a, b) => a - b);
        const squares = array2.map(e => Math.sqrt(e)).sort((a, b) => a - b);
        squares.forEach((e, i) => {
            if (sortedArray1[i] === e) return;
            result = false;
        });
    } else {
        result = false
    }
    return result;
}

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Хорошо, некоторые обходные пути мошенничества, но ваш код здесь не работает: enter image description here Вот почему после удаления двух .length вы проходите еще один тест.

Следующий - enter image description here После .sqrt array2 вы получите 2, 3, 3, поэтому вы возвращаете true, но это false. Этого ответа будет достаточно, чтобы решить эту ката.

Кстати.

Я подозреваю, что тест ожидает истину, если оба массива равны []. Но в описании Каты сказано иное:

Описание Каты:

a или b могут быть [] (все языки, кроме R, Shell). : - D

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

1 голос
/ 28 мая 2020

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

Вот что у меня работает: идею и просто сделайте кое-что в существующем коде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...