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.py b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_alt.py new file mode 100644 index 00000000..9d95aa01 --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_alt.py @@ -0,0 +1,7 @@ +# pylint: disable=line-too-long +# @link Problem definition [[docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.md]] # noqa +# @see Solution Notes: [[docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md]] # noqa +# pylint: enable=line-too-long + +def flippingBitsAlt(number: int) -> int: + return ~number & 0xFFFFFFFF diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py index 084eb06b..f2c0ed7c 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py @@ -3,6 +3,7 @@ from ....lib.loader import loadTestCases from .flipping_bits import flippingBits +from .flipping_bits_alt import flippingBitsAlt FILE_PATH = str(Path(__file__).resolve().parent) @@ -22,3 +23,8 @@ def test_flipping_bits(self): flippingBits(_tt['input']), _tt['answer'], f"{_} | flippingBits({_tt['input']}) must be " f"=> {_tt['answer']}") + + self.assertEqual( + flippingBitsAlt(_tt['input']), _tt['answer'], + f"{_} | flippingBitsAlt({_tt['input']}) must be " + f"=> {_tt['answer']}")