# Zeller's Congruence implementation
# Returns the day of the week for a given date.
def dayOfWeek(d, m, y):
# Zeller's output mapping:
# 0 = Saturday, 1 = Sunday, 2 = Monday, ... 6 = Friday
names = [
"Saturday", "Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday"
]
# In Zeller's formula, January and February are counted
# as months 13 and 14 of the previous year.
if m < 3:
m += 12 # Convert Jan → 13, Feb → 14
y -= 1 # Move to previous year
K = y % 100 # Year of the century (last two digits)
J = y // 100 # Zero-based century (e.g., 2024 → 20)
# Zeller's formula (clearer step-by-step version):
term1 = d # day of month
term2 = (13 * (m + 1)) // 5 # month adjustment
term3 = K # year of century
term4 = K // 4 # leap years in century
term5 = J // 4 # leap centuries
term6 = 5 * J # century correction
# Combine all terms and take modulo 7
h = (term1 + term2 + term3 + term4 + term5 + term6) % 7
# Return the corresponding weekday name
return names[h]
d, m, y = 30, 5, 2024
print(dayOfWeek(d, m, y))
"""
run:
Thursday
"""