Deslocamento para a esquerda e para a direita

Crie duas funções que desloquem circularmente um vetor de números inteiros pela quantidade indicada de posições: um deslocamento para a esquerda move os valores do início para o fim, enquanto um deslocamento para a direita move os valores do fim para o início.

[1, 2, 3, 4, 5]
[2, 3, 4, 5, 1]  // deslocamento para a esquerda de 1
[5, 1, 2, 3, 4]  // deslocamento para a esquerda de 4, ou deslocamento para a direita de 1
[3, 4, 5, 1, 2]  // deslocamento para a direita de 3

Exemplos

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 }
// Uma volta completa devolve o vetor à ordem inicial.

Program.LeftShift(new int[] { 1, 2, 3, 4, 5 }, 6) ➞ new int[] { 2, 3, 4, 5, 1 }
// Reduza as quantidades de deslocamentos maiores que o tamanho do vetor módulo esse tamanho.

Notas

  • A quantidade de deslocamentos pode superar o tamanho do vetor.
  • A quantidade de deslocamentos nunca é negativa.