mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 16:26:47 +08:00
Add Zeller's Congruence Algorithm in Math (#996)
This commit is contained in:
26
Maths/ZellersCongruenceAlgorithm.js
Normal file
26
Maths/ZellersCongruenceAlgorithm.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Zeller's Congruence Algorithm finds the day of the week from the Gregorian Date. Wikipedia: https://en.wikipedia.org/wiki/Zeller%27s_congruence
|
||||||
|
export const zellersCongruenceAlgorithm = (day, month, year) => {
|
||||||
|
if (typeof day !== 'number' || typeof month !== 'number' || typeof year !== 'number') {
|
||||||
|
throw new TypeError('Arguments are not all numbers.')
|
||||||
|
}
|
||||||
|
const q = day
|
||||||
|
let m = month
|
||||||
|
let y = year
|
||||||
|
if (month < 3) {
|
||||||
|
m += 12
|
||||||
|
y -= 1
|
||||||
|
}
|
||||||
|
day =
|
||||||
|
(q + Math.floor(26 * (m + 1) / 10) + (y % 100) + Math.floor((y % 100) / 4) + Math.floor(Math.floor(y / 100) / 4) + (5 * Math.floor(y / 100))) %
|
||||||
|
7
|
||||||
|
const days = [
|
||||||
|
'Saturday',
|
||||||
|
'Sunday',
|
||||||
|
'Monday',
|
||||||
|
'Tuesday',
|
||||||
|
'Wednesday',
|
||||||
|
'Thursday',
|
||||||
|
'Friday'
|
||||||
|
]
|
||||||
|
return days[day]
|
||||||
|
}
|
17
Maths/test/ZellersCongruenceAlgorithm.test.js
Normal file
17
Maths/test/ZellersCongruenceAlgorithm.test.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { zellersCongruenceAlgorithm } from '../ZellersCongruenceAlgorithm'
|
||||||
|
|
||||||
|
function testZeller (day, month, year, expected) {
|
||||||
|
test('Testing on ' + day + '/' + month + '/' + year, () => {
|
||||||
|
expect(zellersCongruenceAlgorithm(day, month, year)).toBe(expected)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
test('Testing on this/should/throw', () => {
|
||||||
|
expect(() => {
|
||||||
|
zellersCongruenceAlgorithm('this', 'should', 'error')
|
||||||
|
}).toThrowError(new TypeError('Arguments are not all numbers.'))
|
||||||
|
})
|
||||||
|
testZeller(25, 1, 2013, 'Friday')
|
||||||
|
testZeller(26, 1, 2013, 'Saturday')
|
||||||
|
testZeller(16, 4, 2022, 'Saturday')
|
||||||
|
testZeller(25, 4, 2022, 'Monday')
|
Reference in New Issue
Block a user