Deslocamento à esquerda e à direita

Crie duas funções que desloquem circularmente um array de inteiros pelo número de posições indicado: um deslocamento à esquerda leva os valores do início para o fim, enquanto um deslocamento à direita leva os valores do fim para o início.

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

Exemplos

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]
// Uma rotação completa devolve o array à ordem inicial.

leftShift([1, 2, 3, 4, 5], 6) ➞ [2, 3, 4, 5, 1]
// Se a quantidade de deslocamentos exceder o tamanho do array, considere seu valor módulo esse tamanho.

Notas

  • A quantidade de deslocamentos pode exceder o tamanho do array.
  • A quantidade de deslocamentos nunca será negativa.