Problems › TypeScript › warmup
Rotate a list
A carousel shows the same items starting from a different one each time it advances.
- Rotating left by one moves the first item to the end.
- A shift larger than the list wraps around; a negative shift rotates the other way.
- An empty list rotates to an empty list.
rotateLeft(values: list<int>, by: int) → list<int>
Where you start
function rotateLeft(values: number[], by: number): number[] {
}
Worked examples
| Call | Result |
|---|---|
rotateLeft([1,2,3,4], 1) | [2,3,4,1] |
rotateLeft([1,2,3,4], 5) | [2,3,4,1] |
rotateLeft([1,2,3,4], -1) | [4,1,2,3] |
rotateLeft([1,2,3], 0) | [1,2,3] |
Hint
Reduce the shift with a modulo first, and remember that the modulo of a negative number is negative in most of these languages.
Reference solution in TypeScript
function rotateLeft(values: number[], by: number): number[] {
const n = values.length;
if (n === 0) return [];
const k = ((by % n) + n) % n;
return values.slice(k).concat(values.slice(0, k));
}