diff --git a/DIRECTORY.md b/DIRECTORY.md index d63e09657..b62cabb94 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -156,6 +156,7 @@ * [IsDivisible](https://github.com/TheAlgorithms/Javascript/blob/master/Maths/IsDivisible.js) * [IsEven](https://github.com/TheAlgorithms/Javascript/blob/master/Maths/IsEven.js) * [isOdd](https://github.com/TheAlgorithms/Javascript/blob/master/Maths/isOdd.js) + * [LeapYear](https://github.com/TheAlgorithms/Javascript/blob/master/Maths/LeapYear.js) * [Mandelbrot](https://github.com/TheAlgorithms/Javascript/blob/master/Maths/Mandelbrot.js) * [MatrixExponentiationRecursive](https://github.com/TheAlgorithms/Javascript/blob/master/Maths/MatrixExponentiationRecursive.js) * [MatrixMultiplication](https://github.com/TheAlgorithms/Javascript/blob/master/Maths/MatrixMultiplication.js) diff --git a/Maths/LeapYear.js b/Maths/LeapYear.js new file mode 100644 index 000000000..355d7fc96 --- /dev/null +++ b/Maths/LeapYear.js @@ -0,0 +1,22 @@ +/** + * isLeapYear :: Number -> Boolean + * + * Check if a year is a leap year or not. A leap year is a year which has 366 days. + * For the extra +1 day the February month contains 29 days instead of 28 days. + * + * The logic behind the leap year is- + * 1. If the year is divisible by 400 then it is a leap year. + * 2. If it is not divisible by 400 but divisible by 100 then it is not a leap year. + * 3. If the year is not divisible by 400 but not divisible by 100 and divisible by 4 then a leap year. + * 4. Other cases except the describing ones are not a leap year. + * + * @param {number} year + * @returns {boolean} true if this is a leap year, false otherwise. + */ +export const isLeapYear = (year) => { + if (year % 400 === 0) return true + if (year % 100 === 0) return false + if (year % 4 === 0) return true + + return false +} diff --git a/Maths/test/LeapYear.test.js b/Maths/test/LeapYear.test.js new file mode 100644 index 000000000..c30786c0e --- /dev/null +++ b/Maths/test/LeapYear.test.js @@ -0,0 +1,22 @@ +import { isLeapYear } from '../LeapYear' + +describe('Leap Year', () => { + it('Should return true on the year 2000', () => { + expect(isLeapYear(2000)).toBe(true) + }) + it('Should return false on the year 2001', () => { + expect(isLeapYear(2001)).toBe(false) + }) + it('Should return false on the year 2002', () => { + expect(isLeapYear(2002)).toBe(false) + }) + it('Should return false on the year 2003', () => { + expect(isLeapYear(2003)).toBe(false) + }) + it('Should return false on the year 2004', () => { + expect(isLeapYear(2004)).toBe(true) + }) + it('Should return false on the year 1900', () => { + expect(isLeapYear(1900)).toBe(false) + }) +}) diff --git a/package.json b/package.json index d52c3788e..2f91bbcb7 100644 --- a/package.json +++ b/package.json @@ -31,4 +31,4 @@ "jest": "^26.4.2", "standard": "^14.3.4" } -} +} \ No newline at end of file