E(char* s){
printf("Error: Invalid %s\n",s);
exit(1);
}
main(year,month,day,is_leap_year,day_of_week){
printf("Enter date (YYYY/MM/DD): ");
scanf("%d %d %d", &year, &month, &day);
is_leap_year = (year % 4) ? 0 : (year % 100) ? 1 : (year % 400) ? 0 : 1;
if (year < 1 | year > 10000) {
E("year");
}
if (month < 1 | month > 12) {
E("month");
}
if (day < 1) {
E("day");
}
if (month == 2
&& ((is_leap_year && day > 29)
|| (!is_leap_year && day > 28))) {
E("day");
} else if ("101010110101"[month-1]-'0' && day > 31) {
E("day");
} else if("000101001010"[month-1]-'0' && day > 30) {
E("day");
}
day_of_week = (
(year % 100)
/ 4
+ day
+ "144025036146"[month - 1] - '0'
- (is_leap_year && month < 3)
- ((year / 100) % 4) * 2
+ (year % 100)
+ 12
) % 7;
char* string = "!(/7AJQ6 %d/%d/%d: %s\n\0Sunday\0Monday\0Tuesday\0Wednesday\0Thursday\0Friday\0Saturday";
printf(string + 19, year, month, day, string + string[day_of_week]);
}