Count Months Whose First Day Is Sunday
Company: Walmart Labs
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: medium
Interview Round: Technical Screen
## Problem
Given inclusive start and end years, count how many months in that range begin on a Sunday. Use the proleptic Gregorian calendar and do not use a built-in date or calendar library. You may use the anchor that January 1, 2000 was a Saturday.
### Function Contract
Implement `count_sunday_month_starts(start_year, end_year) -> int`.
### Constraints
- `1900 <= start_year <= end_year <= 9999`.
- A leap year is divisible by 400, or divisible by 4 but not by 100.
- Count January through December in both boundary years.
- Weekday arithmetic must work for ranges before as well as after 2000.
### Examples
- `start_year = 2000`, `end_year = 2024` returns `43`.
- The year 2000 is a leap year; 1900 is not.
```hint Track the first weekday
Once the weekday of a month's first day is known, add that month's length modulo seven to reach the next month.
```
```hint Reach the starting year from the anchor
Move year by year forward or backward from 2000 using 365 or 366 days modulo seven.
```
### Edge Cases
- Century leap-year rules affect 1900, 2000, and 2100 differently.
- A one-year range still includes all twelve months.
- Do not assume the start year is at or after 2000.
Overview: Count months beginning on Sunday across an inclusive Gregorian year range without a calendar library, using the 2000 weekday anchor and correct forward, backward, and leap-year arithmetic.
Given inclusive start and end years, count how many months from January of the start year through December of the end year begin on a Sunday. Use the proleptic Gregorian calendar and do not use a built-in date or calendar library. January 1, 2000 was a Saturday. A leap year is divisible by 400, or divisible by 4 but not by 100. Weekday arithmetic must work before and after 2000.
Constraints
- 1900 <= start_year <= end_year <= 9999.
- The range includes January through December in both boundary years.
- A leap year is divisible by 400, or divisible by 4 but not by 100.
- Use the proleptic Gregorian calendar without a built-in date or calendar library.
- January 1, 2000 was a Saturday.
Examples
Input: (2000, 2024)
Expected Output: 43
Explanation: The inclusive 25-year range contains 43 Sunday month starts.
Input: (2000, 2000)
Expected Output: 1
Explanation: In leap year 2000, October begins on Sunday.
Hints
- Advance a month's first weekday by its length modulo seven.
- Reach the starting year by moving forward or backward from the 2000 anchor.