Модификация задачи про сейф: вместо финальной позиции посчитать, сколько раз стрелка прошла через ноль (пересечение границы 99→0 или 0→99).

Считайте переходы через границу барабана, а не только попадания на значение 0; полные обороты тоже учитываются.

Короткий ответ

Что ответить на собеседовании

Считайте переходы через границу барабана, а не только попадания на значение 0; полные обороты тоже учитываются.

Подробный разбор

Ответ с пояснениями

Считайте переходы через границу барабана, а не только попадания на значение 0; полные обороты тоже учитываются.

Предполагаем барабан 0–99, начальную позицию 50 и целые безопасные Number во входе. BigInt предотвращает переполнение общего счётчика.

function countCrossings(turns) {
  let position = 50n, count = 0n;
  for (const turn of turns) {
    if (!Number.isSafeInteger(turn)) throw new TypeError('Целый поворот');
    const end = position + BigInt(turn);
    const wraps = end >= 0n ? end / 100n : (end - 99n) / 100n;
    count += wraps < 0n ? -wraps : wraps;
    position = ((end % 100n) + 100n) % 100n;
  }
  return count;
}

Из 50 поворот -50 лишь достигает нуля и даёт 0 пересечений, -51 пересекает 0→99 один раз. Результат — BigInt; перед JSON его преобразуют в строку.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее