Skip to content

Commit cd6ec65

Browse files
Add Algorithms to Math with tests (TheAlgorithms#429)
* chore: add area and area test * chore: add armstrong number * chore: add factors * chore: add perfect cube * chore: add perfect square * chore: add perfect number * chore: add number of digits * chore: fix according to standardjs * chore: remove conflicting files
1 parent fc09012 commit cd6ec65

12 files changed

+165
-0
lines changed

Diff for: Maths/ArmstrongNumber.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Author: dephraiim
3+
* License: GPL-3.0 or later
4+
*
5+
* An Armstrong number is equal to the sum of the cubes of its digits.
6+
* For example, 370 is an Armstrong number because 3*3*3 + 7*7*7 + 0*0*0 = 370.
7+
* An Armstrong number is often called Narcissistic number.
8+
*
9+
*/
10+
11+
const armstrongNumber = (num) => {
12+
if (num < 0 || typeof num !== 'number') return false
13+
14+
let newSum = 0
15+
16+
const numArr = num.toString().split('')
17+
numArr.forEach((num) => {
18+
newSum += parseInt(num) ** numArr.length
19+
})
20+
21+
return newSum === num
22+
}
23+
24+
export { armstrongNumber }

Diff for: Maths/Factors.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* Author: dephraiim
3+
* License: GPL-3.0 or later
4+
*
5+
* More on Factors:
6+
* https://www.mathsisfun.com/definitions/factor.html
7+
*
8+
*/
9+
10+
const factorsOfANumber = (number = 0) => {
11+
return Array.from(Array(number + 1).keys()).filter(
12+
(num) => number % num === 0
13+
)
14+
}
15+
16+
export { factorsOfANumber }

Diff for: Maths/NumberOfDigits.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/**
2+
*
3+
* Author: dephraiim
4+
* License: GPL-3.0 or later
5+
*
6+
* Returns the number of digits of a given integer
7+
*
8+
*/
9+
10+
const numberOfDigit = (n) => Math.abs(n).toString().length
11+
12+
export { numberOfDigit }

Diff for: Maths/PerfectCube.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* Author: dephraiim
3+
* License: GPL-3.0 or later
4+
*
5+
*/
6+
7+
const perfectCube = (num) => Math.round(num ** (1 / 3)) ** 3 === num
8+
9+
export { perfectCube }

Diff for: Maths/PerfectNumber.js

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Author: dephraiim
3+
* License: GPL-3.0 or later
4+
*
5+
* == Perfect Number ==
6+
* In number theory, a perfect number is a positive integer that is equal to the sum of
7+
* its positive divisors(factors), excluding the number itself.
8+
* For example: 6 ==> divisors[1, 2, 3, 6]
9+
* Excluding 6, the sum(divisors) is 1 + 2 + 3 = 6
10+
* So, 6 is a Perfect Number
11+
* Other examples of Perfect Numbers: 28, 486, ...
12+
*
13+
* More on Perfect Number:
14+
* https://en.wikipedia.org/wiki/Perfect_number
15+
*
16+
*/
17+
18+
const factorsExcludingNumber = (n) => {
19+
return [...Array(n).keys()].filter((num) => n % num === 0)
20+
}
21+
22+
const perfectNumber = (n) => {
23+
const factorSum = factorsExcludingNumber(n).reduce((num, initialValue) => {
24+
return num + initialValue
25+
}, 0)
26+
27+
return factorSum === n
28+
}
29+
30+
export { perfectNumber }

Diff for: Maths/PerfectSquare.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* Author: dephraiim
3+
* License: GPL-3.0 or later
4+
*
5+
*/
6+
7+
const perfectSquare = (num) => Math.sqrt(num) ** 2 === num
8+
9+
export { perfectSquare }

Diff for: Maths/test/ArmstrongNumber.test.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { armstrongNumber } from '../ArmstrongNumber'
2+
3+
describe('ArmstrongNumber', () => {
4+
it('should return true for an armstrong number', () => {
5+
expect(armstrongNumber(371)).toBeTruthy()
6+
})
7+
8+
it('should return false for a non-armstrong number', () => {
9+
expect(armstrongNumber(300)).toBeFalsy()
10+
})
11+
it('should return false for negative values', () => {
12+
expect(armstrongNumber(-2)).toBeFalsy()
13+
})
14+
})

Diff for: Maths/test/Factors.test.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { factorsOfANumber } from '../Factors'
2+
3+
describe('Factors', () => {
4+
factorsOfANumber(50).forEach((num) => {
5+
it(`${num} is a factor of 50`, () => {
6+
const isFactor = 50 % num === 0
7+
expect(isFactor).toBeTruthy()
8+
})
9+
})
10+
})

Diff for: Maths/test/NumberOfDigits.test.js

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { numberOfDigit } from '../NumberOfDigits'
2+
3+
describe('NumberOfDigits', () => {
4+
it('should return the correct number of digits for an integer', () => {
5+
expect(numberOfDigit(1234000)).toBe(7)
6+
})
7+
8+
it('should return the correct number of digits for a negative number', () => {
9+
expect(numberOfDigit(-2346243)).toBe(7)
10+
})
11+
})

Diff for: Maths/test/PerfectCube.test.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { perfectCube } from '../PerfectCube'
2+
3+
describe('PerfectCube', () => {
4+
it('should return true for a perfect cube', () => {
5+
expect(perfectCube(125)).toBeTruthy()
6+
})
7+
it('should return false for a non perfect cube', () => {
8+
expect(perfectCube(100)).toBeFalsy()
9+
})
10+
})

Diff for: Maths/test/PerfectNumber.test.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { perfectNumber } from '../PerfectNumber'
2+
3+
describe('PerfectNumber', () => {
4+
it('should return true for a perfect cube', () => {
5+
expect(perfectNumber(28)).toBeTruthy()
6+
})
7+
it('should return false for a non perfect cube', () => {
8+
expect(perfectNumber(10)).toBeFalsy()
9+
})
10+
})

Diff for: Maths/test/PerfectSquare.test.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { perfectSquare } from '../PerfectSquare'
2+
3+
describe('PerfectSquare', () => {
4+
it('should return true for a perfect cube', () => {
5+
expect(perfectSquare(16)).toBeTruthy()
6+
})
7+
it('should return false for a non perfect cube', () => {
8+
expect(perfectSquare(10)).toBeFalsy()
9+
})
10+
})

0 commit comments

Comments
 (0)