diff --git a/src/main/java/com/thealgorithms/maths/PythagoreanTriple.java b/src/main/java/com/thealgorithms/maths/PythagoreanTriple.java
index f535e9e6929b..2780b113d904 100644
--- a/src/main/java/com/thealgorithms/maths/PythagoreanTriple.java
+++ b/src/main/java/com/thealgorithms/maths/PythagoreanTriple.java
@@ -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);
+ private PythagoreanTriple() {
}
/**
- * 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 true if a, b, c satisfy the Pythagorean theorem,
- * otherwise
- * false
+ * @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;
}
}
diff --git a/src/test/java/com/thealgorithms/maths/PythagoreanTripleTest.java b/src/test/java/com/thealgorithms/maths/PythagoreanTripleTest.java
index 13ea58155dec..75219dc47b47 100644
--- a/src/test/java/com/thealgorithms/maths/PythagoreanTripleTest.java
+++ b/src/test/java/com/thealgorithms/maths/PythagoreanTripleTest.java
@@ -1,22 +1,24 @@
package com.thealgorithms.maths;
-import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
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;
public class PythagoreanTripleTest {
+ @ParameterizedTest
+ @CsvSource({"3, 4, 5, true", "6, 8, 10, true", "9, 12, 15, true", "12, 16, 20, true", "15, 20, 25, true", "18, 24, 30, true", "5, 20, 30, false", "6, 8, 100, false", "-2, -2, 2, false", "0, 0, 0, false", "5, 5, 5, false"})
+ void testIsPythagoreanTriple(int a, int b, int c, boolean expected) {
+ assertEquals(expected, PythagoreanTriple.isPythagTriple(a, b, c));
+ }
+
@Test
- public void testPythagoreanTriple() {
- assertTrue(PythagoreanTriple.isPythagTriple(3, 4, 5));
- assertTrue(PythagoreanTriple.isPythagTriple(6, 8, 10));
- assertTrue(PythagoreanTriple.isPythagTriple(9, 12, 15));
- assertTrue(PythagoreanTriple.isPythagTriple(12, 16, 20));
- assertTrue(PythagoreanTriple.isPythagTriple(15, 20, 25));
- assertTrue(PythagoreanTriple.isPythagTriple(18, 24, 30));
- assertFalse(PythagoreanTriple.isPythagTriple(5, 20, 30));
- assertFalse(PythagoreanTriple.isPythagTriple(6, 8, 100));
- assertFalse(PythagoreanTriple.isPythagTriple(-2, -2, 2));
+ void testUnorderedInputStillValid() {
+ // Should still detect Pythagorean triples regardless of argument order
+ assertTrue(PythagoreanTriple.isPythagTriple(5, 3, 4));
+ assertTrue(PythagoreanTriple.isPythagTriple(13, 12, 5));
}
}