我有一个从 i1 到 i2 的线段。
我需要学习如何绕着这个线段转一圈。
如果从 0 到 10 是一个段,我站在索引 2 处并移动 -3,那么我将在索引 10 处结束
如果我移动 -14,那么我将在索引 10 处结束
我也可以向右移动。
/**
* Функция для сдвига индекса
* @param {number} length - Длина элементов
* @param {number} index - Индекс текущего элемента
* @param {number} shift - Сдвиг
*/
function shiftDigit(length, index, shift) {
const indexSumShift = index + shift;
if (indexSumShift < 0) {
return length + indexSumShift;
}
return (index + shift) % length;
}
console.log(shiftDigit(11, 3, -5));
我的代码没有多大意义,因为我很困惑
UPD:我认为用什么值指示段索引开始和结束位置会更正确:
/**
* Функция для сдвига индекса
* @param {number} start - Начало отрезка
* @param {number} end - Конец отрезка
* @param {number} index - Индекс текущего элемента
* @param {number} shift - Сдвиг
*/
function shiftDigit(start, end, index, shift) {
}
console.log(shiftDigit(0, 10, 3, -15));
见方法
doShift
。其他一切可视化我们将范围设为 0..size-1。
添加班次。如果结果是否定的,那么在取模块后,它位于 -size..-1 范围内,我们通过增加 size 将其变为正值。
如果结果是肯定的,我们第二次使用该模块。
投射回开始...结束