All done in python so far
This commit is contained in:
commit
211e38a307
7 changed files with 255 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#.#
|
||||||
|
*~
|
||||||
|
*.sw?
|
54
a2.py
Normal file
54
a2.py
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
"""
|
||||||
|
An 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:
|
||||||
|
|
||||||
|
class Solution { public int[] solution(int[] A, int K); }
|
||||||
|
|
||||||
|
that, given an 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. Copyright 2009–2020 by Codility Limited.
|
||||||
|
All Rights Reserved. Unauthorized copying, publication or disclosure
|
||||||
|
prohibited.
|
||||||
|
"""
|
||||||
|
def solution(A, K):
|
||||||
|
if len(A) in (0, 1):
|
||||||
|
return A
|
||||||
|
|
||||||
|
for _ in range(K):
|
||||||
|
A = [A[-1]] + A[:-1]
|
||||||
|
return A
|
45
a3.py
Normal file
45
a3.py
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
"""
|
||||||
|
A non-empty array A consisting of N integers is given. The array
|
||||||
|
contains an odd number of elements, and each element of the array can
|
||||||
|
be paired with another element that has the same value, except for one
|
||||||
|
element that is left unpaired.
|
||||||
|
|
||||||
|
For example, in array A such that:
|
||||||
|
A[0] = 9 A[1] = 3 A[2] = 9
|
||||||
|
A[3] = 3 A[4] = 9 A[5] = 7
|
||||||
|
A[6] = 9
|
||||||
|
|
||||||
|
the elements at indexes 0 and 2 have value 9,
|
||||||
|
the elements at indexes 1 and 3 have value 3,
|
||||||
|
the elements at indexes 4 and 6 have value 9,
|
||||||
|
the element at index 5 has value 7 and is unpaired.
|
||||||
|
|
||||||
|
Write a function:
|
||||||
|
|
||||||
|
def solution(A)
|
||||||
|
|
||||||
|
that, given an array A consisting of N integers fulfilling the above
|
||||||
|
conditions, returns the value of the unpaired element.
|
||||||
|
|
||||||
|
For example, given array A such that:
|
||||||
|
A[0] = 9 A[1] = 3 A[2] = 9
|
||||||
|
A[3] = 3 A[4] = 9 A[5] = 7
|
||||||
|
A[6] = 9
|
||||||
|
|
||||||
|
the function should return 7, as explained in the example above.
|
||||||
|
|
||||||
|
Write an efficient algorithm for the following assumptions:
|
||||||
|
|
||||||
|
N is an odd integer within the range [1..1,000,000];
|
||||||
|
each element of array A is an integer within the range [1..1,000,000,000];
|
||||||
|
all but one of the values in A occur an even number of times.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def solution(A):
|
||||||
|
s = set()
|
||||||
|
for x in A:
|
||||||
|
if x in s:
|
||||||
|
s.remove(x)
|
||||||
|
else:
|
||||||
|
s.add(x)
|
||||||
|
return s.pop()
|
0
cnt1.py
Normal file
0
cnt1.py
Normal file
40
tc1.py
Normal file
40
tc1.py
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
"""
|
||||||
|
An array A consisting of N different integers is given. The array
|
||||||
|
contains integers in the range [1..(N + 1)], which means that exactly
|
||||||
|
one element is missing.
|
||||||
|
|
||||||
|
Your goal is to find that missing element.
|
||||||
|
|
||||||
|
Write a function:
|
||||||
|
|
||||||
|
class Solution { public int solution(int[] A); }
|
||||||
|
|
||||||
|
that, given an array A, returns the value of the missing element.
|
||||||
|
|
||||||
|
For example, given array A such that:
|
||||||
|
A[0] = 2
|
||||||
|
A[1] = 3
|
||||||
|
A[2] = 1
|
||||||
|
A[3] = 5
|
||||||
|
|
||||||
|
the function should return 4, as it is the missing element.
|
||||||
|
|
||||||
|
Write an efficient algorithm for the following assumptions:
|
||||||
|
|
||||||
|
N is an integer within the range [0..100,000];
|
||||||
|
the elements of A are all distinct;
|
||||||
|
each element of array A is an integer within the range [1..(N + 1)].
|
||||||
|
"""
|
||||||
|
|
||||||
|
def solution(A):
|
||||||
|
last = len(A) + 1
|
||||||
|
|
||||||
|
S = set(A)
|
||||||
|
|
||||||
|
if last == 1 or last not in S:
|
||||||
|
return last
|
||||||
|
|
||||||
|
for x in range(1, last):
|
||||||
|
if x not in S:
|
||||||
|
return x
|
||||||
|
|
78
tc2.py
Normal file
78
tc2.py
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
"""
|
||||||
|
A non-empty array A consisting of N integers is given. Array A represents
|
||||||
|
numbers on a tape.
|
||||||
|
|
||||||
|
Any integer P, such that 0 < P < N, splits this tape into two non-empty parts:
|
||||||
|
A[0], A[1], ..., A[P − 1] and A[P], A[P + 1], ..., A[N − 1].
|
||||||
|
|
||||||
|
The difference between the two parts is the value of:
|
||||||
|
|(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])|
|
||||||
|
|
||||||
|
In other words, it is the absolute difference between the sum of the first part
|
||||||
|
and the sum of the second part.
|
||||||
|
|
||||||
|
For example, consider array A such that:
|
||||||
|
A[0] = 3
|
||||||
|
A[1] = 1
|
||||||
|
A[2] = 2
|
||||||
|
A[3] = 4
|
||||||
|
A[4] = 3
|
||||||
|
|
||||||
|
We can split this tape in four places:
|
||||||
|
|
||||||
|
P = 1, difference = |3 − 10| = 7
|
||||||
|
P = 2, difference = |4 − 9| = 5
|
||||||
|
P = 3, difference = |6 − 7| = 1
|
||||||
|
P = 4, difference = |10 − 3| = 7
|
||||||
|
|
||||||
|
Write a function:
|
||||||
|
|
||||||
|
class Solution { public int solution(int[] A); }
|
||||||
|
|
||||||
|
that, given a non-empty array A of N integers, returns the minimal difference
|
||||||
|
that can be achieved.
|
||||||
|
|
||||||
|
For example, given:
|
||||||
|
A[0] = 3
|
||||||
|
A[1] = 1
|
||||||
|
A[2] = 2
|
||||||
|
A[3] = 4
|
||||||
|
A[4] = 3
|
||||||
|
|
||||||
|
the function should return 1, as explained above.
|
||||||
|
|
||||||
|
Write an efficient algorithm for the following assumptions:
|
||||||
|
|
||||||
|
N is an integer within the range [2..100,000];
|
||||||
|
each element of array A is an integer within the range [−1,000..1,000].
|
||||||
|
"""
|
||||||
|
|
||||||
|
def solution(A):
|
||||||
|
size = len(A) - 1
|
||||||
|
if size == 1:
|
||||||
|
return abs(A[0] - A[1])
|
||||||
|
|
||||||
|
l = [A[0]]
|
||||||
|
r = [A[-1]]
|
||||||
|
|
||||||
|
for i in range(size):
|
||||||
|
l.append(l[i] + A[i+1])
|
||||||
|
r.append(r[i] + A[size-i-1])
|
||||||
|
|
||||||
|
res = abs(l[0] - r[size-1])
|
||||||
|
for i in range(1, size):
|
||||||
|
res = min(res, abs(l[i] - r[size-i-1]))
|
||||||
|
return res
|
||||||
|
|
||||||
|
res = solution([1, 1, 3])
|
||||||
|
assert res == 1, "got {}".format(res)
|
||||||
|
res = solution([3, 1, 2, 4, 3])
|
||||||
|
assert res == 1, "got {}".format(res)
|
||||||
|
res = solution([-2, -3, -4, -1])
|
||||||
|
assert res == 0, "got {}".format(res)
|
||||||
|
res = solution([1, 8, -10, 8, 7, 9, 11])
|
||||||
|
assert res == 6, "got {}".format(res)
|
||||||
|
res = solution([-1, 1, 0, 1, -1, 0, -1, 1, -1, 0, 1, 0, 1, -1, 0])
|
||||||
|
assert res == 0, "got {}".format(res)
|
||||||
|
res = solution([14, 9])
|
||||||
|
assert res == 5, "got {}".format(res)
|
35
tc3.py
Normal file
35
tc3.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
"""
|
||||||
|
A small frog wants to get to the other side of the road. The frog is currently
|
||||||
|
located at position X and wants to get to a position greater than or equal to
|
||||||
|
Y. The small frog always jumps a fixed distance, D.
|
||||||
|
|
||||||
|
Count the minimal number of jumps that the small frog must perform to reach its
|
||||||
|
target.
|
||||||
|
|
||||||
|
Write a function:
|
||||||
|
|
||||||
|
class Solution { public int solution(int X, int Y, int D); }
|
||||||
|
|
||||||
|
that, given three integers X, Y and D, returns the minimal number of jumps from
|
||||||
|
position X to a position equal to or greater than Y.
|
||||||
|
|
||||||
|
For example, given:
|
||||||
|
X = 10
|
||||||
|
Y = 85
|
||||||
|
D = 30
|
||||||
|
|
||||||
|
the function should return 3, because the frog will be positioned as follows:
|
||||||
|
|
||||||
|
after the first jump, at position 10 + 30 = 40
|
||||||
|
after the second jump, at position 10 + 30 + 30 = 70
|
||||||
|
after the third jump, at position 10 + 30 + 30 + 30 = 100
|
||||||
|
|
||||||
|
Write an efficient algorithm for the following assumptions:
|
||||||
|
|
||||||
|
X, Y and D are integers within the range [1..1,000,000,000];
|
||||||
|
X ≤ Y.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def solution(X, Y, D):
|
||||||
|
distance = Y - X
|
||||||
|
return distance // D if distance % D == 0 else distance // D + 1
|
Loading…
Add table
Reference in a new issue