29 lines
1,005 B
Text
29 lines
1,005 B
Text
program doomsday;
|
|
tests := [[1800,1,6], [1875,3,29], [1915,12,7], [1970,12,23],
|
|
[2043,5,14], [2077,2,12], [2101,4,2]];
|
|
|
|
loop for [year, month, day] in tests do
|
|
print(str day + "/" + str month + "/" + str year + ": " +
|
|
weekday(year, month, day));
|
|
end loop;
|
|
|
|
proc leap(y);
|
|
return y mod 4 = 0 and (y mod 100 /= 0 or y mod 400 = 0);
|
|
end proc;
|
|
|
|
proc weekday(year, month, day);
|
|
leapdoom := [4,1,7,4,2,6,4,1,5,3,7,5];
|
|
normdoom := [3,7,7,4,2,6,4,1,5,3,7,5];
|
|
weekdays := ["Sunday","Monday","Tuesday","Wednesday","Thursday",
|
|
"Friday","Saturday"];
|
|
|
|
c := year div 100;
|
|
r := year mod 100;
|
|
s := r div 12;
|
|
t := r mod 12;
|
|
c_anchor := (5 * (c mod 4) + 2) mod 7;
|
|
doom := (s + t + (t div 4) + c_anchor) mod 7;
|
|
anchor := if leap(year) then leapdoom else normdoom end(month);
|
|
return weekdays((doom+day-anchor+7) mod 7+1);
|
|
end proc;
|
|
end program;
|