Tasks Details
easy
1.
PermCheck
Check whether array A is a permutation.
Task Score
100%
Correctness
100%
Performance
100%
A non-empty array A consisting of N integers is given.
A permutation is a sequence containing each element from 1 to N once, and only once.
For example, array A such that:
A[0] = 4 A[1] = 1 A[2] = 3 A[3] = 2is a permutation, but array A such that:
A[0] = 4 A[1] = 1 A[2] = 3is not a permutation, because value 2 is missing.
The goal is to check whether array A is a permutation.
Write a function:
object Solution { def solution(a: Array[Int]): Int }
that, given an array A, returns 1 if array A is a permutation and 0 if it is not.
For example, given array A such that:
A[0] = 4 A[1] = 1 A[2] = 3 A[3] = 2the function should return 1.
Given array A such that:
A[0] = 4 A[1] = 1 A[2] = 3the function should return 0.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [1..100,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 Scala
Time spent on task 18 minutes
Notes
not defined yet
Task timeline
Code: 05:44:51 UTC,
scala,
verify,
result: Failed
Analysis
Code: 05:45:11 UTC,
scala,
verify,
result: Failed
Analysis
Code: 05:54:36 UTC,
scala,
verify,
result: Failed
import java.util.BitSet
object Solution {
def solution(A: Array[Int]): Int = {
val bitz = new BitSet(A.size + 1)
val good = A.foldLeft(true)((current, i) =>
if (current) {
(i, bitz.get(i)) match {
case (x, _) if x > A.size + 1 =>
false
case (0, _) =>
false
case (_, true) =>
false
case _ =>
bitz.set(i)
true
}
} else false
)
if (good) 1
else 0
}
}
Analysis
Code: 05:55:39 UTC,
scala,
verify,
result: Passed
import java.util.BitSet
object Solution {
def solution(A: Array[Int]): Int = {
val bitz = new BitSet(A.size + 1)
val good = A.foldLeft(true)((current, i) =>
if (current) {
(i, bitz.get(i)) match {
case (x, _) if x > A.size =>
false
case (0, _) =>
false
case (_, true) =>
false
case _ =>
bitz.set(i)
true
}
} else false
)
if (good) 1
else 0
}
}
Analysis
Code: 05:56:04 UTC,
scala,
verify,
result: Passed
import java.util.BitSet
object Solution {
def solution(A: Array[Int]): Int = {
val bitz = new BitSet(A.size + 1)
val good = A.foldLeft(true)((current, i) =>
if (current) {
(i, bitz.get(i)) match {
case (x, _) if x > A.size =>
false
case (0, _) =>
false
case (_, true) =>
false
case _ =>
bitz.set(i)
true
}
} else false
)
if (good && A.size > 0) 1
else 0
}
}
Analysis
Code: 05:56:47 UTC,
scala,
verify,
result: Failed
import java.util.BitSet
object Solution {
def solution(A: Array[Int]): Int = {
val bitz = new BitSet(A.size + 1)
val good = A.foldLeft(true)((current, i) =>
if (current) {
(i, bitz.get(i)) match {
case (x, _) if x > A.size =>
false
case (0, _) =>
false
case (_, true) =>
false
case _ =>
bitz.set(i)
true
}
} else false
)
if (good && A.size > 0 && N > 1 && N <= 100000) 1
else 0
}
}
Analysis
Compile error
Solution.scala:28: error: not found: value N if (good && A.size > 0 && N > 1 && N <= 100000) 1 ^ Solution.scala:28: error: not found: value N if (good && A.size > 0 && N > 1 && N <= 100000) 1 ^ two errors found
Code: 05:58:00 UTC,
scala,
verify,
result: Passed
import java.util.BitSet
object Solution {
def solution(A: Array[Int]): Int = {
val bitz = new BitSet(A.size + 1)
val good = A.foldLeft(true)((current, i) =>
if (current) {
(i, bitz.get(i)) match {
case (x, _) if x > A.size =>
false
case (x, _) if x < 1 || x > 1000000000 =>
false
case (0, _) =>
false
case (_, true) =>
false
case _ =>
bitz.set(i)
true
}
} else false
)
if (good && A.size > 0) 1
else 0
}
}
Analysis
Code: 05:58:21 UTC,
scala,
verify,
result: Passed
import java.util.BitSet
object Solution {
def solution(A: Array[Int]): Int = {
val bitz = new BitSet(A.size + 1)
val good = A.foldLeft(true)((current, i) =>
if (current) {
(i, bitz.get(i)) match {
case (x, _) if x > A.size =>
false
case (x, _) if x < 1 || x > 1000000000 =>
false
case (0, _) =>
false
case (_, true) =>
false
case _ =>
bitz.set(i)
true
}
} else false
)
if (good && A.size > 0 && A.size <= 100000) 1
else 0
}
}
Analysis
Code: 05:58:42 UTC,
scala,
verify,
result: Passed
import java.util.BitSet
object Solution {
def solution(A: Array[Int]): Int = {
val bitz = new BitSet(A.size + 1)
val good = A.foldLeft(true)((current, i) =>
if (current) {
(i, bitz.get(i)) match {
case (x, _) if x > A.size =>
false
case (x, _) if x < 1 || x > 1000000000 =>
false
case (0, _) =>
false
case (_, true) =>
false
case _ =>
bitz.set(i)
true
}
} else false
)
if (good && A.size > 0 && A.size <= 100000) 1
else 0
}
}
Analysis
Code: 05:59:00 UTC,
scala,
final,
score: 
100
import java.util.BitSet
object Solution {
def solution(A: Array[Int]): Int = {
val bitz = new BitSet(A.size + 1)
val good = A.foldLeft(true)((current, i) =>
if (current) {
(i, bitz.get(i)) match {
case (x, _) if x > A.size =>
false
case (x, _) if x < 1 || x > 1000000000 =>
false
case (0, _) =>
false
case (_, true) =>
false
case _ =>
bitz.set(i)
true
}
} else false
)
if (good && A.size > 0 && A.size <= 100000) 1
else 0
}
}
Analysis summary
The solution obtained perfect score.
Analysis
Detected time complexity:
O(N) or O(N * log(N))
expand all
Correctness tests
1.
2.083 s
OK
2.
2.366 s
OK
1.
2.356 s
OK
2.
2.355 s
OK
1.
2.371 s
OK
2.
2.361 s
OK
3.
2.350 s
OK
4.
2.353 s
OK
1.
2.358 s
OK
2.
2.358 s
OK
3.
2.350 s
OK
4.
2.361 s
OK
1.
2.342 s
OK
2.
2.369 s
OK
expand all
Performance tests
1.
2.700 s
OK
2.
2.755 s
OK
1.
2.900 s
OK
2.
2.925 s
OK
1.
2.933 s
OK
2.
2.875 s
OK
1.
2.765 s
OK
2.
2.878 s
OK
1.
2.353 s
OK
2.
2.698 s
OK
3.
2.345 s
OK