Skip to content

Commit 62046ff

Browse files
authored
Merge branch 'master' into power2_new_algo
2 parents 44308e7 + 4d6dd13 commit 62046ff

File tree

71 files changed

+3964
-483
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+3964
-483
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
uses: actions/setup-java@v4
1111
with:
1212
java-version: 21
13-
distribution: 'adopt'
13+
distribution: 'temurin'
1414
- name: Build with Maven
1515
run: mvn --batch-mode --update-snapshots verify
1616
- name: Upload coverage to codecov (tokenless)

.github/workflows/codeql.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
uses: actions/setup-java@v4
3131
with:
3232
java-version: 21
33-
distribution: 'adopt'
33+
distribution: 'temurin'
3434

3535
- name: Initialize CodeQL
3636
uses: github/codeql-action/init@v3

.github/workflows/infer.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
uses: actions/setup-java@v4
1919
with:
2020
java-version: 21
21-
distribution: 'adopt'
21+
distribution: 'temurin'
2222

2323
- name: Set up OCaml
2424
uses: ocaml/setup-ocaml@v3

DIRECTORY.md

Lines changed: 43 additions & 2 deletions
Large diffs are not rendered by default.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.thealgorithms.bitmanipulation;
2+
3+
/**
4+
* This class contains a method to check if the binary representation of a number is a palindrome.
5+
* <p>
6+
* A binary palindrome is a number whose binary representation is the same when read from left to right and right to left.
7+
* For example, the number 9 has a binary representation of 1001, which is a palindrome.
8+
* The number 10 has a binary representation of 1010, which is not a palindrome.
9+
* </p>
10+
*
11+
* @author Hardvan
12+
*/
13+
public final class BinaryPalindromeCheck {
14+
private BinaryPalindromeCheck() {
15+
}
16+
17+
/**
18+
* Checks if the binary representation of a number is a palindrome.
19+
*
20+
* @param x The number to check.
21+
* @return True if the binary representation is a palindrome, otherwise false.
22+
*/
23+
public static boolean isBinaryPalindrome(int x) {
24+
int reversed = reverseBits(x);
25+
return x == reversed;
26+
}
27+
28+
/**
29+
* Helper function to reverse all the bits of an integer.
30+
*
31+
* @param x The number to reverse the bits of.
32+
* @return The number with reversed bits.
33+
*/
34+
private static int reverseBits(int x) {
35+
int result = 0;
36+
while (x > 0) {
37+
result <<= 1;
38+
result |= (x & 1);
39+
x >>= 1;
40+
}
41+
return result;
42+
}
43+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.thealgorithms.bitmanipulation;
2+
3+
/**
4+
* ClearLeftmostSetBit class contains a method to clear the leftmost set bit of a number.
5+
* The leftmost set bit is the leftmost bit that is set to 1 in the binary representation of a number.
6+
*
7+
* Example:
8+
* 26 (11010) -> 10 (01010)
9+
* 1 (1) -> 0 (0)
10+
* 7 (111) -> 3 (011)
11+
* 6 (0110) -> 2 (0010)
12+
*
13+
* @author Hardvan
14+
*/
15+
public final class ClearLeftmostSetBit {
16+
private ClearLeftmostSetBit() {
17+
}
18+
19+
/**
20+
* Clears the leftmost set bit (1) of a given number.
21+
* Step 1: Find the position of the leftmost set bit
22+
* Step 2: Create a mask with all bits set except for the leftmost set bit
23+
* Step 3: Clear the leftmost set bit using AND with the mask
24+
*
25+
* @param num The input number.
26+
* @return The number after clearing the leftmost set bit.
27+
*/
28+
public static int clearLeftmostSetBit(int num) {
29+
int pos = 0;
30+
int temp = num;
31+
while (temp > 0) {
32+
temp >>= 1;
33+
pos++;
34+
}
35+
36+
int mask = ~(1 << (pos - 1));
37+
return num & mask;
38+
}
39+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.thealgorithms.bitmanipulation;
2+
3+
/**
4+
* CountLeadingZeros class contains a method to count the number of leading zeros in the binary representation of a number.
5+
* The number of leading zeros is the number of zeros before the leftmost 1 bit.
6+
* For example, the number 5 has 29 leading zeros in its 32-bit binary representation.
7+
* The number 0 has 32 leading zeros.
8+
* The number 1 has 31 leading zeros.
9+
* The number -1 has no leading zeros.
10+
*
11+
* @author Hardvan
12+
*/
13+
public final class CountLeadingZeros {
14+
private CountLeadingZeros() {
15+
}
16+
17+
/**
18+
* Counts the number of leading zeros in the binary representation of a number.
19+
* Method: Keep shifting the mask to the right until the leftmost bit is 1.
20+
* The number of shifts is the number of leading zeros.
21+
*
22+
* @param num The input number.
23+
* @return The number of leading zeros.
24+
*/
25+
public static int countLeadingZeros(int num) {
26+
if (num == 0) {
27+
return 32;
28+
}
29+
30+
int count = 0;
31+
int mask = 1 << 31;
32+
while ((mask & num) == 0) {
33+
count++;
34+
mask >>>= 1;
35+
}
36+
37+
return count;
38+
}
39+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.thealgorithms.bitmanipulation;
2+
3+
/**
4+
* Gray code is a binary numeral system where two successive values differ in only one bit.
5+
* This is a simple conversion between binary and Gray code.
6+
* Example:
7+
* 7 -> 0111 -> 0100 -> 4
8+
* 4 -> 0100 -> 0111 -> 7
9+
* 0 -> 0000 -> 0000 -> 0
10+
* 1 -> 0001 -> 0000 -> 0
11+
* 2 -> 0010 -> 0011 -> 3
12+
* 3 -> 0011 -> 0010 -> 2
13+
*
14+
* @author Hardvan
15+
*/
16+
public final class GrayCodeConversion {
17+
private GrayCodeConversion() {
18+
}
19+
20+
/**
21+
* Converts a binary number to Gray code.
22+
*
23+
* @param num The binary number.
24+
* @return The corresponding Gray code.
25+
*/
26+
public static int binaryToGray(int num) {
27+
return num ^ (num >> 1);
28+
}
29+
30+
/**
31+
* Converts a Gray code number back to binary.
32+
*
33+
* @param gray The Gray code number.
34+
* @return The corresponding binary number.
35+
*/
36+
public static int grayToBinary(int gray) {
37+
int binary = gray;
38+
while (gray > 0) {
39+
gray >>= 1;
40+
binary ^= gray;
41+
}
42+
return binary;
43+
}
44+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.thealgorithms.bitmanipulation;
2+
3+
/**
4+
* The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
5+
* Given two integers x and y, calculate the Hamming distance.
6+
* Example:
7+
* Input: x = 1, y = 4
8+
* Output: 2
9+
* Explanation: 1 (0001) and 4 (0100) have 2 differing bits.
10+
*
11+
* @author Hardvan
12+
*/
13+
public final class HammingDistance {
14+
private HammingDistance() {
15+
}
16+
17+
/**
18+
* Calculates the Hamming distance between two integers.
19+
* The Hamming distance is the number of differing bits between the two integers.
20+
*
21+
* @param x The first integer.
22+
* @param y The second integer.
23+
* @return The Hamming distance (number of differing bits).
24+
*/
25+
public static int hammingDistance(int x, int y) {
26+
int xor = x ^ y;
27+
return Integer.bitCount(xor);
28+
}
29+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.thealgorithms.ciphers;
2+
3+
/**
4+
* The Atbash cipher is a simple substitution cipher that replaces each letter
5+
* in the alphabet with its reverse.
6+
* For example, 'A' becomes 'Z', 'B' becomes 'Y', and so on. It works
7+
* identically for both uppercase and lowercase letters.
8+
* It's a symmetric cipher, meaning applying it twice returns the original text.
9+
* Hence, the encrypting and the decrypting functions are identical
10+
* @author https://github.com/Krounosity
11+
* Learn more: https://en.wikipedia.org/wiki/Atbash
12+
*/
13+
14+
public class AtbashCipher {
15+
16+
private String toConvert;
17+
18+
// Default constructor.
19+
AtbashCipher() {
20+
}
21+
22+
// String setting constructor.
23+
AtbashCipher(String str) {
24+
toConvert = str;
25+
}
26+
27+
// String getter method.
28+
public String getString() {
29+
return toConvert;
30+
}
31+
32+
// String setter method.
33+
public void setString(String str) {
34+
toConvert = str;
35+
}
36+
37+
// Checking whether the current character is capital.
38+
private boolean isCapital(char ch) {
39+
return ch >= 'A' && ch <= 'Z';
40+
}
41+
42+
// Checking whether the current character is smallcased.
43+
private boolean isSmall(char ch) {
44+
return ch >= 'a' && ch <= 'z';
45+
}
46+
47+
// Converting text to atbash cipher code or vice versa.
48+
public String convert() {
49+
50+
// Using StringBuilder to store new string.
51+
StringBuilder convertedString = new StringBuilder();
52+
53+
// Iterating for each character.
54+
for (char ch : toConvert.toCharArray()) {
55+
56+
// If the character is smallcased.
57+
if (isSmall(ch)) {
58+
convertedString.append((char) ('z' - (ch - 'a')));
59+
}
60+
// If the character is capital cased.
61+
else if (isCapital(ch)) {
62+
convertedString.append((char) ('Z' - (ch - 'A')));
63+
}
64+
// Non-alphabetical character.
65+
else {
66+
convertedString.append(ch);
67+
}
68+
}
69+
return convertedString.toString();
70+
}
71+
}

0 commit comments

Comments
 (0)