[1, 2, 3, 4, 5, 6] -> Rotate By Two -> [3, 4, 5, 6, 1, 2]
arr = [1, 2, 3, 4, 5, 6]
arr
[1, 2, 3, 4, 5, 6]
def simpleRotateBy(arr, by):
return arr[by:] + arr[:by]
simpleRotateBy(arr, 2)
[3, 4, 5, 6, 1, 2]
arr
[1, 2, 3, 4, 5, 6]
def rotateOneByOne(arr, by):
i = 0
while i < by:
temp = arr[0]
del arr[0]
arr.append(temp)
i += 1
return arr
rotateOneByOne(arr, 2)
[3, 4, 5, 6, 1, 2]
def reverseArr(arr, start, end):
while start < end:
arr[start], arr[end] = arr[end], arr[start]
start += 1
end -= 1
def rotateByReversal(arr, by):
reverseArr(arr, 0, by - 1)
reverseArr(arr, by, len(arr) - 1)
reverseArr(arr, 0, len(arr) - 1)
arr = [1, 2, 3, 4, 5, 6]
arr
[1, 2, 3, 4, 5, 6]
rotateByReversal(arr, 2)
arr
[3, 4, 5, 6, 1, 2]
from math import gcd
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
arr
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
def rotateByJuggling(arr, d):
l = len(arr)
g = gcd(l, d)
tmp = 0
for i in range(g):
for j in range((l - 1) + g - i, -1, -g):
tmp, arr[j % l] = arr[j % l], tmp
rotateByJuggling(arr, 3)
arr
[4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3]