Add two negabinary integers [FINALIZED]
+3
−0
About Negabinary
Negabinary means base negative two (-2). That is, the $n$th place value is determined by $(-2)^n$.
Negabinary numbers can be evaluated just like any other base system. For example, we can parse the numbers 101, 110, and 1010 as follows:
-8 | 4 | -2 | 1 | value |
---|---|---|---|---|
1 | 0 | 1 | 5 | |
1 | 1 | 0 | 2 | |
1 | 0 | 1 | 0 | -10 |
Challenge
Given two negabinary integers, output the sum of them in negabinary.
You may take inputs in any format that makes sense. However, the output of the function/program must be in the same format as the input
The following ungolfed example takes in two 0-indexed arrays, with the nth entry being the nth place of each number.
function addNegabinary(first, second) {
let carry = 0;
let result = [];
let place = 0;
while(place < first.length || place < second.length || carry) {
let num = (first[place] || 0) + (second[place] || 0) + carry;
let bit;
switch (num) {
case -1: bit = 1; carry = 1; break;
case 0: bit = 0; carry = 0; break;
case 1: bit = 1; carry = 0; break;
case 2: bit = 0; carry = -1; break;
case 3: bit = 1; carry = -1; break;
}
result.push(bit);
place++;
}
return result;
}
Some test cases
1 + 0 = 1
1 + 1 = 110 // 1 + 1 = 2
1 + 110 = 111 // 1 + 2 = 3
10 + 1 = 11 // -2 + 1 = -1
10 + 1011 = 110101 // -2 + -9 = -11
1010101 + 1110100 = 110011001
1 comment thread