Skip to content

Instantly share code, notes, and snippets.

@adamloving
Created February 8, 2016 21:41
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save adamloving/ebbeafc9dc1e773c7f90 to your computer and use it in GitHub Desktop.
Save adamloving/ebbeafc9dc1e773c7f90 to your computer and use it in GitHub Desktop.
Toptal Codility Problem: Convert to-and-from base -2
'use strict';
function toDecimal(A) {
var sum = 0;
for (var i = 0; i < A.length; i++) {
sum += A[i] * Math.pow(-2, i);
}
return sum;
}
function toBaseNeg2(d) {
var a = [];
while (d != 0) {
var remainder = d % -2;
var d = Math.ceil(d / -2);
a.push(Math.abs(remainder));
}
return a;
}
function solution(A, B) {
var d = toDecimal(A);
return toBaseNeg2(-d);
}
console.log(toDecimal([1,0,0,1,1]) === 9);
console.log(toDecimal([1,1,0,1]) === -9);
console.log(toDecimal([1,0,0,1,1,1]) === -23);
console.log(toDecimal([1,1,0,1,0,1,1]) === 23);
console.log(JSON.stringify(toBaseNeg2(9)) == JSON.stringify([1,0,0,1,1]));
console.log(JSON.stringify(toBaseNeg2(-9)) == JSON.stringify([1,1,0,1]));
console.log(JSON.stringify(toBaseNeg2(-23)) == JSON.stringify([1,0,0,1,1,1]));
console.log(JSON.stringify(toBaseNeg2(23)) == JSON.stringify([1,1,0,1,0,1,1]));
@kabiridris
Copy link

This solution seems to be correct. I recently solved it with 86% score because of some corner cases that I couldn't nail.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment