Tasks Details
easy
Count the number of triangles that can be built from a given set of edges.
Task Score
100%
Correctness
100%
Performance
100%
An array A consisting of N integers is given. A triplet (P, Q, R) is triangular if it is possible to build a triangle with sides of lengths A[P], A[Q] and A[R]. In other words, triplet (P, Q, R) is triangular if 0 ≤ P < Q < R < N and:
- A[P] + A[Q] > A[R],
- A[Q] + A[R] > A[P],
- A[R] + A[P] > A[Q].
For example, consider array A such that:
A[0] = 10 A[1] = 2 A[2] = 5 A[3] = 1 A[4] = 8 A[5] = 12There are four triangular triplets that can be constructed from elements of this array, namely (0, 2, 4), (0, 2, 5), (0, 4, 5), and (2, 4, 5).
Write a function:
function solution(A);
that, given an array A consisting of N integers, returns the number of triangular triplets in this array.
For example, given array A such that:
A[0] = 10 A[1] = 2 A[2] = 5 A[3] = 1 A[4] = 8 A[5] = 12the function should return 4, as explained above.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [0..1,000];
- each element of array A is an integer within the range [1..1,000,000,000].
Copyright 2009–2025 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.
Solution
Programming language used JavaScript
Time spent on task 4 minutes
Notes
not defined yet
Task timeline
Code: 16:59:34 UTC,
js,
verify,
result: Passed
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 4.0.0)
var start = 0;
var mid = 1;
var end = 2;
var count = 0;
if(A.length < 3) {
return 0;
}
A.sort(function(a, b) {
return a-b;
});
for(start=0; start<A.length-2; start++) {
for(mid = start+1; mid<A.length-1; mid++) {
end = mid+1;
var ret = check(A, start, mid, end);
while(end < A.length && ret) {
end++;
}
count += end - mid - 1;
}
}
return count;
}
function check(arr, base, mid, end) {
if(arr[base] + arr[mid] > arr[end]) return true;
return false;
}
Analysis
Code: 16:59:40 UTC,
js,
verify,
result: Passed
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 4.0.0)
var start = 0;
var mid = 1;
var end = 2;
var count = 0;
if(A.length < 3) {
return 0;
}
A.sort(function(a, b) {
return a-b;
});
for(start=0; start<A.length-2; start++) {
for(mid = start+1; mid<A.length-1; mid++) {
end = mid+1;
var ret = check(A, start, mid, end);
while(end < A.length && ret) {
end++;
}
count += end - mid - 1;
}
}
return count;
}
function check(arr, base, mid, end) {
if(arr[base] + arr[mid] > arr[end]) return true;
return false;
}
User test case 1:
[3, 3, 5, 6]
Analysis
Code: 17:00:06 UTC,
js,
verify,
result: Passed
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 4.0.0)
var start = 0;
var mid = 1;
var end = 2;
var count = 0;
if(A.length < 3) {
return 0;
}
A.sort(function(a, b) {
return a-b;
});
for(start=0; start<A.length-2; start++) {
for(mid = start+1; mid<A.length-1; mid++) {
end = mid+1;
var ret = check(A, start, mid, end);
while(end < A.length && ret) {
end++;
}
count += end - mid - 1;
}
}
return count;
}
function check(arr, base, mid, end) {
console.log(arr[base], arr[mid], arr[end]);
if(arr[base] + arr[mid] > arr[end]) return true;
return false;
}
User test case 1:
[3, 3, 5, 6]
Analysis
expand all
Example tests
1.
0.165 s
OK
stdout:
1 2 5 1 5 8 1 8 10 1 10 12 2 5 8 2 8 10 2 10 12 5 8 10 5 10 12 8 10 12
Code: 17:01:02 UTC,
js,
verify,
result: Passed
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 4.0.0)
var start = 0;
var mid = 1;
var end = 2;
var count = 0;
if(A.length < 3) {
return 0;
}
A.sort(function(a, b) {
return a-b;
});
for(start=0; start<A.length-2; start++) {
for(mid = start+1; mid<A.length-1; mid++) {
end = mid+1;
var ret = check(A, start, mid, end);
while(end < A.length && ret) {
end++;
}
count += end - mid - 1;
}
}
return count;
}
function check(arr, base, mid, end) {
console.log(arr[base] + '', '+', arr[mid] + '', '>', arr[end] + ' =', arr[base] + arr[mid] > arr[end]);
if(arr[base] + arr[mid] > arr[end]) return true;
return false;
}
User test case 1:
[3, 3, 5, 6]
Analysis
expand all
Example tests
1.
0.168 s
OK
stdout:
1 + 2 > 5 = false 1 + 5 > 8 = false 1 + 8 > 10 = false 1 + 10 > 12 = false 2 + 5 > 8 = false 2 + 8 > 10 = false 2 + 10 > 12 = false 5 + 8 > 10 = true 5 + 10 > 12 = true 8 + 10 > 12 = true
expand all
User tests
1.
0.169 s
OK
function result: 4
function result: 4
stdout:
3 + 3 > 5 = true 3 + 5 > 6 = true 3 + 5 > 6 = true
Code: 17:01:48 UTC,
js,
verify,
result: Passed
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 4.0.0)
var start = 0;
var mid = 1;
var end = 2;
var count = 0;
if(A.length < 3) {
return 0;
}
A.sort(function(a, b) {
return a-b;
});
for(start=0; start<A.length-2; start++) {
for(mid = start+1; mid<A.length-1; mid++) {
end = mid+1;
var ret = check(A, start, mid, end);
while(end < A.length && ret) {
end++;
}
count += end - mid - 1;
console.log('count:', count);
}
}
return count;
}
function check(arr, base, mid, end) {
console.log(arr[base] + '', '+', arr[mid] + '', '>', arr[end] + ' =', arr[base] + arr[mid] > arr[end]);
if(arr[base] + arr[mid] > arr[end]) return true;
return false;
}
User test case 1:
[3, 3, 5, 6]
Analysis
expand all
Example tests
1.
0.174 s
OK
stdout:
1 + 2 > 5 = false count: 0 1 + 5 > 8 = false count: 0 1 + 8 > 10 = false count: 0 1 + 10 > 12 = false count: 0 2 + 5 > 8 = false count: 0 2 + 8 > 10 = false count: 0 2 + 10 > 12 = false count: 0 5 + 8 > 10 = true count: 2 5 + 10 > 12 = true count: 3 8 + 10 > 12 = true count: 4
expand all
User tests
1.
0.174 s
OK
function result: 4
function result: 4
stdout:
3 + 3 > 5 = true count: 2 3 + 5 > 6 = true count: 3 3 + 5 > 6 = true count: 4
Code: 17:02:38 UTC,
js,
verify,
result: Passed
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 4.0.0)
var start = 0;
var mid = 1;
var end = 2;
var count = 0;
if(A.length < 3) {
return 0;
}
A.sort(function(a, b) {
return a-b;
});
for(start=0; start<A.length-2; start++) {
for(mid = start+1; mid<A.length-1; mid++) {
end = mid+1;
while(end < A.length && check(A, start, mid, end)) {
end++;
}
count += end - mid - 1;
console.log('count:', count);
}
}
return count;
}
function check(arr, base, mid, end) {
console.log(arr[base] + '', '+', arr[mid] + '', '>', arr[end] + ' =', arr[base] + arr[mid] > arr[end]);
if(arr[base] + arr[mid] > arr[end]) return true;
return false;
}
User test case 1:
[3, 3, 5, 6]
Analysis
expand all
Example tests
1.
0.170 s
OK
stdout:
1 + 2 > 5 = false count: 0 1 + 5 > 8 = false count: 0 1 + 8 > 10 = false count: 0 1 + 10 > 12 = false count: 0 2 + 5 > 8 = false count: 0 2 + 8 > 10 = false count: 0 2 + 10 > 12 = false count: 0 5 + 8 > 10 = true 5 + 8 > 12 = true count: 2 5 + 10 > 12 = true count: 3 8 + 10 > 12 = true count: 4
expand all
User tests
1.
0.163 s
OK
function result: 3
function result: 3
stdout:
3 + 3 > 5 = true 3 + 3 > 6 = false count: 1 3 + 5 > 6 = true count: 2 3 + 5 > 6 = true count: 3
Code: 17:02:50 UTC,
js,
verify,
result: Passed
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 4.0.0)
var start = 0;
var mid = 1;
var end = 2;
var count = 0;
if(A.length < 3) {
return 0;
}
A.sort(function(a, b) {
return a-b;
});
for(start=0; start<A.length-2; start++) {
for(mid = start+1; mid<A.length-1; mid++) {
end = mid+1;
while(end < A.length && check(A, start, mid, end)) {
end++;
}
count += end - mid - 1;
}
}
return count;
}
function check(arr, base, mid, end) {
console.log(arr[base] + '', '+', arr[mid] + '', '>', arr[end] + ' =', arr[base] + arr[mid] > arr[end]);
if(arr[base] + arr[mid] > arr[end]) return true;
return false;
}
User test case 1:
[3, 3, 5, 6]
Analysis
expand all
Example tests
1.
0.167 s
OK
stdout:
1 + 2 > 5 = false 1 + 5 > 8 = false 1 + 8 > 10 = false 1 + 10 > 12 = false 2 + 5 > 8 = false 2 + 8 > 10 = false 2 + 10 > 12 = false 5 + 8 > 10 = true 5 + 8 > 12 = true 5 + 10 > 12 = true 8 + 10 > 12 = true
expand all
User tests
1.
0.178 s
OK
function result: 3
function result: 3
stdout:
3 + 3 > 5 = true 3 + 3 > 6 = false 3 + 5 > 6 = true 3 + 5 > 6 = true
Code: 17:03:04 UTC,
js,
verify,
result: Passed
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 4.0.0)
var start = 0;
var mid = 1;
var end = 2;
var count = 0;
if(A.length < 3) {
return 0;
}
A.sort(function(a, b) {
return a-b;
});
for(start=0; start<A.length-2; start++) {
for(mid = start+1; mid<A.length-1; mid++) {
end = mid+1;
while(end < A.length && check(A, start, mid, end)) {
end++;
}
count += end - mid - 1;
}
}
return count;
}
function check(arr, base, mid, end) {
if(arr[base] + arr[mid] > arr[end]) return true;
return false;
}
User test case 1:
[3, 3, 5, 6]
Analysis
Code: 17:03:16 UTC,
js,
verify,
result: Passed
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 4.0.0)
var start = 0;
var mid = 1;
var end = 2;
var count = 0;
if(A.length < 3) {
return 0;
}
A.sort(function(a, b) {
return a-b;
});
for(start=0; start<A.length-2; start++) {
for(mid = start+1; mid<A.length-1; mid++) {
end = mid+1;
while(end < A.length && check(A, start, mid, end)) {
end++;
}
count += end - mid - 1;
}
}
return count;
}
function check(arr, base, mid, end) {
if(arr[base] + arr[mid] > arr[end]) return true;
return false;
}
User test case 1:
[3, 3, 5, 6]
Analysis
Code: 17:03:19 UTC,
js,
final,
score: 
100
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 4.0.0)
var start = 0;
var mid = 1;
var end = 2;
var count = 0;
if(A.length < 3) {
return 0;
}
A.sort(function(a, b) {
return a-b;
});
for(start=0; start<A.length-2; start++) {
for(mid = start+1; mid<A.length-1; mid++) {
end = mid+1;
while(end < A.length && check(A, start, mid, end)) {
end++;
}
count += end - mid - 1;
}
}
return count;
}
function check(arr, base, mid, end) {
if(arr[base] + arr[mid] > arr[end]) return true;
return false;
}
Analysis summary
The solution obtained perfect score.
Analysis
Detected time complexity:
O(N**2)
expand all
Correctness tests
1.
0.165 s
OK
2.
0.165 s
OK
1.
0.163 s
OK
2.
0.172 s
OK
1.
0.167 s
OK
2.
0.172 s
OK
1.
0.169 s
OK
2.
0.167 s
OK
1.
0.164 s
OK
1.
0.168 s
OK
1.
0.168 s
OK