Arreglos, Rotar arreglo N veces

¿Cómo rotar un arreglo en Go?

Dada un arreglo de N valores, crear una función que rote K posiciones dicho arreglo.

Lo primero que requerimos es poder rotar nuestro arreglo entre dos límites. Esta función no retorna ningún valor por lo que trabaja con el arreglo directamente.

func InvertirArreglo(lista []int, inicio int, fin int) {
	i := inicio
	j := fin
	for i < j {
		lista[i], lista[j] = lista[j], lista[i]
		i++
		j--
	}
}

Ya que tenemos nuestra función para invertir nuestro arreglo ahora requerimos nuestra función para rotar nuestro arreglo.

func RotarArreglo(lista []int, posiciones int) {
	InvertirArreglo(lista, 0, posiciones-1)
	InvertirArreglo(lista, posiciones, len(lista)-1)
	InvertirArreglo(lista, 0, len(lista)-1)
}

Con estas tres lineas invocando la misma función que invierte el arreglo, se realizan las operaciones necesarias para mover N posiciones nuestro arreglo.

Ahora vamos a realizar la prueba.

func main() {

	numeros := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
	RotarArreglo(numeros, 3)
	fmt.Println(numeros)

}

Salida

[3 4 5 6 7 8 9 0 1 2]

Podemos cambiar el valor de las posiciones a rotar y nuestro ejemplo seguirá funcionando correctamente.