From e0883facdb782af176e4897efe043563cabc0eb8 Mon Sep 17 00:00:00 2001 From: Yosapol Jitrak Date: Fri, 16 Oct 2020 16:31:40 +0700 Subject: [PATCH 1/4] Refactor Maths/Factorial for more minimal side effects. --- Maths/Factorial.js | 32 ++++++++++---------------------- Maths/test/Factorial.test.js | 3 --- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/Maths/Factorial.js b/Maths/Factorial.js index 04d9ef08c..80daa168b 100644 --- a/Maths/Factorial.js +++ b/Maths/Factorial.js @@ -14,36 +14,24 @@ 'use strict' const calcRange = (num) => { - // Generate a range of numbers from 1 to `num`. - let i = 1 - const range = [] - while (i <= num) { - range.push(i) - i += 1 - } - return range + return [...Array(num).keys()].map(i => i + 1); } const calcFactorial = (num) => { - let factorial - const range = calcRange(num) - // Check if the number is negative, positive, null, undefined, or zero - if (num < 0) { - return 'Sorry, factorial does not exist for negative numbers.' - } - if (num === null || num === undefined) { - return 'Sorry, factorial does not exist for null or undefined numbers.' + if (num > 0) { + const range = calcRange(num) + const factorial = range.reduce((a, c) => a * c, 1); + return `The factorial of ${num} is ${factorial}` } if (num === 0) { return 'The factorial of 0 is 1.' } - if (num > 0) { - factorial = 1 - range.forEach(function (i) { - factorial = factorial * i - }) - return `The factorial of ${num} is ${factorial}` + if (num < 0) { + return 'Sorry, factorial does not exist for negative numbers.' + } + if (!num) { + return 'Sorry, factorial does not exist for null or undefined numbers.' } } diff --git a/Maths/test/Factorial.test.js b/Maths/test/Factorial.test.js index bd22ad436..31c6cee39 100644 --- a/Maths/test/Factorial.test.js +++ b/Maths/test/Factorial.test.js @@ -1,9 +1,6 @@ import { calcFactorial } from '../Factorial' describe('calcFactorial', () => { - it('is a function', () => { - expect(typeof calcFactorial).toEqual('function') - }) it('should return a statement for value "0"', () => { expect(calcFactorial(0)).toBe('The factorial of 0 is 1.') From 301a8dd19ae695e2e072c119c63b32e3c884f671 Mon Sep 17 00:00:00 2001 From: Yosapol Jitrak Date: Fri, 16 Oct 2020 16:35:42 +0700 Subject: [PATCH 2/4] Fix Extra semicolon and Block must not be padded by blank lines. --- Maths/Factorial.js | 4 ++-- Maths/test/Factorial.test.js | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Maths/Factorial.js b/Maths/Factorial.js index 80daa168b..327ea316b 100644 --- a/Maths/Factorial.js +++ b/Maths/Factorial.js @@ -14,14 +14,14 @@ 'use strict' const calcRange = (num) => { - return [...Array(num).keys()].map(i => i + 1); + return [...Array(num).keys()].map(i => i + 1) } const calcFactorial = (num) => { if (num > 0) { const range = calcRange(num) - const factorial = range.reduce((a, c) => a * c, 1); + const factorial = range.reduce((a, c) => a * c, 1) return `The factorial of ${num} is ${factorial}` } if (num === 0) { diff --git a/Maths/test/Factorial.test.js b/Maths/test/Factorial.test.js index 31c6cee39..a06519477 100644 --- a/Maths/test/Factorial.test.js +++ b/Maths/test/Factorial.test.js @@ -1,7 +1,6 @@ import { calcFactorial } from '../Factorial' describe('calcFactorial', () => { - it('should return a statement for value "0"', () => { expect(calcFactorial(0)).toBe('The factorial of 0 is 1.') }) From 57e20c551c294dc3cadadd473c1b188770e566c0 Mon Sep 17 00:00:00 2001 From: Yosapol Jitrak Date: Fri, 16 Oct 2020 16:38:34 +0700 Subject: [PATCH 3/4] Fix Block must not be padded by blank lines. --- Maths/Factorial.js | 1 - 1 file changed, 1 deletion(-) diff --git a/Maths/Factorial.js b/Maths/Factorial.js index 327ea316b..c3a0162e4 100644 --- a/Maths/Factorial.js +++ b/Maths/Factorial.js @@ -18,7 +18,6 @@ const calcRange = (num) => { } const calcFactorial = (num) => { - if (num > 0) { const range = calcRange(num) const factorial = range.reduce((a, c) => a * c, 1) From 285d2b08da905496e9fe9c2f31fd3d8501d6893b Mon Sep 17 00:00:00 2001 From: Ejiah Date: Fri, 22 Jan 2021 12:44:52 +0700 Subject: [PATCH 4/4] Move the (num > 0) if condition to the end --- Maths/Factorial.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Maths/Factorial.js b/Maths/Factorial.js index c3a0162e4..29b416a67 100644 --- a/Maths/Factorial.js +++ b/Maths/Factorial.js @@ -18,11 +18,6 @@ const calcRange = (num) => { } const calcFactorial = (num) => { - if (num > 0) { - const range = calcRange(num) - const factorial = range.reduce((a, c) => a * c, 1) - return `The factorial of ${num} is ${factorial}` - } if (num === 0) { return 'The factorial of 0 is 1.' } @@ -32,6 +27,11 @@ const calcFactorial = (num) => { if (!num) { return 'Sorry, factorial does not exist for null or undefined numbers.' } + if (num > 0) { + const range = calcRange(num) + const factorial = range.reduce((a, c) => a * c, 1) + return `The factorial of ${num} is ${factorial}` + } } export { calcFactorial }