Код Middle Реализация с нуля обновлено

Циклический сдвиг в обе стороны

Условие

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

Примеры

cyclicShift([1, 2, 3, 4, 5], 2) // [4, 5, 1, 2, 3]
cyclicShift([1, 2, 3, 4, 5], -2) // [3, 4, 5, 1, 2]
cyclicShift([1, 2, 3], 0) // [1, 2, 3]

Как подойти

Одна формула нормализации закрывает и переполнение, и отрицательный шаг - без неё придётся писать две ветки. Вычисление точки разреза от конца избавляет от проблемы slice(-0), которая возвращает весь массив.

Подсказки: 2
  1. Нормализуй шаг: он может быть больше длины и отрицательным.
  2. ((step % n) + n) % n превращает любое значение в допустимое.

Решите в тренажёре

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