alt text

Can you determine the day your birthday will fall on this year?

Note that January 1, 2019 was a Tuesday

In [1]:
from IPython.display import YouTubeVideo
YouTubeVideo('pdMUk16675U')
Out[1]:
In [2]:
def calculate_day(month,day): 
    
    if month==1: shift=0
    elif month==2: shift=3
    elif month==3: shift=3
    elif month==4: shift=6
    elif month==5: shift=1
    elif month==6: shift=4
    elif month==7: shift=6
    elif month==8: shift=2
    elif month==9: shift=5
    elif month==10: shift=0
    elif month==11: shift=3
    elif month==12: shift=5
    else: return "ERROR" 
        
    mytotal = day + shift
        
    remainder = mytotal % 7
    
    if remainder==0: return "Monday"
    elif remainder==1: return "Tuesday"
    elif remainder==2: return "Wednesday"
    elif remainder==3: return "Thursday"
    elif remainder==4: return "Friday"
    elif remainder==5: return "Saturday"
    elif remainder==6: return "Sunday"
    else: return "ERROR"
In [5]:
calculate_day(6,15)
Out[5]:
'Saturday'
In [4]:
from __future__ import print_function
from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets

interact(calculate_day, month=widgets.IntSlider(min=1, max=12, step=1, value=6), day=widgets.IntSlider(min=1, max=31, step=1, value=15))
Out[4]:
<function __main__.calculate_day(month, day)>

Here is another solution to this problem.

Why does this solution work?

In [19]:
def shorter_solution(month, day):
    
    days_per_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]
    day_of_year = sum(days_per_month[0:month])+day
    remainder = day_of_year % 7
    daylist = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
    return daylist[remainder];
In [20]:
shorter_solution(1,11)
Out[20]:
'Friday'

alt text