Desplazamiento a la izquierda y a la derecha

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

[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

Program.LeftShift(new int[] { 1, 2, 3, 4 }, 1) ➞ new int[] { 2, 3, 4, 1 }

Program.RightShift(new int[] { 1, 2, 3, 4 }, 1) ➞ new int[] { 4, 1, 2, 3 }

Program.LeftShift(new int[] { 1, 2, 3, 4, 5 }, 3) ➞ new int[] { 4, 5, 1, 2, 3 }

Program.LeftShift(new int[] { 1, 2, 3, 4, 5 }, 5) ➞ new int[] { 1, 2, 3, 4, 5 }
// Una vuelta completa devuelve el arreglo a su orden inicial.

Program.LeftShift(new int[] { 1, 2, 3, 4, 5 }, 6) ➞ new int[] { 2, 3, 4, 5, 1 }
// Reduce las cantidades de desplazamientos mayores que la longitud del arreglo módulo esa longitud.

Notas

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