From c929a2f55453a5ee472eb8fd5867bcd04d263763 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Wed, 16 Oct 2024 09:10:20 +0530 Subject: [PATCH 1/2] feat: Add `OneBitDifference` new algorithm with Junit tests --- .../bitmanipulation/OneBitDifference.java | 32 +++++++++++++++++++ .../bitmanipulation/OneBitDifferenceTest.java | 15 +++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/main/java/com/thealgorithms/bitmanipulation/OneBitDifference.java create mode 100644 src/test/java/com/thealgorithms/bitmanipulation/OneBitDifferenceTest.java diff --git a/src/main/java/com/thealgorithms/bitmanipulation/OneBitDifference.java b/src/main/java/com/thealgorithms/bitmanipulation/OneBitDifference.java new file mode 100644 index 000000000000..afec0188e299 --- /dev/null +++ b/src/main/java/com/thealgorithms/bitmanipulation/OneBitDifference.java @@ -0,0 +1,32 @@ +package com.thealgorithms.bitmanipulation; + +/** + * This class provides a method to detect if two integers + * differ by exactly one bit flip. + * + * Example: + * 1 (0001) and 2 (0010) differ by exactly one bit flip. + * 7 (0111) and 3 (0011) differ by exactly one bit flip. + * + * @author Hardvan + */ +public final class OneBitDifference { + private OneBitDifference() { + } + + /** + * Checks if two integers differ by exactly one bit. + * + * @param x the first integer + * @param y the second integer + * @return true if x and y differ by exactly one bit, false otherwise + */ + public static boolean differByOneBit(int x, int y) { + if (x == y) { + return false; + } + + int xor = x ^ y; + return (xor & (xor - 1)) == 0; + } +} diff --git a/src/test/java/com/thealgorithms/bitmanipulation/OneBitDifferenceTest.java b/src/test/java/com/thealgorithms/bitmanipulation/OneBitDifferenceTest.java new file mode 100644 index 000000000000..06b8d32d3406 --- /dev/null +++ b/src/test/java/com/thealgorithms/bitmanipulation/OneBitDifferenceTest.java @@ -0,0 +1,15 @@ +package com.thealgorithms.bitmanipulation; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +public class OneBitDifferenceTest { + + @ParameterizedTest + @CsvSource({"7, 5, true", "3, 2, true", "10, 8, true", "15, 15, false", "4, 1, false"}) + void testDifferByOneBit(int x, int y, boolean expected) { + assertEquals(expected, OneBitDifference.differByOneBit(x, y)); + } +} From 1ac94463de52f5a67c31ff762003bbc175c6ef25 Mon Sep 17 00:00:00 2001 From: Hardvan Date: Wed, 16 Oct 2024 03:40:34 +0000 Subject: [PATCH 2/2] Update directory --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 6429757179e9..4db64274fe31 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -42,6 +42,7 @@ * [NonRepeatingNumberFinder](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/NonRepeatingNumberFinder.java) * [NumberAppearingOddTimes](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimes.java) * [NumbersDifferentSigns](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/NumbersDifferentSigns.java) + * [OneBitDifference](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/OneBitDifference.java) * [OnesComplement](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/OnesComplement.java) * [ParityCheck](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/ParityCheck.java) * [ReverseBits](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/ReverseBits.java) @@ -705,6 +706,7 @@ * [NonRepeatingNumberFinderTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/NonRepeatingNumberFinderTest.java) * [NumberAppearingOddTimesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimesTest.java) * [NumbersDifferentSignsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/NumbersDifferentSignsTest.java) + * [OneBitDifferenceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/OneBitDifferenceTest.java) * [OnesComplementTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/OnesComplementTest.java) * [ParityCheckTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/ParityCheckTest.java) * [ReverseBitsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/ReverseBitsTest.java)