let it go

Finished
44//
55
66/**
7 * @param {number} year
8 * @param {number} month
9 * @param {string} week
10 * @param {string} dayOfWeek
11 * @returns {Date}
7 * Calculates the date of a meetup based on year, month, week descriptor, and day of week.
8 *
9 * @param {number} year - The year of the meetup
10 * @param {number} month - The month of the meetup (1-12)
11 * @param {string} week - The week descriptor ('first', 'second', 'third', 'fourth', 'last', 'teenth')
12 * @param {string} dayOfWeek - The day of the week ('Sunday', 'Monday', etc.)
13 * @returns {Date} - The calculated date of the meetup
14 *
15 * @example
16 * meetup(2018, 1, 'first', 'Monday') // Returns Date for January 1, 2018
17 * meetup(1953, 8, 'teenth', 'Saturday') // Returns Date for August 15, 1953
1218 */
1319export const meetup = (year, month, week, dayOfWeek) => {
14 throw new Error('Remove this line and implement the function');
20 // Validate inputs
21 if (typeof year !== 'number' || year < 1) {
22 throw new Error('Invalid year');
23 }
24
25 if (typeof month !== 'number' || month < 1 || month > 12) {
26 throw new Error('Invalid month');
27 }
28
29 const validWeeks = ['first', 'second', 'third', 'fourth', 'last', 'teenth'];
30 if (!validWeeks.includes(week)) {
31 throw new Error('Invalid week descriptor');
32 }
33
34 const validDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
35 if (!validDays.includes(dayOfWeek)) {
36 throw new Error('Invalid day of week');
37 }
38
39 // Convert day name to index (0-6)
40 const dayIndex = validDays.indexOf(dayOfWeek);
41
42 // Create a date object for the first day of the month
43 // Note: JavaScript months are 0-indexed, but our input is 1-indexed
44 const firstOfMonth = new Date(year, month - 1, 1);
45
46 // Edge Case: Handle 'teenth' week (13th through 19th)
47 if (week === 'teenth') {
48 // Start checking from the 13th day of the month
49 for (let day = 13; day <= 19; day++) {
50 const date = new Date(year, month - 1, day);
51 if (date.getDay() === dayIndex) {
52 return date;
53 }
54 }
55 // This should never happen with valid inputs
56 throw new Error('Could not find teenth day');
57 }
58
59 // Edge Case: Handle 'last' week
60 if (week === 'last') {
61 // Get the last day of the month by going to the first day of next month and subtracting one day
62 const nextMonth = new Date(year, month, 1);
63 const lastDay = new Date(nextMonth.getTime() - 86400000); // 86400000 ms = 1 day
64
65 // Work backwards to find the last occurrence of the specified day
66 let current = lastDay;
67 while (current.getMonth() === month - 1) { // Still in the target month
68 if (current.getDay() === dayIndex) {
69 return current;
70 }
71 // Move to previous day
72 current = new Date(current.getTime() - 86400000);
73 }
74 // This should never happen with valid inputs
75 throw new Error('Could not find last day');
76 }
77
78 // Edge Case: Handle 'first', 'second', 'third', 'fourth' weeks
79 // Find the first occurrence of the specified day in the month
80 const firstDay = firstOfMonth.getDay();
81 let daysUntilTarget = dayIndex - firstDay;
82
83 // If the target day has already passed in the first week, move to next week
84 if (daysUntilTarget < 0) {
85 daysUntilTarget += 7;
86 }
87
88 // Calculate the date of the first occurrence
89 const firstOccurrence = 1 + daysUntilTarget;
90
91 // Calculate which occurrence we want (1st, 2nd, 3rd, 4th)
92 const weekIndex = ['first', 'second', 'third', 'fourth'].indexOf(week);
93
94 // Calculate the final date
95 const targetDate = firstOccurrence + (weekIndex * 7);
96
97 // Verify the date is still in the correct month
98 const result = new Date(year, month - 1, targetDate);
99
100 // Edge Case: Handle case where calculated date is in a different month
101 if (result.getMonth() !== month - 1) {
102 throw new Error(`The ${week} ${dayOfWeek} does not exist in the given month`);
103 }
104
105 return result;
106
107 // Handled Edge Cases: Invalid inputs (year, month, week, dayOfWeek), teenth week calculation,
108 // last week calculation, first/second/third/fourth week calculation, date overflow into next month
15109};
Test NameStatus
monteenth of May 2013
Pass
monteenth of August 2013
Pass
monteenth of September 2013
Pass
tuesteenth of March 2013
Pass
tuesteenth of April 2013
Pass
tuesteenth of August 2013
Pass
wednesteenth of January 2013
Pass
wednesteenth of February 2013
Pass
wednesteenth of June 2013
Pass
thursteenth of May 2013
Pass
thursteenth of June 2013
Pass
thursteenth of September 2013
Pass
friteenth of April 2013
Pass
friteenth of August 2013
Pass
friteenth of September 2013
Pass
saturteenth of February 2013
Pass
saturteenth of April 2013
Pass
saturteenth of October 2013
Pass
sunteenth of May 2013
Pass
sunteenth of June 2013
Pass
sunteenth of October 2013
Pass
first Monday of March 2013
Pass
first Monday of April 2013
Pass
first Tuesday of May 2013
Pass
first Tuesday of June 2013
Pass
first Wednesday of July 2013
Pass
first Wednesday of August 2013
Pass
first Thursday of September 2013
Pass
first Thursday of October 2013
Pass
first Friday of November 2013
Pass
first Friday of December 2013
Pass
first Saturday of January 2013
Pass
first Saturday of February 2013
Pass
first Sunday of March 2013
Pass
first Sunday of April 2013
Pass
second Monday of March 2013
Pass
second Monday of April 2013
Pass
second Tuesday of May 2013
Pass
second Tuesday of June 2013
Pass
second Wednesday of July 2013
Pass
second Wednesday of August 2013
Pass
second Thursday of September 2013
Pass
second Thursday of October 2013
Pass
second Friday of November 2013
Pass
second Friday of December 2013
Pass
second Saturday of January 2013
Pass
second Saturday of February 2013
Pass
second Sunday of March 2013
Pass
second Sunday of April 2013
Pass
third Monday of March 2013
Pass
third Monday of April 2013
Pass
third Tuesday of May 2013
Pass
third Tuesday of June 2013
Pass
third Wednesday of July 2013
Pass
third Wednesday of August 2013
Pass
third Thursday of September 2013
Pass
third Thursday of October 2013
Pass
third Friday of November 2013
Pass
third Friday of December 2013
Pass
third Saturday of January 2013
Pass
third Saturday of February 2013
Pass
third Sunday of March 2013
Pass
third Sunday of April 2013
Pass
fourth Monday of March 2013
Pass
fourth Monday of April 2013
Pass
fourth Tuesday of May 2013
Pass
fourth Tuesday of June 2013
Pass
fourth Wednesday of July 2013
Pass
fourth Wednesday of August 2013
Pass
fourth Thursday of September 2013
Pass
fourth Thursday of October 2013
Pass
fourth Friday of November 2013
Pass
fourth Friday of December 2013
Pass
fourth Saturday of January 2013
Pass
fourth Saturday of February 2013
Pass
fourth Sunday of March 2013
Pass
fourth Sunday of April 2013
Pass
last Monday of March 2013
Pass
last Monday of April 2013
Pass
last Tuesday of May 2013
Pass
last Tuesday of June 2013
Pass
last Wednesday of July 2013
Pass
last Wednesday of August 2013
Pass
last Thursday of September 2013
Pass
last Thursday of October 2013
Pass
last Friday of November 2013
Pass
last Friday of December 2013
Pass
last Saturday of January 2013
Pass
last Saturday of February 2013
Pass
last Sunday of March 2013
Pass
last Sunday of April 2013
Pass
last Wednesday of February 2012
Pass
last Wednesday of December 2014
Pass
last Sunday of February 2015
Pass
first Friday of December 2012
Pass

© 2025 Ridges AI. Building the future of decentralized AI development.