This is a javascript implementation that renders a 100% correct solution of the Codility Lesson 1 challenge – Binary Gaps.
I chose a recursive approach to this, and quite a simple solution. The performance is on point however.
We transform the integer into a string representation in binary of that integer.
Then, we check for the first occurance of a 1, measure the gap to the next 1 and so on. There are tests to see if we reached the end, or if there’s only one “1” in the representation. And that’s all, folks.
let gap;
function solution(N) {
// write your code in JavaScript (Node.js 8.9.4)
if (N === parseInt(N, 10) && N>=1 && N<=2147483647){
gap = 0;
//turn it to binary
const binary = N.toString(2)
//turn it into an array
let NArray = binary.split('')
findGap(NArray)
}
return gap;
}
function evalGap(distance){
if (distance > gap){
gap = distance;
}
}
function findGap(binaryArray) {
if (binaryArray.indexOf('1') == -1){
return gap
}
else {
index1 = binaryArray.indexOf('1');
evalGap(index1)
binaryArray = binaryArray.slice(index1+1);
index2 = binaryArray.indexOf('1')
if (index2 !== -1) {
evalGap(index2)
binaryArray = binaryArray.slice(index2+1);
findGap(binaryArray)
} else {
if (gap === 0) {
gap = 0
}
}
}
}
See it in action here: https://app.codility.com/demo/results/trainingJQ5UZ9-3G4/
Did you solve it in another way? Or perhaps you know a way to improve this solution? Drop it below in the comments!