Задача на которой завис
Я так понял, что в этой задаче нужно проверить, что путь не длиннее и не короче, чем 10 элементов в массиве. Кроме того, нужно проверить, что человек всегда через ровно 10 ходов вернется обратно на место, где он был. Я написал такой код, строго не судите, новичок:
const isValidWalk = (walk) => {
// Если пусть длиннее или меньше 10 ходов, то вернуть false
if (walk.length > 10 || walk.length < 10) return false;
// Объект с путями, где North - South, East - West - прямо противоположны друг другу.
// То есть, шаг вперед и назад, в лево и право, грубо говоря.
const path = {
'n': 's',
'e': 'w',
's': 'n',
'w': 'e',
};
// Prev=arr, item=нынешний элемент массива.
return !walk.reduce((prev,item) => {
// Проверяем, есть ли в массиве прямо-противоположный шаг нынешнему элементу.
// Если да, то вырезаем этот элемент из массива, то есть, грубо говоря, возвращаемся к начальной точки.
// Если нет, то пушим нынешний шаг в массива.
if (prev.includes(path[item])) {
prev.splice(prev.indexOf(path[item], 1));
} else {
prev.push(item);
}
// Возвращаем массив.
// .length - если массив пустой, то выведет ноль, где ! знак перед всей функцией
// вернет true, т.к мы вернулись на начальную точку, иначе false, т.к остались где то.
return prev;
}, []).length;
};
console.log(isValidWalk(['n','n','n','s','n','s','n','s','n','s']));
В codewars половина тестов выполняется, другая нет. То есть, я даже не могу понять, в чем проблема, т.к не могу
элементарно проверить. Так вот, в чем здесь проблема? И как можно было бы лучше может переписать код?