From 1ff709e7bdaeb0d325fa789a150e4b1c357751ea Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Mon, 6 May 2024 22:13:25 -0500 Subject: [PATCH 1/3] [Solution] Project euler challenge 19 with tests --- Project-Euler/Problem019.js | 55 +++++++++++++++++++++++++++ Project-Euler/test/Problem019.test.js | 8 ++++ 2 files changed, 63 insertions(+) create mode 100644 Project-Euler/Problem019.js create mode 100644 Project-Euler/test/Problem019.test.js diff --git a/Project-Euler/Problem019.js b/Project-Euler/Problem019.js new file mode 100644 index 0000000000..6b273b5953 --- /dev/null +++ b/Project-Euler/Problem019.js @@ -0,0 +1,55 @@ +/** + * Problem 19 - Counting Sundays + * + * @see {@link https://projecteuler.net/problem=19} + * + * You are given the following information, but you may prefer to do some research for yourself. + * 1 Jan 1900 was a Monday. + * Thirty days has September, + * April, June and November. + * All the rest have thirty-one, + * Saving February alone, + * Which has twenty-eight, rain or shine. + * And on leap years, twenty-nine. + * A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400. + * How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)? + * + * @author ddaniel27 + */ + +// Check if a year is a leap year +// A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400. +function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 +} + +function problem19() { + let sundaysCount = 0 // Count of Sundays + let dayOfWeek = 2 // 1st Jan 1900 was a Monday, so 1st Jan 1901 was a Tuesday + + for (let year = 1901; year <= 2000; year++) { + // From 1901 to 2000 + for (let month = 1; month <= 12; month++) { + // From January to December + if (dayOfWeek === 0) { + // If it's a Sunday (0 is Sunday, 1 is Monday, ..., 6 is Saturday) + sundaysCount++ + } + + let daysInMonth = 31 + if (month === 4 || month === 6 || month === 9 || month === 11) { + // April, June, September, November + daysInMonth = 30 + } else if (month === 2) { + // February + daysInMonth = isLeapYear(year) ? 29 : 28 + } + + dayOfWeek = (dayOfWeek + daysInMonth) % 7 // Calculate the day of the week + } + } + + return sundaysCount +} + +export { problem19 } diff --git a/Project-Euler/test/Problem019.test.js b/Project-Euler/test/Problem019.test.js new file mode 100644 index 0000000000..8845e5a0ac --- /dev/null +++ b/Project-Euler/test/Problem019.test.js @@ -0,0 +1,8 @@ +import { problem19 } from '../Problem019.js' + +describe('checking sundays during the twentieth century', () => { + // Project Euler Challenge Check + test('result should be 171', () => { + expect(problem19()).toBe(171) + }) +}) From 664da39d784ad0e0c90a960b0dbd576acab32bfc Mon Sep 17 00:00:00 2001 From: ddaniel27 Date: Mon, 27 May 2024 10:27:29 -0500 Subject: [PATCH 2/3] update leap year function --- Project-Euler/Problem019.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Project-Euler/Problem019.js b/Project-Euler/Problem019.js index 6b273b5953..75e8d7528b 100644 --- a/Project-Euler/Problem019.js +++ b/Project-Euler/Problem019.js @@ -16,12 +16,7 @@ * * @author ddaniel27 */ - -// Check if a year is a leap year -// A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400. -function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 -} +import { isLeapYear } from '../Maths/LeapYear' function problem19() { let sundaysCount = 0 // Count of Sundays From 98a6fa4d80127096fbc82d821e70158b2e9dc638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Sat, 15 Jun 2024 00:18:31 +0200 Subject: [PATCH 3/3] Remove unnecessary, confusingly placed comments --- Project-Euler/Problem019.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/Project-Euler/Problem019.js b/Project-Euler/Problem019.js index 75e8d7528b..5b488c7f96 100644 --- a/Project-Euler/Problem019.js +++ b/Project-Euler/Problem019.js @@ -23,9 +23,7 @@ function problem19() { let dayOfWeek = 2 // 1st Jan 1900 was a Monday, so 1st Jan 1901 was a Tuesday for (let year = 1901; year <= 2000; year++) { - // From 1901 to 2000 for (let month = 1; month <= 12; month++) { - // From January to December if (dayOfWeek === 0) { // If it's a Sunday (0 is Sunday, 1 is Monday, ..., 6 is Saturday) sundaysCount++