-
Notifications
You must be signed in to change notification settings - Fork 0
/
cyclic_rotation.py
62 lines (46 loc) · 1.77 KB
/
cyclic_rotation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
"""
Task: CyclicRotation
Goal: Rotate an array to the right by a given number of steps.
Website: https://app.codility.com/programmers/lessons/2-arrays/cyclic_rotation/
-----------------------------------------------------------
A zero-indexed array A consisting of N integers is given. Rotation of the
array means that each element is shifted right by one index, and the last
element of the array is moved to the first place. For example, the
rotation of array A = [3, 8, 9, 7, 6] is [6, 3, 8, 9, 7] (elements are
shifted right by one index and 6 is moved to the first place).
The goal is to rotate array A K times; that is, each element of A will
be shifted to the right K times.
Write a function:
def solution(A, K)
that, given a zero-indexed array A consisting of N integers and an
integer K, returns the array A rotated K times.
For example, given
A = [3, 8, 9, 7, 6]
K = 3
the function should return [9, 7, 6, 3, 8]. Three rotations were made:
[3, 8, 9, 7, 6] -> [6, 3, 8, 9, 7]
[6, 3, 8, 9, 7] -> [7, 6, 3, 8, 9]
[7, 6, 3, 8, 9] -> [9, 7, 6, 3, 8]
For another example, given
A = [0, 0, 0]
K = 1
the function should return [0, 0, 0]
Given
A = [1, 2, 3, 4]
K = 4
the function should return [1, 2, 3, 4]
Assume that:
N and K are integers within the range [0..100];
each element of array A is an integer within the range [−1,000..1,000].
In your solution, focus on correctness. The performance of your solution
will not be the focus of the assessment.
"""
def solution(A, K):
N = len(A)
if N > 0: # Make sure the array is not empty
if K > N: # if K greater than # elements
K = K % N
a_rolled = A[-K:] + A[:-K] # Right rotation, so slice at -K
return a_rolled
else:
return []