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;