Instantly share code, notes, and snippets.

# adamloving/base-neg-2.js Created Feb 8, 2016

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]));
Owner Author

### adamloving commented Feb 8, 2016

 A couple realizations while writing this: I should've written toDecimal() first to at least get partial credit (since the way I did it requires going to decimal and back - not sure if that's necessary). I was using Math.floor instead of Math.ceil - giving me incorrect results.
Owner Author

### adamloving commented Feb 8, 2016

 Here's the original problem...

### u3k commented Nov 20, 2016

 unfortunately this will not satisfy the requirements. JS can only hold up to 2^53 in Number yet problem description states that number can be as big as 2^100000...

### kb-programmer commented Feb 22, 2017

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