Back to all solutions

#3094 - Guess the Number Using Bitwise Questions II

Problem Description

There is a number n between 0 and 230 - 1 (both inclusive) that you have to find.

There is a pre-defined API int commonBits(int num) that helps you with your mission.

But here is the challenge, every time you call this function, n changes in some way.

But keep in mind, that you have to find the initial value of n.

commonBits(int num) acts as follows:

  • Calculate count which is the number of bits where both n and num have the same value in that position of their binary representation.
  • n = n XOR num
  • Return count.

Return the number n.

Note: In this world, all numbers are between 0 and 230 - 1 (both inclusive), thus for counting common bits, we see only the first 30 bits of those numbers.

Solution

/**
 * Definition of commonBits API.
 * @param {number} num
 * @return {integer}
 * var commonBits = function(num) {}
 */
/**
 * @return {number}
 */
var findNumber = function() {
  let result = 0;

  for (let bitMask = 1; bitMask < 1073741824; bitMask <<= 1) {
    if (commonBits(bitMask) > commonBits(bitMask)) {
      result |= bitMask;
    }
  }

  return result;
};