refactor: cleanup DudeneyNumber (#5156)

This commit is contained in:
Piotr Idzik 2024-05-12 11:05:33 +02:00 committed by GitHub
parent cf6c87c35c
commit 319d5143cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 23 additions and 24 deletions

View File

@ -41,7 +41,6 @@ com.thealgorithms.dynamicprogramming.WineProblem=UselessParentheses
com.thealgorithms.maths.BinomialCoefficient=UselessParentheses com.thealgorithms.maths.BinomialCoefficient=UselessParentheses
com.thealgorithms.maths.Complex=UselessParentheses com.thealgorithms.maths.Complex=UselessParentheses
com.thealgorithms.maths.DistanceFormulaTest=UnnecessaryFullyQualifiedName com.thealgorithms.maths.DistanceFormulaTest=UnnecessaryFullyQualifiedName
com.thealgorithms.maths.DudeneyNumber=UselessParentheses
com.thealgorithms.maths.FibonacciJavaStreamsTest=BigIntegerInstantiation com.thealgorithms.maths.FibonacciJavaStreamsTest=BigIntegerInstantiation
com.thealgorithms.maths.Gaussian=UselessParentheses com.thealgorithms.maths.Gaussian=UselessParentheses
com.thealgorithms.maths.GcdSolutionWrapper=UselessParentheses com.thealgorithms.maths.GcdSolutionWrapper=UselessParentheses

View File

@ -11,28 +11,18 @@ public final class DudeneyNumber {
} }
// returns True if the number is a Dudeney number and False if it is not a Dudeney number. // returns True if the number is a Dudeney number and False if it is not a Dudeney number.
public static boolean isDudeney(int n) { public static boolean isDudeney(final int n) {
if (n <= 0) {
throw new IllegalArgumentException("Input must me positive.");
}
// Calculating Cube Root // Calculating Cube Root
int cube_root = (int) (Math.round((Math.pow(n, 1.0 / 3.0)))); final int cube_root = (int) Math.round(Math.pow(n, 1.0 / 3.0));
// If the number is not a perfect cube the method returns false. // If the number is not a perfect cube the method returns false.
if (cube_root * cube_root * cube_root != n) { if (cube_root * cube_root * cube_root != n) {
return false; return false;
} }
int sum_of_digits = 0; // Stores the sums of the digits of the entered number
int temp = n; // A temporary variable to store the entered number
// Loop to calculate the sum of the digits.
while (temp > 0) {
// Extracting the Last digit of the number
int rem = temp % 10;
// Calculating the sum of digits.
sum_of_digits += rem;
// Removing the last digit
temp /= 10;
}
// If the cube root of the number is not equal to the sum of its digits, we return false. // If the cube root of the number is not equal to the sum of its digits, we return false.
return cube_root == sum_of_digits; return cube_root == SumOfDigits.sumOfDigits(n);
} }
} }

View File

@ -1,18 +1,28 @@
package com.thealgorithms.maths; package com.thealgorithms.maths;
import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
class DudeneyNumberTest { class DudeneyNumberTest {
@ParameterizedTest
@CsvSource({"1", "512", "4913", "5832", "17576", "19683"})
void positiveDudeneyBase10Power3(final int n) {
assertTrue(DudeneyNumber.isDudeney(n));
}
@Test @ParameterizedTest
void isDudeney() { @CsvSource({"2", "19", "21", "125", "27", "343", "729", "19682", "19684"})
final int validDudeneyNumber = 512; void negativeDudeneyBase10Power3(final int n) {
final int invalidDudeneyNumber = 125; assertFalse(DudeneyNumber.isDudeney(n));
}
assertTrue(() -> DudeneyNumber.isDudeney(validDudeneyNumber)); @ParameterizedTest
assertFalse(() -> DudeneyNumber.isDudeney(invalidDudeneyNumber)); @CsvSource({"0", "-1"})
void throwsInputLessThanOne(final int n) {
assertThrows(IllegalArgumentException.class, () -> DudeneyNumber.isDudeney(n));
} }
} }