Bit Calculator

SungJunEun·2021년 10월 30일
0

Codewars 문제풀이

목록 보기
2/26
post-thumbnail

Description:

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


My Solution:

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;
}

Best Solutions:

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이면 끝난다.

profile
블록체인 개발자(진)

0개의 댓글