Суммируйте повороты с начальной позицией 50 по модулю 100, отдельно нормализуя отрицательный остаток.
Задача про сейф: есть круглый барабан со значениями от 0 до 99, стрелка изначально стоит на 50. Положительные числа крутят по часовой стрелке, отрицательные — против. Дан входной массив чисел, нужно определить финальную позицию стрелки после всех операций.
Суммируйте повороты с начальной позицией 50 по модулю 100, отдельно нормализуя отрицательный остаток.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Суммируйте повороты с начальной позицией 50 по модулю 100, отдельно нормализуя отрицательный остаток.
Предполагаем целочисленные повороты в пределах безопасных чисел JavaScript. Уменьшаем каждый шаг по модулю, чтобы не накапливать слишком большую сумму.
function safePosition(turns) {
let position = 50;
for (const turn of turns) {
if (!Number.isSafeInteger(turn)) throw new TypeError('Нужен целый поворот');
position = ((position + turn % 100) % 100 + 100) % 100;
}
return position;
}
Пустой массив даёт 50, поворот -60 — 90, полный оборот не меняет позицию. Время O(n), дополнительная память O(1).