(* You are given the following information, but you may prefer to do some research for yourself. * 1 Jan 1900 was a Monday. * Thirty days has September, April, June and November. All the rest have thirty-one, Saving February alone, Which has twenty-eight, rain or shine. And on leap years, twenty-nine. * A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400. How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)? *) let sundays = (* year, month, day, weekday (0..6) *) let rec sundays y m d w s = Printf.printf "%d.%d.%d %d (%d)\n" y m d w s; if (y=2001) then s else if (m=13) then sundays (y+1) 1 1 w s else if (m=2 && d=30) then sundays y 3 1 w s else if (m=2 && d=29 && ((y mod 100=0)||(y mod 400!=0)) && (y mod 4!=0)) then sundays y 3 1 w s else if (d=31 && (m=9||m=4||m=6||m=11)) then sundays y (m+1) 1 w s else if (d=32) then sundays y (m+1) 1 w s else sundays y m (d+1) ((w+1)mod 7) (if (w=6 && d=1 && y>1900) then (s+1) else s) in sundays 1900 1 1 0 0 ;;