diff --git a/Dynamic-Programming/MaxProductOfThree.js b/Dynamic-Programming/MaxProductOfThree.js index 1e7ebe3e1..58e5e6362 100644 --- a/Dynamic-Programming/MaxProductOfThree.js +++ b/Dynamic-Programming/MaxProductOfThree.js @@ -5,15 +5,15 @@ * @param {number[]} arrayItems * @returns number */ -export function maxProductOfThree(arrayItems) { +export function maxProductOfThree (arrayItems) { // if size is less than 3, no triplet exists - let n = arrayItems.length + const n = arrayItems.length if (n < 3) throw new Error('Triplet cannot exist with the given array') - let max1 = arrayItems[0], - max2 = -1, - max3 = -1, - min1 = arrayItems[0], - min2 = -1 + let max1 = arrayItems[0] + let max2 = -1 + let max3 = -1 + let min1 = arrayItems[0] + let min2 = -1 for (let i = 1; i < n; i++) { if (arrayItems[i] > max1) { max3 = max2 @@ -32,7 +32,7 @@ export function maxProductOfThree(arrayItems) { min2 = arrayItems[i] } } - let prod1 = max1 * max2 * max3, - prod2 = max1 * min1 * min2 + const prod1 = max1 * max2 * max3 + const prod2 = max1 * min1 * min2 return Math.max(prod1, prod2) } diff --git a/Maths/ExtendedEuclideanGCD.js b/Maths/ExtendedEuclideanGCD.js index 9332aa623..deb0348e8 100644 --- a/Maths/ExtendedEuclideanGCD.js +++ b/Maths/ExtendedEuclideanGCD.js @@ -1,60 +1,60 @@ /** * Problem statement and explanation: https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm - * + * * This algorithm plays an important role for modular arithmetic, and by extension for cyptography algorithms - * + * * This implementation uses an iterative approach to calculate */ /** - * + * * @param {Number} arg1 first argument * @param {Number} arg2 second argument * @returns Array with GCD and first and second Bézout coefficients */ const extendedEuclideanGCD = (arg1, arg2) => { - if(typeof arg1 != 'number' || typeof arg2 != 'number') throw new TypeError('Not a Number'); - if(arg1 < 1 || arg2 < 1) throw new TypeError('Must be positive numbers'); + if (typeof arg1 !== 'number' || typeof arg2 !== 'number') throw new TypeError('Not a Number') + if (arg1 < 1 || arg2 < 1) throw new TypeError('Must be positive numbers') - // Make the order of coefficients correct, as the algorithm assumes r0 > r1 - if (arg1 < arg2) { - const res = extendedEuclideanGCD(arg2,arg1) - const temp = res[1] - res[1] = res[2] - res[2] = temp - return res; - } + // Make the order of coefficients correct, as the algorithm assumes r0 > r1 + if (arg1 < arg2) { + const res = extendedEuclideanGCD(arg2, arg1) + const temp = res[1] + res[1] = res[2] + res[2] = temp + return res + } - // At this point arg1 > arg2 + // At this point arg1 > arg2 - // Remainder values - let r0 = arg1 - let r1 = arg2 + // Remainder values + let r0 = arg1 + let r1 = arg2 - // Coefficient1 values - let s0 = 1 - let s1 = 0 + // Coefficient1 values + let s0 = 1 + let s1 = 0 - // Coefficient 2 values - let t0 = 0 - let t1 = 1 - - while(r1 != 0) { - const q = Math.floor(r0 / r1); + // Coefficient 2 values + let t0 = 0 + let t1 = 1 - const r2 = r0 - r1*q; - const s2 = s0 - s1*q; - const t2 = t0 - t1*q; - - r0 = r1 - r1 = r2 - s0 = s1 - s1 = s2 - t0 = t1 - t1 = t2 - } - return [r0,s0,t0]; + while (r1 != 0) { + const q = Math.floor(r0 / r1) + + const r2 = r0 - r1 * q + const s2 = s0 - s1 * q + const t2 = t0 - t1 * q + + r0 = r1 + r1 = r2 + s0 = s1 + s1 = s2 + t0 = t1 + t1 = t2 + } + return [r0, s0, t0] } -export { extendedEuclideanGCD }; +export { extendedEuclideanGCD } // ex diff --git a/Maths/test/ExtendedEuclideanGCD.test.js b/Maths/test/ExtendedEuclideanGCD.test.js index 0164fac20..28acf151c 100644 --- a/Maths/test/ExtendedEuclideanGCD.test.js +++ b/Maths/test/ExtendedEuclideanGCD.test.js @@ -6,11 +6,11 @@ describe('extendedEuclideanGCD', () => { expect(extendedEuclideanGCD(46, 240)).toMatchObject([2, 47, -9]) }) it('should give error on non-positive arguments', () => { - expect(() => extendedEuclideanGCD(0,240)).toThrowError(new TypeError('Must be positive numbers')) - expect(() => extendedEuclideanGCD(46,-240)).toThrowError(new TypeError('Must be positive numbers')) + expect(() => extendedEuclideanGCD(0, 240)).toThrowError(new TypeError('Must be positive numbers')) + expect(() => extendedEuclideanGCD(46, -240)).toThrowError(new TypeError('Must be positive numbers')) }) it('should give error on non-numeric arguments', () => { - expect(() => extendedEuclideanGCD('240',46)).toThrowError(new TypeError('Not a Number')); - expect(() => extendedEuclideanGCD([240,46])).toThrowError(new TypeError('Not a Number')); + expect(() => extendedEuclideanGCD('240', 46)).toThrowError(new TypeError('Not a Number')) + expect(() => extendedEuclideanGCD([240, 46])).toThrowError(new TypeError('Not a Number')) }) })