Привет!! Еще одна проблема Codewars. Сегодня мы собираемся решить задачу 6KYU. Это может помочь вам изучить основы массивов в javascript. поехали 🚀

Вы живете в Картезии, где все дороги выложены идеальной сеткой. Вы пришли на десять минут раньше назначенного времени, поэтому воспользовались возможностью, чтобы прогуляться. Город предоставляет своим жителям приложение Walk Generating на их телефонах — каждый раз, когда вы нажимаете кнопку, оно отправляет вам массив строк из одной буквы, представляющих направления ходьбы (например, ['n', 's', 'w', «е»]). Вы всегда проходите только один квартал для каждой буквы (направления), и вы знаете, что вам потребуется одна минута, чтобы пройти один городской квартал, поэтому создайте функцию, которая будет возвращать true, если прогулка, которую предлагает вам приложение, займет у вас ровно десять минут (вы не хочу ни рано, ни поздно!) и, конечно же, вернет вас в исходную точку. В противном случае верните false.

Примечание. Вы всегда будете получать допустимый массив, содержащий случайный набор букв направления (только «n», «s», «e» или «w»). Он никогда не даст вам пустой массив (это не прогулка, это стояние на месте!).

Итак, как мы это приготовим 🤨? для того, чтобы прогулка была справедливой, из поставленного вопроса можно установить следующее.

  1. Количество предусмотренных северных направлений должно быть равно количеству южных направлений.
  2. Количество восточных и западных направлений также должно быть равным.
  3. На прогулку нужно потратить всего 10 минут.

Самый простой способ добиться этого — вести подсчет каждого появляющегося символа. Поскольку мы знаем набор всех возможных символов, эта задача проста.

Мы можем перебирать массив и проверять каждый символ, увеличивая количество для этого символа.

Мы можем определить, займет ли прогулка ровно 10 минут, проверив длину входного массива. Поскольку на каждое направление тратится одна минута, длина массива должна быть равна 10.

Давайте кодировать 👩‍💻.

function isValidWalk(walk) {
  let nCount = 0;
  let sCount = 0;
  let eCount = 0;
  let wCount = 0;

  walk.forEach((direction) => {
    if (direction === "n") {
      nCount++;
    } else if (direction === "s") {
      sCount++;
    } else if (direction === "e") {
      eCount++;
    } else {
      wCount++;
    }
  });

  return nCount === sCount && eCount === wCount && walk.length === 10;
}

В коде мы объявляем четыре переменные для каждого направления. Затем мы перебираем массив, используя метод foreach. Внутри обратного вызова метода foreach мы проверяем личность персонажа с помощью оператора равенства.

Отслеживая количество шагов в каждом направлении, можно определить, займет ли прогулка ровно 10 минут. Для этого мы увеличиваем счетчик для каждого направления, найденного в массиве ходьбы. Последний шаг должен вернуть значение true, если количество шагов на север (nCount) равно количеству шагов на юг (sCount), количество шагов на восток (eCount) равно количеству шагов на запад (wCount) и общее количество пройденных шагов равно 10.

И мы ее решили! Коротко и мило. Разве ты не любишь кодить 😊? Прощай.

Код (Оставьте звездочку ⭐🤩)=› https://github.com/AmohPrince/CodeWars/blob/master/Javascript/Atenminutewalk.js

Вопрос = https://www.codewars.com/kata/54da539698b8a2ad76000228/train/javascript