Content-Length: 5362 | pFad | http://github.com/TheAlgorithms/JavaScript/pull/1642.patch
thub.com
From 468db9a9248129567f8d5919a200d1d11ddc7216 Mon Sep 17 00:00:00 2001
From: Piotr Idzik
Date: Fri, 15 Mar 2024 19:45:56 +0000
Subject: [PATCH 1/2] feat: remove duplicated `gcd`-like functions
---
Maths/GetEuclidGCD.js | 26 +++++++++++++++++---
Maths/test/GetEuclidGCD.test.js | 43 ++++++++++++++++++---------------
Recursive/EucledianGCD.js | 30 -----------------------
3 files changed, 46 insertions(+), 53 deletions(-)
delete mode 100644 Recursive/EucledianGCD.js
diff --git a/Maths/GetEuclidGCD.js b/Maths/GetEuclidGCD.js
index 31eeab42ec..42a30a6042 100644
--- a/Maths/GetEuclidGCD.js
+++ b/Maths/GetEuclidGCD.js
@@ -1,3 +1,9 @@
+function CheckInput(a, b) {
+ if (typeof a !== 'number' || typeof b !== 'number') {
+ throw new TypeError('Arguments must be numbers')
+ }
+}
+
/**
* GetEuclidGCD Euclidean algorithm to determine the GCD of two numbers
* @param {Number} a integer (may be negative)
@@ -5,9 +11,7 @@
* @returns {Number} Greatest Common Divisor gcd(a, b)
*/
export function GetEuclidGCD(a, b) {
- if (typeof a !== 'number' || typeof b !== 'number') {
- throw new TypeError('Arguments must be numbers')
- }
+ CheckInput(a, b)
a = Math.abs(a)
b = Math.abs(b)
while (b !== 0) {
@@ -17,3 +21,19 @@ export function GetEuclidGCD(a, b) {
}
return a
}
+
+/**
+ * Recursive version of GetEuclidGCD
+ * @param {Number} a integer (may be negative)
+ * @param {Number} b integer (may be negative)
+ * @returns {Number} Greatest Common Divisor gcd(a, b)
+ */
+export function GetEuclidGCDRecursive(a, b) {
+ CheckInput(a, b)
+ a = Math.abs(a)
+ b = Math.abs(b)
+ if (b == 0) {
+ return a
+ }
+ return GetEuclidGCDRecursive(b, a % b)
+}
diff --git a/Maths/test/GetEuclidGCD.test.js b/Maths/test/GetEuclidGCD.test.js
index a6c7cb22e6..070a8479e3 100644
--- a/Maths/test/GetEuclidGCD.test.js
+++ b/Maths/test/GetEuclidGCD.test.js
@@ -1,22 +1,25 @@
-import { GetEuclidGCD } from '../GetEuclidGCD'
+import { GetEuclidGCD, GetEuclidGCDRecursive } from '../GetEuclidGCD'
-describe('GetEuclidGCD', () => {
- it.each([
- [5, 20, 5],
- [109, 902, 1],
- [290, 780, 10],
- [104, 156, 52],
- [0, 100, 100],
- [-5, 50, 5],
- [0, 0, 0],
- [1, 1234567, 1]
- ])('returns correct result for %i and %j', (inputA, inputB, expected) => {
- expect(GetEuclidGCD(inputA, inputB)).toBe(expected)
- expect(GetEuclidGCD(inputB, inputA)).toBe(expected)
- })
+describe.each([GetEuclidGCD, GetEuclidGCDRecursive])(
+ '%# GetEuclidGCD',
+ (gcdFunction) => {
+ it.each([
+ [5, 20, 5],
+ [109, 902, 1],
+ [290, 780, 10],
+ [104, 156, 52],
+ [0, 100, 100],
+ [-5, 50, 5],
+ [0, 0, 0],
+ [1, 1234567, 1]
+ ])('returns correct result for %i and %j', (inputA, inputB, expected) => {
+ expect(gcdFunction(inputA, inputB)).toBe(expected)
+ expect(gcdFunction(inputB, inputA)).toBe(expected)
+ })
- it('should throw when any of the inputs is not a number', () => {
- expect(() => GetEuclidGCD('1', 2)).toThrowError()
- expect(() => GetEuclidGCD(1, '2')).toThrowError()
- })
-})
+ it('should throw when any of the inputs is not a number', () => {
+ expect(() => gcdFunction('1', 2)).toThrowError()
+ expect(() => gcdFunction(1, '2')).toThrowError()
+ })
+ }
+)
diff --git a/Recursive/EucledianGCD.js b/Recursive/EucledianGCD.js
deleted file mode 100644
index e0cc15ed56..0000000000
--- a/Recursive/EucledianGCD.js
+++ /dev/null
@@ -1,30 +0,0 @@
-function euclideanGCDRecursive(first, second) {
- /*
- Calculates GCD of two numbers using Euclidean Recursive Algorithm
- :param first: First number
- :param second: Second number
- :return: GCD of the numbers
- */
- if (second === 0) {
- return first
- } else {
- return euclideanGCDRecursive(second, first % second)
- }
-}
-
-function euclideanGCDIterative(first, second) {
- /*
- Calculates GCD of two numbers using Euclidean Iterative Algorithm
- :param first: First number
- :param second: Second number
- :return: GCD of the numbers
- */
- while (second !== 0) {
- const temp = second
- second = first % second
- first = temp
- }
- return first
-}
-
-export { euclideanGCDIterative, euclideanGCDRecursive }
From a2b97bb4cc18e6955c7a8050b939e67ad39ea582 Mon Sep 17 00:00:00 2001
From: vil02
Date: Fri, 15 Mar 2024 19:53:29 +0000
Subject: [PATCH 2/2] Updated Documentation in README.md
---
DIRECTORY.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/DIRECTORY.md b/DIRECTORY.md
index 8b51ce3bf7..59f6273bf2 100644
--- a/DIRECTORY.md
+++ b/DIRECTORY.md
@@ -260,7 +260,6 @@
* [SquareRootLogarithmic](Maths/SquareRootLogarithmic.js)
* [SumOfDigits](Maths/SumOfDigits.js)
* [SumOfGeometricProgression](Maths/SumOfGeometricProgression.js)
- * [TwinPrime](Maths/TwinPrime.js)
* [TwoSum](Maths/TwoSum.js)
* [Volume](Maths/Volume.js)
* [WhileLoopFactorial](Maths/WhileLoopFactorial.js)
@@ -296,7 +295,6 @@
* **Recursive**
* [BinaryEquivalent](Recursive/BinaryEquivalent.js)
* [BinarySearch](Recursive/BinarySearch.js)
- * [EucledianGCD](Recursive/EucledianGCD.js)
* [Factorial](Recursive/Factorial.js)
* [FibonacciNumberRecursive](Recursive/FibonacciNumberRecursive.js)
* [FloodFill](Recursive/FloodFill.js)
--- a PPN by Garber Painting Akron. With Image Size Reduction included!Fetched URL: http://github.com/TheAlgorithms/JavaScript/pull/1642.patch
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy