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++ pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy