From 521a9368ef0807aa67d06b05429758ccd92bd64e Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Mon, 21 Jul 2025 01:17:25 -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 --- .../FlippingBitsAlternative.java | 19 ++++++ .../FlippingBitsTestAlternativeTest.java | 61 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 algorithm-exercises-java/src/main/java/ae/hackerrank/interview_preparation_kit/miscellaneous/FlippingBitsAlternative.java create mode 100644 algorithm-exercises-java/src/test/java/ae/hackerrank/interview_preparation_kit/miscellaneous/FlippingBitsTestAlternativeTest.java diff --git a/algorithm-exercises-java/src/main/java/ae/hackerrank/interview_preparation_kit/miscellaneous/FlippingBitsAlternative.java b/algorithm-exercises-java/src/main/java/ae/hackerrank/interview_preparation_kit/miscellaneous/FlippingBitsAlternative.java new file mode 100644 index 00000000..3d64fbe3 --- /dev/null +++ b/algorithm-exercises-java/src/main/java/ae/hackerrank/interview_preparation_kit/miscellaneous/FlippingBitsAlternative.java @@ -0,0 +1,19 @@ +package ae.hackerrank.interview_preparation_kit.miscellaneous; + +/** + * AngryFlorist. + * + * @link Problem definition + * [[docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.md]] + */ +public class FlippingBitsAlternative { + + private FlippingBitsAlternative() {} + + /** + * flippingBits. + */ + public static long flippingBits(long n) { + return ~n & 0xFFFFFFFFL; // Use bitwise NOT and mask to ensure 32-bit unsigned result + } +} diff --git a/algorithm-exercises-java/src/test/java/ae/hackerrank/interview_preparation_kit/miscellaneous/FlippingBitsTestAlternativeTest.java b/algorithm-exercises-java/src/test/java/ae/hackerrank/interview_preparation_kit/miscellaneous/FlippingBitsTestAlternativeTest.java new file mode 100644 index 00000000..3fb27f17 --- /dev/null +++ b/algorithm-exercises-java/src/test/java/ae/hackerrank/interview_preparation_kit/miscellaneous/FlippingBitsTestAlternativeTest.java @@ -0,0 +1,61 @@ +package ae.hackerrank.interview_preparation_kit.miscellaneous; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.util.List; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; +import util.JsonLoader; + +/** + * FlippingBitsTflippingBits. + */ +@TestInstance(Lifecycle.PER_CLASS) +class FlippingBitsTestAlternativeTest { + /** + * FlippingBitsTestAlternativeTestCaseTest. + */ + public static class FlippingBitsTestAlternativeTestCaseTest { + public long input; + public long answer; + } + + /** + * FlippingBitsTestAlternativeTestCase. + */ + public static class FlippingBitsTestAlternativeTestCase { + public String title; + public List tests; + } + + private List testCases; + + @BeforeAll + void setup() throws IOException { + String path = String.join("/", + "hackerrank", + "interview_preparation_kit", + "miscellaneous", + "flipping_bits.testcases.json"); + + this.testCases = JsonLoader.loadJson(path, FlippingBitsTestAlternativeTestCase.class); + } + + @Test + void testLuckBalance() { + for (FlippingBitsTestAlternativeTestCase tests : testCases) { + for (FlippingBitsTestAlternativeTestCaseTest test : tests.tests) { + Long result = FlippingBitsAlternative.flippingBits(test.input); + + assertEquals(test.answer, result, + "%s(%s) => must be: %d".formatted( + "FlippingBits.flippingBits", + test.input, + test.answer)); + } + } + } +}