Tasks Details
easy
Maximize A[P] * A[Q] * A[R] for any triplet (P, Q, R).
Task Score
100%
Correctness
100%
Performance
100%
A non-empty array A consisting of N integers is given. The product of triplet (P, Q, R) equates to A[P] * A[Q] * A[R] (0 ≤ P < Q < R < N).
For example, array A such that:
A[0] = -3 A[1] = 1 A[2] = 2 A[3] = -2 A[4] = 5 A[5] = 6contains the following example triplets:
- (0, 1, 2), product is −3 * 1 * 2 = −6
- (1, 2, 4), product is 1 * 2 * 5 = 10
- (2, 4, 5), product is 2 * 5 * 6 = 60
Your goal is to find the maximal product of any triplet.
Write a function:
def solution(A)
that, given a non-empty array A, returns the value of the maximal product of any triplet.
For example, given array A such that:
A[0] = -3 A[1] = 1 A[2] = 2 A[3] = -2 A[4] = 5 A[5] = 6the function should return 60, as the product of triplet (2, 4, 5) is maximal.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [3..100,000];
- each element of array A is an integer within the range [−1,000..1,000].
Copyright 2009–2025 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.
Solution
Programming language used Python
Time spent on task 15 minutes
Notes
not defined yet
Code: 09:32:47 UTC,
java,
autosave
Code: 09:34:55 UTC,
py,
verify,
result: Failed
Analysis
expand all
Example tests
1.
0.036 s
RUNTIME ERROR,
tested program terminated with exit code 1
stderr:
Traceback (most recent call last): File "exec.py", line 129, in <module> main() File "exec.py", line 70, in main sol = __import__('solution') File "/tmp/solution.py", line 8 if A[n-1] >=0 ^ SyntaxError: invalid syntax
Code: 09:35:00 UTC,
py,
verify,
result: Passed
Analysis
Code: 09:36:40 UTC,
py,
autosave
Code: 09:36:57 UTC,
py,
autosave
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] < 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] < 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] < 0:
return A[n-2]*A[n-3]*A[n-4]
Code: 09:37:13 UTC,
py,
autosave
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] < 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] < 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] < 0:
return A[n-3]*A[n-4]*A[n-5]
Code: 09:37:41 UTC,
py,
autosave
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <0 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <0 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <0 0:
return A[n-3]*A[n-4]*A[n-5]
Code: 09:37:51 UTC,
py,
autosave
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
return A[n-3]*A[n-4]*A[n-5]
Code: 09:38:08 UTC,
py,
verify,
result: Failed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
type(A[n])
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
return A[n-3]*A[n-4]*A[n-5]
Analysis
expand all
Example tests
1.
0.036 s
RUNTIME ERROR,
tested program terminated with exit code 1
stderr:
Traceback (most recent call last): File "exec.py", line 129, in <module> main() File "exec.py", line 91, in main result = solution( A ) File "/tmp/solution.py", line 7, in solution type(A[n]) IndexError: list index out of range
Code: 09:38:15 UTC,
py,
verify,
result: Failed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(type(A[n]))
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
return A[n-3]*A[n-4]*A[n-5]
Analysis
expand all
Example tests
1.
0.036 s
RUNTIME ERROR,
tested program terminated with exit code 1
stderr:
Traceback (most recent call last): File "exec.py", line 129, in <module> main() File "exec.py", line 91, in main result = solution( A ) File "/tmp/solution.py", line 7, in solution print(type(A[n])) IndexError: list index out of range
Code: 09:38:31 UTC,
py,
autosave
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(type(A[n]))
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
# elif A[n-1] <= 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
return A[n-3]*A[n-4]*A[n-5]
Code: 09:38:36 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(type(A[n-1]))
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
return A[n-3]*A[n-4]*A[n-5]
Analysis
Code: 09:39:01 UTC,
py,
autosave
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(type(A[n-1]))
print(type(A[n-1]))
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
return A[n-3]*A[n-4]*A[n-5]
Code: 09:39:04 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
print(type(A[n-1]))
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
return A[n-3]*A[n-4]*A[n-5]
Analysis
expand all
Example tests
1.
0.036 s
OK
stdout:
[-3, -2, 1, 2, 5, 6] <class 'int'>
Code: 09:39:43 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
print(type(A[n-1]))
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
return A[n-3]*A[n-4]*A[n-5]
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
Analysis
expand all
Example tests
1.
0.036 s
OK
stdout:
[-3, -2, 1, 2, 5, 6] <class 'int'>
expand all
User tests
1.
0.036 s
OK
function result: 120
function result: 120
stdout:
[-100, -5, -3, -1, 0, 1, 4, 5, 6] <class 'int'>
Code: 09:40:08 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
print(type(A[n-1]))
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
return A[n-3]*A[n-4]*A[n-5]
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
User test case 2:
[-100, -1, -3, -5, 0, 1, 4]
Analysis
expand all
Example tests
1.
0.036 s
OK
stdout:
[-3, -2, 1, 2, 5, 6] <class 'int'>
expand all
User tests
1.
0.036 s
OK
function result: 120
function result: 120
stdout:
[-100, -5, -3, -1, 0, 1, 4, 5, 6] <class 'int'>
1.
0.036 s
OK
function result: 0
function result: 0
stdout:
[-100, -5, -3, -1, 0, 1, 4] <class 'int'>
Code: 09:40:37 UTC,
py,
autosave
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
print(type(A[n-1]))
if A[n-3] >=0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
return A[n-3]*A[n-4]*A[n-5]
Code: 09:40:59 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
print(type(A[n-1]))
if A[n-3] >=0:
print('1')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
print('2')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
print('3')
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
print('4')
return A[n-3]*A[n-4]*A[n-5]
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
User test case 2:
[-100, -1, -3, -5, 0, 1, 4]
Analysis
expand all
Example tests
1.
0.036 s
OK
stdout:
[-3, -2, 1, 2, 5, 6] <class 'int'> 1
expand all
User tests
1.
0.036 s
OK
function result: 120
function result: 120
stdout:
[-100, -5, -3, -1, 0, 1, 4, 5, 6] <class 'int'> 1
1.
0.036 s
OK
function result: 0
function result: 0
stdout:
[-100, -5, -3, -1, 0, 1, 4] <class 'int'> 1
Code: 09:41:08 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
if A[n-3] >=0:
print('1')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
print('2')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
print('3')
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
print('4')
return A[n-3]*A[n-4]*A[n-5]
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
User test case 2:
[-100, -1, -3, -5, 0, 1, 4]
Analysis
expand all
User tests
1.
0.036 s
OK
function result: 120
function result: 120
stdout:
[-100, -5, -3, -1, 0, 1, 4, 5, 6] 1
1.
0.036 s
OK
function result: 0
function result: 0
stdout:
[-100, -5, -3, -1, 0, 1, 4] 1
Code: 09:41:38 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
if A[n-3] >=0:
print('1')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
print('2')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
print('3')
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
print('4')
return A[n-3]*A[n-4]*A[n-5]
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
User test case 2:
[-100, -1, -3, -5, 0, 1, 4]
User test case 3:
[-100, -1, -3, -5, -6, 1, 4]
Analysis
expand all
User tests
1.
0.052 s
OK
function result: 120
function result: 120
stdout:
[-100, -5, -3, -1, 0, 1, 4, 5, 6] 1
1.
0.052 s
OK
function result: 0
function result: 0
stdout:
[-100, -5, -3, -1, 0, 1, 4] 1
1.
0.052 s
OK
function result: -15
function result: -15
stdout:
[-100, -6, -5, -3, -1, 1, 4] 4
Code: 09:42:07 UTC,
py,
autosave
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
if A[n-3] >=0:
print('1')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
print('2')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
print('3')
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
print('4')
return A[n-3]*A[n-4]*A[n-5]
Code: 09:42:25 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
d = A[n-1]*A[n-2]*A[n-3]
print(d)
if A[n-3] >=0:
print('1')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
print('2')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
print('3')
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
print('4')
return A[n-3]*A[n-4]*A[n-5]
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
User test case 2:
[-100, -1, -3, -5, 0, 1, 4]
User test case 3:
[-100, -1, -3, -5, -6, 1, 4]
Analysis
expand all
Example tests
1.
0.052 s
OK
stdout:
[-3, -2, 1, 2, 5, 6] 60 1
expand all
User tests
1.
0.052 s
OK
function result: 120
function result: 120
stdout:
[-100, -5, -3, -1, 0, 1, 4, 5, 6] 120 1
1.
0.052 s
OK
function result: 0
function result: 0
stdout:
[-100, -5, -3, -1, 0, 1, 4] 0 1
1.
0.048 s
OK
function result: -15
function result: -15
stdout:
[-100, -6, -5, -3, -1, 1, 4] -4 4
Code: 09:43:02 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
d = A[n-1]*A[n-2]*A[n-3]
print(d)
if A[n-3] >=0:
print('1')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
print('2')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
print('3')
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
print('4')
return A[n-3]*A[n-4]*A[n-5]
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
User test case 2:
[-100, -1, -3, -5, 0, 1, 4]
User test case 3:
[-100, -10, -30, -50, -60, 1, 4]
Analysis
expand all
Example tests
1.
0.036 s
OK
stdout:
[-3, -2, 1, 2, 5, 6] 60 1
expand all
User tests
1.
0.036 s
OK
function result: 120
function result: 120
stdout:
[-100, -5, -3, -1, 0, 1, 4, 5, 6] 120 1
1.
0.036 s
OK
function result: 0
function result: 0
stdout:
[-100, -5, -3, -1, 0, 1, 4] 0 1
1.
0.036 s
OK
function result: -15000
function result: -15000
stdout:
[-100, -60, -50, -30, -10, 1, 4] -40 4
Code: 09:43:57 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
n = len(A)
print(A)
d = A[n-1]*A[n-2]*A[n-3]
print(d)
if A[n-3] >=0:
print('1')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-1] <= 0:
print('2')
return A[n-1]*A[n-2]*A[n-3]
elif A[n-2] <= 0:
print('3')
return A[n-2]*A[n-3]*A[n-4]
elif A[n-3] <= 0:
print('4')
return A[n-3]*A[n-4]*A[n-5]
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
User test case 2:
[-100, -1, -3, -5, 0, 1, 4]
User test case 3:
[-100, -10, -30, -50, -60, 1, 4, 1000, 1000]
Analysis
expand all
Example tests
1.
0.036 s
OK
stdout:
[-3, -2, 1, 2, 5, 6] 60 1
expand all
User tests
1.
0.036 s
OK
function result: 120
function result: 120
stdout:
[-100, -5, -3, -1, 0, 1, 4, 5, 6] 120 1
1.
0.036 s
OK
function result: 0
function result: 0
stdout:
[-100, -5, -3, -1, 0, 1, 4] 0 1
1.
0.036 s
OK
function result: 4000000
function result: 4000000
stdout:
[-100, -60, -50, -30, -10, 1, 4, 1000, 1000] 4000000 1
Code: 09:46:23 UTC,
py,
verify,
result: Failed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
print(A[0]*A[1]*A[-1])
print(A[-1]*A[-2]*A[-3])
return 0
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
User test case 2:
[-100, -1, -3, -5, 0, 1, 4]
User test case 3:
[-100, -10, -30, -50, -60, 1, 4, 1000, 1000]
Analysis
expand all
Example tests
1.
0.036 s
WRONG ANSWER,
got 0 expected 60
stdout:
36 60
expand all
User tests
1.
0.036 s
OK
function result: 0
function result: 0
stdout:
3000 120
1.
0.036 s
OK
function result: 0
function result: 0
stdout:
2000 0
1.
0.036 s
OK
function result: 0
function result: 0
stdout:
6000000 4000000
Code: 09:47:31 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
#two negatives gives positive, take max
return max(A[0]*A[1]*A[-1], A[-1]*A[-2]*A[-3])
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
User test case 2:
[-100, -1, -3, -5, 0, 1, 4]
User test case 3:
[-100, -10, -30, -50, -60, 1, 4, 1000, 1000]
Analysis
expand all
User tests
1.
0.036 s
OK
function result: 3000
function result: 3000
1.
0.036 s
OK
function result: 2000
function result: 2000
1.
0.036 s
OK
function result: 6000000
function result: 6000000
Code: 09:47:39 UTC,
py,
verify,
result: Passed
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A):
A.sort()
#two negatives gives positive, take max
return max(A[0]*A[1]*A[-1], A[-1]*A[-2]*A[-3])
User test case 1:
[-100, -1, -3, -5, 0, 1, 4, 5, 6]
User test case 2:
[-100, -1, -3, -5, 0, 1, 4]
User test case 3:
[-100, -10, -30, -50, -60, 1, 4, 1000, 1000]
Analysis
expand all
User tests
1.
0.036 s
OK
function result: 3000
function result: 3000
1.
0.036 s
OK
function result: 2000
function result: 2000
1.
0.036 s
OK
function result: 6000000
function result: 6000000
Code: 09:47:41 UTC,
py,
final,
score: 
100
Analysis summary
The solution obtained perfect score.
Analysis
Detected time complexity:
O(N * log(N))
expand all
Correctness tests
1.
0.036 s
OK
2.
0.036 s
OK
3.
0.036 s
OK
1.
0.036 s
OK
2.
0.036 s
OK
3.
0.036 s
OK
4.
0.036 s
OK
1.
0.036 s
OK
2.
0.036 s
OK
3.
0.036 s
OK
1.
0.036 s
OK
expand all
Performance tests
1.
0.036 s
OK
1.
0.048 s
OK
1.
0.168 s
OK
1.
0.084 s
OK
1.
0.124 s
OK
2.
0.128 s
OK