# Daily Challenge #303 - Frequent Days in a Year

What is your favorite day of the week? Check if it's the most frequent day of the week in the year.

You are given a year as an integer (e.g. 2001). You should return the most frequent day(s) of the week in that year.

Input: Year as an int.

Output: The list of most frequent days in the Gregorian calendar year.

### Examples:

`most_frequent_days(2427)` == `['Friday']`
`most_frequent_days(2185)` == `['Saturday']`
`most_frequent_days(2860)` == `['Thursday', 'Friday']`

### Tests:

`most_frequent_days(1770)`
`most_frequent_days(1785)`
`most_frequent_days(1984)`
`most_frequent_days(2000)`

Good luck!

This challenge comes from suic on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions! Sooraj (PS)

Tried a different approach

``````const mostFrequentDays = (year) => {
const dayValues = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
let days = [];
days.push(dayValues[new Date('01-01-'+year).getDay()])
if (year % 4 === 0) days.push(dayValues[new Date('01-02-'+year).getDay()]);
return days;
}
`````` peter279k

Here is the simple solution with Python, `datetime.datetime` and `datetime.timedelta` modules:

``````from datetime import datetime
from datetime import timedelta

def most_frequent_days(year):
weekdays = {
'Monday': 0,
'Tuesday': 0,
'Wednesday': 0,
'Thursday': 0,
'Friday': 0,
'Saturday': 0,
'Sunday': 0,
}
date_format = '%s-%s-%s'
start_date = date_format % (year, '01', '01')
end_date = date_format % ((year + 1), '01', '01')
start = datetime.strptime(start_date, '%Y-%m-%d')

while start.strftime('%Y-%m-%d') != end_date:
if (start.weekday()) == 0:
weekdays['Monday'] += 1
elif (start.weekday()) == 1:
weekdays['Tuesday'] += 1
elif (start.weekday()) == 2:
weekdays['Wednesday'] += 1
elif (start.weekday()) == 3:
weekdays['Thursday'] += 1
elif (start.weekday()) == 4:
weekdays['Friday'] += 1
elif (start.weekday()) == 5:
weekdays['Saturday'] += 1
elif (start.weekday()) == 6:
weekdays['Sunday'] += 1

start += timedelta(days=1)

max_value = max(list(weekdays.values()))
res = []

for item in list(weekdays.items()):
week_name = item
week_day = item
if week_day == max_value:
res.append(week_name)

return res

`````` agtoever • Edited on

Now that challenge created a nice set of date related one-liners in Python.

``````from datetime import timedelta, date
from collections import Counter

days_in_year = lambda year: int((date(year, 12, 31) - date(year, 1, 1)).days)
iterate_year = lambda year: [date(year, 1, 1) + days * timedelta(days=1) for days in range(days_in_year(year) + 1)]
weekdays     = lambda year: [day.strftime('%A') for day in iterate_year(year)]
max_dict_val = lambda d: [key for key, value in d.items() if value == max(d.values())]

for year in [2427, 2185, 2860, 1770, 1785, 1984, 2000]:
print(f'Most frequent day(s) in {year} is/are: {max_dict_val(Counter(weekdays(year)))}')
``````

Try it online!

Timeless DEV post...

## How to write a kickass README

Arguably the single most important piece of documentation for any open source project is the README. A good README not only informs people what the project does and who it is for but also how they use and contribute to it.

If you write a README without sufficient explanation of what your project does or how people can use it then it pretty much defeats the purpose of being open source as other developers are less likely to engage with or contribute towards it.