265. Яндекс Змейка

Не решаласьСложная

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

У нас есть поле, змейка, еда в виде букв Y, A, N, D, E, X и набор движений змейки.

Задача состоит в том, чтобы симулировать движения змейки и вывести:

  • Координаты головы змейки на конец симуляции
  • Размер змейки в конце симуляции

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

Рост

Когда змейка попадает на ячейку с едой, она увеличивает свой размер на 1 ячейку.

Например:

 --------               --------
 --oooY--       ===>    --oooo--
 --------               --------
Поле

Поле это массив строк, которые состоят из символов:

  • 'o' тело змейки
  • '-' пустое пространство
  • 'Y', 'A', 'N', 'D', 'E', 'X' еда для змейки

Ограничения: - Поле всегда имеет размеры 13 (высота) на 21 (ширина) - Змейка всегда начинается с размера в 3 ячейки поля - Змейка всегда начинается с координат (0,0) (0,1) (0,2), где (0,2) - это голова змейки

Пример поля:

const field = [
  "ooo------Y--AND------",
  "-----EXY--A--N---D--E",
  "-X-----Y--A-N---D----",
  "------EXY----A---N---",
  "--DE--X---------YA---",
  "-----ND---EXY--AN--D-",
  "----E-----X-Y----A--N",
  "D-----E-XY---AN---D--",
  "E--------------------",
  "-------X---Y------A-N",
  "----D-EX----------YA-",
  "--N-DEX--Y-A--N-----D",
  "E------X--Y----------",
]
Движения

Движения это строка с символами U, R, L, D для направления движения (вверх, вправо, влево, вниз) и числами отображающими количество шагов в нужном направлении. - Все цифры и символы разделены пробелами

Пример строки с движениями: R 12 D 2 R 2 U 1 R 2

Это означает:

  • 12 шагов вправо
  • 2 шага вниз
  • 2 шага вправо
  • 1 шаг наверх
  • 2 шага вправо
Шаблон кода
/**
* @param {string[]} field - описание поля в виде массива строк
* @param {string} moves - строка со всеми движениями змейки
* @returns {[number[], number]}
*/
module.exports = function (field, moves) {
    // Ваш код

    return [[x, y], N]; // [x, y] - координаты головы змейки, N - размер змейки
}

Формат ввода

const field = [
  "ooo------Y--AND------",
  "-----EXY--A--N---D--E",
  "-X-----Y--A-N---D----",
  "------EXY----A---N---",
  "--DE--X---------YA---",
  "-----ND---EXY--AN--D-",
  "----E-----X-Y----A--N",
  "D-----E-XY---AN---D--",
  "E--------------------",
  "-------X---Y------A-N",
  "----D-EX----------YA-",
  "--N-DEX--Y-A--N-----D",
  "E------X--Y----------",
];

const moves = `R 12 D 2 R 2 U 1 R 2`;

solution(field, moves);

Формат вывода

На выход надо вернуть массив с двумя элементами (tuple):

  • [x, y], где x - это координаты головы по вертикали, а y - по горизонтали
  • N, где N - это размер змейки в конце симуляции

Пример: [[1,18],9]

Ограничения

Ограничение времени

1 с

Ограничение памяти

64 МБ

Теги

JavaScript Node.js 12
Нужно войти, чтобы отправить решение.Войти