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