From 410009157d66a058bead4590ddd50c0c6c06ab7d Mon Sep 17 00:00:00 2001 From: Pratik Tripathy <117454569+SilverDragonOfR@users.noreply.github.com> Date: Fri, 13 Oct 2023 00:23:40 +0530 Subject: [PATCH] feat: add Automorphic Numbers and tests in Math (#1496) * feat: add automorphic number and tests * fix: add spaces * fix: merge tests with test.each --- Maths/AutomorphicNumber.js | 40 ++++++++++++++++++++++++++++ Maths/test/AutomorphicNumber.test.js | 28 +++++++++++++++++++ 2 files changed, 68 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 000000000..d1b660831 --- /dev/null +++ b/Maths/AutomorphicNumber.js @@ -0,0 +1,40 @@ +/** + * @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 000000000..19b963388 --- /dev/null +++ b/Maths/test/AutomorphicNumber.test.js @@ -0,0 +1,28 @@ +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() + }) + + test.each([ + { n: -3 , expected: false }, + { n: -25 , expected: false }, + ])('should return false when n is negetive', ({ n, expected }) => { + expect(isAutomorphic(n)).toBe(false) + }) + + 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) + }) +})