diff --git a/docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md b/docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md new file mode 100644 index 00000000..804ef5a4 --- /dev/null +++ b/docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md @@ -0,0 +1,14 @@ +# [Miscellaneous: Flipping bits](https://www.hackerrank.com/challenges/flipping-bits) + +- Difficulty: `#easy` +- Category: `#ProblemSolvingBasic` `#BitManipulation` + +## Using bitwise operations + +The bitwise NOT operator (~) flips all bits of the number. + +The & 0xFFFFFFFF ensures that we only keep the last 32 bits, +effectively simulating a 32-bit unsigned integer. + +This is a more efficient and concise way to achieve the same result +as the original code, without needing to convert to binary strings. diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.js b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.js new file mode 100644 index 00000000..5a9f46de --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.js @@ -0,0 +1,12 @@ +/** + * @link Problem definition [[docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.md]] + * @see Solution notes [[docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md]] + */ + +function flippingBitsAlt(n) { + // eslint-disable-next-line no-bitwise + return ~n >>> 0; +} + +export default { flippingBitsAlt }; +export { flippingBitsAlt }; diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.test.js b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.test.js new file mode 100644 index 00000000..1e6e2868 --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.test.js @@ -0,0 +1,31 @@ +import { describe, expect, it } from '@jest/globals'; +import { logger as console } from '../../../logger.js'; + +import { flippingBitsAlt } from './flipping-bits-alt.js'; + +import TEST_CASES from './flipping-bits.testcases.json'; + +describe('flipping bits', () => { + it('flipping bits test cases', () => { + expect.assertions(10); + + let totalTestsCount = 0; + + TEST_CASES.forEach((testSet) => { + testSet.tests.forEach((test) => { + const answer = flippingBitsAlt(test.input); + + console.debug( + `flippingBitsAlt(${test.input}) solution found: ${answer}` + ); + + expect(answer).toStrictEqual(test.expected); + + totalTestsCount += 1; + }); + }); + + expect(TEST_CASES).toHaveLength(3); + expect(totalTestsCount).toBe(8); + }); +});