From de6e44580c3312724d6276907d2d662580fc9939 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Mon, 21 Jul 2025 20:18:55 -0400 Subject: [PATCH] =?UTF-8?q?[Hacker=20Rank]=20Interview=20Preparation=20Kit?= =?UTF-8?q?:=20Miscellaneous:=20Flipping=20bits.=20New=20way=20to=20solve?= =?UTF-8?q?=20=E2=9C=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flipping-bits-alt-solution-notes.md | 14 +++++++++ .../miscellaneous/flipping-bits-alt.js | 12 +++++++ .../miscellaneous/flipping-bits-alt.test.js | 31 +++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md create mode 100644 src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.js create mode 100644 src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.test.js 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); + }); +});