語言是python。這題應該有一個很簡單的方法,就是用庫,不過我沒去試,是自己推出來的。
在寫這篇博客的時候是2020.3.30,星期一,則得到下表:
2020.3.30 | 星期一 |
2020.3.31 | 星期二 |
2020.4.1 | 星期三 |
2020.4.2 | 星期四 |
2020.4.3 | 星期五 |
2020.4.4 | 星期六 |
2020.4.5 | 星期日 |
原理就是,一週只有7天,是循環的,因此我們用上面的表格去推給定的日期是周幾。我們將1000.1.1定爲第1天,寫這篇博客時是2020.3.30,對應的就是第372637天,那麼有下面的表:
2020.3.30 | 372637 |
2020.3.31 | 372638 |
2020.4.1 | 372639 |
2020.4.2 | 372640 |
2020.4.3 | 372641 |
2020.4.4 | 372642 |
2020.4.5 | 372643 |
因此,給定一個日期,我們只要算出它是對應第幾天,例如爲k,那麼我們從上面的表中,總能找到一個值d,使得(d-k)%7=0,那麼d對應是周幾,k就對應是周幾。
代碼如下:
def is_round_year(year):
return year % 4 == 0 and year % 100 != 0 or year % 400 == 0
years = {str(year): 0 for year in range(1000, 3001)}
for year in range(1001, 3001):
years[str(year)] = years[str(year - 1)] + 365 + (1 if is_round_year(year-1) else 0)
months = {'January': 0, 'February': 31, 'March': 59, 'April': 90, 'May': 120, 'June': 151, 'July': 181,
'August': 212, 'September': 243, 'October': 273, 'November': 304, 'December': 334}
day = {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Thursday', 4: 'Friday', 5: 'Saturday', 6: 'Sunday'}
today = years['2020'] + months['March'] + 1 + 30
print(today)
while True:
try:
date = input().strip().split()
days = years[date[2]] + months[date[1]] + int(date[0])
if is_round_year(int(date[2])):
if date[1] != 'February' and date[1] != 'January':
days += 1
for i in range(7):
delta = abs(today + i - days)
if delta % 7 == 0:
print(day[i])
break
except:
break