In this kata your task is to create bit calculator. Function arguments are two bit representation of numbers ("101","1","10"...), and you must return their sum in decimal representation.
Test.expect(calculate("10","10") == 4);
Test.expect(calculate("10","0") == 2);
Test.expect(calculate("101","10") == 7);
parseInt and some Math functions are disabled.
Those Math functions are enabled: pow,round,random
function calculate(num1,num2){
let i = 0;
let counter = 0;
// get the ith digit
function digit(x, i) {
return x[x.length-i-1];
}
while(true) {
let XOR = digit(num1, i) ^ digit(num2, i);
let AND = digit(num1, i) & digit(num2, i);
// add for each cases
if((XOR == 0) && (AND == 1)) {
counter += Math.pow(2,i+1);
}
else if(XOR == 1 && (AND == 0)) {
counter += Math.pow(2,i);
}
// stop condition
if((i+1 >= num1.length) && ( i+1 >= num2.length )) {
break;
}
i++;
}
return counter;
}
function binToTen(num) {
return num.split('')
.reverse()
.reduce(function(acc, curr, index)
{return acc + Math.pow(2, index) * curr}, 0);
}
function calculate(num1, num2) {
return binToTen(num1) + binToTen(num2);
}
str.split(separator,limit)
주어진 separator를 기준으로 str을 나누어 배열에 저장한다. 문자열에 separator가 등장하면 해당 부분은 삭제된다. separator가 빈 문자열인 경우 str은 문자열의 모든 문자를 원소로 가지는 배열로 변환한다. limit은 끊어진 문자열의 최대 개수를 나타낸다.
array.reduce(acc, curr, index)
initialValue가 0으로 주어졌으므로, acc는 0, curr는 가장 마지막 자리 숫자로, index는 0으로 시작한다. acc에 계속 값이 누적된다.
function calculate(num1,num2){
return binaryToDecimal(num1)+binaryToDecimal(num2);
}
function binaryToDecimal(b){
var arr = b.split('');
var d = 0;
for (var i = arr.length, j = 0; i > 0; i--, j++){
if (arr[i-1] == 1){d += Math.pow(2, j)}
}
return d;
}
for(initialExpression; conditionExpression; incrementExpression)
conditionExpression이 false이면 끝난다.