From ae0e79910af2eecd499f1f52c39e532ad734a344 Mon Sep 17 00:00:00 2001 From: SilverDragonOfR Date: Tue, 10 Oct 2023 04:50:45 +0530 Subject: [PATCH 1/3] feat: add automorphic number and tests --- Maths/AutomorphicNumber.js | 39 ++++++++++++++++++++++++++++ Maths/test/AutomorphicNumber.test.js | 34 ++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 Maths/AutomorphicNumber.js create mode 100644 Maths/test/AutomorphicNumber.test.js diff --git a/Maths/AutomorphicNumber.js b/Maths/AutomorphicNumber.js new file mode 100644 index 0000000000..1b4fd575eb --- /dev/null +++ b/Maths/AutomorphicNumber.js @@ -0,0 +1,39 @@ +/** + * @function isAutomorphic + * @author [SilverDragonOfR] (https://github.com/SilverDragonOfR) + * + * @see [Automorphic] (https://en.wikipedia.org/wiki/Automorphic_number) + * @description This script will check whether a number is Automorphic or not + * @description A number n is said to be a Automorphic number if the square of n ends in the same digits as n itself. + * + * @param {Integer} n - the n for nth Catalan Number + * @return {Integer} - the nth Catalan Number + * @complexity Time: O(log10(n)) , Space: O(1) + * + * @convention We define Automorphic only for whole number integers. For negetive integer we return False. For float or String we show error. + * @examples 0, 1, 5, 6, 25, 76, 376, 625, 9376 are some Automorphic numbers + */ + +// n is the number to be checked +export const isAutomorphic = (n) => { + if (typeof n !== 'number') { + throw new Error('Type of n must be number') + } + if (!Number.isInteger(n)) { + throw new Error('n cannot be a floating point number') + } + if (n < 0) { + return false + } + + // now n is a whole number integer >= 0 + let n_sq = n * n + while (n > 0) { + if (n % 10 !== n_sq % 10) { + return false + } + n = Math.floor(n / 10) + n_sq = Math.floor(n_sq / 10) + } + return true +} diff --git a/Maths/test/AutomorphicNumber.test.js b/Maths/test/AutomorphicNumber.test.js new file mode 100644 index 0000000000..bb4d48be0a --- /dev/null +++ b/Maths/test/AutomorphicNumber.test.js @@ -0,0 +1,34 @@ +import { isAutomorphic } from '../AutomorphicNumber' + +describe('AutomorphicNumber', () => { + it('should throw Error when n is String', () => { + expect(() => isAutomorphic('qwerty')).toThrow() + }) + it('should throw Error when n is floating point', () => { + expect(() => isAutomorphic(13.6)).toThrow() + }) + it('should return false when n is negetive', () => { + expect(isAutomorphic(-3)).toBeFalsy() + }) + it('should return false when n is negetive', () => { + expect(isAutomorphic(-25)).toBeFalsy() + }) + it('should return false when n is 7', () => { + expect(isAutomorphic(7)).toBeFalsy() + }) + it('should return false when n is 83', () => { + expect(isAutomorphic(83)).toBeFalsy() + }) + it('should return true when n is 0', () => { + expect(isAutomorphic(0)).toBeTruthy() + }) + it('should return true when n is 1', () => { + expect(isAutomorphic(1)).toBeTruthy() + }) + it('should return true when n is 376', () => { + expect(isAutomorphic(376)).toBeTruthy() + }) + it('should return true when n is 90625', () => { + expect(isAutomorphic(90625)).toBeTruthy() + }) +}) From 392705e93267337ae30caf2f2aafce4611866aa2 Mon Sep 17 00:00:00 2001 From: SilverDragonOfR Date: Tue, 10 Oct 2023 04:53:45 +0530 Subject: [PATCH 2/3] fix: add spaces --- Maths/AutomorphicNumber.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Maths/AutomorphicNumber.js b/Maths/AutomorphicNumber.js index 1b4fd575eb..d1b6608316 100644 --- a/Maths/AutomorphicNumber.js +++ b/Maths/AutomorphicNumber.js @@ -35,5 +35,6 @@ export const isAutomorphic = (n) => { n = Math.floor(n / 10) n_sq = Math.floor(n_sq / 10) } + return true } From ffaffb0d16d121fdb6914a4b623378bb5cebfe3e Mon Sep 17 00:00:00 2001 From: SilverDragonOfR Date: Wed, 11 Oct 2023 10:14:02 +0530 Subject: [PATCH 3/3] fix: merge tests with test.each --- Maths/test/AutomorphicNumber.test.js | 38 ++++++++++++---------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/Maths/test/AutomorphicNumber.test.js b/Maths/test/AutomorphicNumber.test.js index bb4d48be0a..19b963388c 100644 --- a/Maths/test/AutomorphicNumber.test.js +++ b/Maths/test/AutomorphicNumber.test.js @@ -7,28 +7,22 @@ describe('AutomorphicNumber', () => { it('should throw Error when n is floating point', () => { expect(() => isAutomorphic(13.6)).toThrow() }) - it('should return false when n is negetive', () => { - expect(isAutomorphic(-3)).toBeFalsy() - }) - it('should return false when n is negetive', () => { - expect(isAutomorphic(-25)).toBeFalsy() - }) - it('should return false when n is 7', () => { - expect(isAutomorphic(7)).toBeFalsy() - }) - it('should return false when n is 83', () => { - expect(isAutomorphic(83)).toBeFalsy() - }) - it('should return true when n is 0', () => { - expect(isAutomorphic(0)).toBeTruthy() - }) - it('should return true when n is 1', () => { - expect(isAutomorphic(1)).toBeTruthy() - }) - it('should return true when n is 376', () => { - expect(isAutomorphic(376)).toBeTruthy() + + test.each([ + { n: -3 , expected: false }, + { n: -25 , expected: false }, + ])('should return false when n is negetive', ({ n, expected }) => { + expect(isAutomorphic(n)).toBe(false) }) - it('should return true when n is 90625', () => { - expect(isAutomorphic(90625)).toBeTruthy() + + test.each([ + { n: 7 , expected: false }, + { n: 83 , expected: false }, + { n: 0 , expected: true }, + { n: 1 , expected: true }, + { n: 376 , expected: true }, + { n: 90625 , expected: true }, + ])('should return $expected when n is $n', ({ n, expected }) => { + expect(isAutomorphic(n)).toBe(expected) }) })