From 4dff3524b36168ee72c7a944a06b09e6efdb552f Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Mon, 21 Jul 2025 15:41:10 -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.test.ts | 31 +++++++++++++++++++ .../miscellaneous/flipping-bits-alt.ts | 12 +++++++ 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.test.ts create mode 100644 src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.ts 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.test.ts b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.test.ts new file mode 100644 index 00000000..1c129f15 --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, it } from '@jest/globals'; +import { logger as console } from '../../../logger'; + +import { flippingBitsAlt } from './flipping-bits-alt'; + +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); + }); +}); diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.ts b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.ts new file mode 100644 index 00000000..dd55c849 --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt.ts @@ -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: number): number { + // eslint-disable-next-line no-bitwise + return ~n >>> 0; +} + +export default { flippingBitsAlt }; +export { flippingBitsAlt };