Desplazamiento a la izquierda y a la derecha

Crea dos funciones que desplacen circularmente un arreglo de enteros la cantidad de posiciones indicada: un desplazamiento a la izquierda lleva los valores del principio al final, mientras que uno a la derecha lleva los valores del final al principio.

[1, 2, 3, 4, 5]
[2, 3, 4, 5, 1]  // desplazamiento a la izquierda de 1
[5, 1, 2, 3, 4]  // desplazamiento a la izquierda de 4, o desplazamiento a la derecha de 1
[3, 4, 5, 1, 2]  // desplazamiento a la derecha de 3

Ejemplos

leftShift([1, 2, 3, 4], 1) ➞ [2, 3, 4, 1]

rightShift([1, 2, 3, 4], 1) ➞ [4, 1, 2, 3]

leftShift([1, 2, 3, 4, 5], 3) ➞ [4, 5, 1, 2, 3]

leftShift([1, 2, 3, 4, 5], 5) ➞ [1, 2, 3, 4, 5]
// Una vuelta completa devuelve el arreglo a su orden original.

leftShift([1, 2, 3, 4, 5], 6) ➞ [2, 3, 4, 5, 1]
// Si la cantidad de desplazamientos supera la longitud del arreglo, considera su valor módulo esa longitud.

Notas

  • La cantidad de desplazamientos puede superar la longitud del arreglo.
  • La cantidad de desplazamientos nunca será negativa.