refactor: improve PythagoreanTriple logic and add parameterized tests (#6350)

This commit is contained in:
Oleksandr Klymenko
2025-07-07 23:29:52 +02:00
committed by GitHub
parent 2f5bc8c242
commit fa2ca9db39
2 changed files with 39 additions and 30 deletions

View File

@@ -1,36 +1,43 @@
package com.thealgorithms.maths;
/**
* https://en.wikipedia.org/wiki/Pythagorean_triple
* Utility class to check if three integers form a Pythagorean triple.
* A Pythagorean triple consists of three positive integers a, b, and c,
* such that a² + b² = c².
*
* Common examples:
* - (3, 4, 5)
* - (5, 12, 13)
*
* Reference: https://en.wikipedia.org/wiki/Pythagorean_triple
*/
public final class PythagoreanTriple {
private PythagoreanTriple() {
}
public static void main(String[] args) {
assert isPythagTriple(3, 4, 5);
assert isPythagTriple(5, 12, 13);
assert isPythagTriple(6, 8, 10);
assert !isPythagTriple(10, 20, 30);
assert !isPythagTriple(6, 8, 100);
assert !isPythagTriple(-1, -1, 1);
}
/**
* Check if a,b,c are a Pythagorean Triple
* Checks whether three integers form a Pythagorean triple.
* The order of parameters does not matter.
*
* @param a x/y component length of a right triangle
* @param b y/x component length of a right triangle
* @param c hypotenuse length of a right triangle
* @return boolean <tt>true</tt> if a, b, c satisfy the Pythagorean theorem,
* otherwise
* <tt>false</tt>
* @param a one side length
* @param b another side length
* @param c another side length
* @return {@code true} if (a, b, c) can form a Pythagorean triple, otherwise {@code false}
*/
public static boolean isPythagTriple(int a, int b, int c) {
if (a <= 0 || b <= 0 || c <= 0) {
return false;
} else {
return (a * a) + (b * b) == (c * c);
}
// Sort the sides so the largest is treated as hypotenuse
int[] sides = {a, b, c};
java.util.Arrays.sort(sides);
int x = sides[0];
int y = sides[1];
int hypotenuse = sides[2];
return x * x + y * y == hypotenuse * hypotenuse;
}
}