leap_year = proc (year: int) returns (bool) return(year//4=0 & (year//100=0 | year//400=0)) end leap_year weekday = proc (d: date) returns (string) own leapdoom: array[int] := array[int]$[4,1,7,2,4,6,4,1,5,3,7,5] own normdoom: array[int] := array[int]$[3,7,7,4,2,6,4,1,5,3,7,5] own days: array[string] := array[string]$[0: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ] c: int := d.year/100 r: int := d.year//100 s: int := r/12 t: int := r//12 c_anchor: int := (5 * (c//4) + 2) // 7 doom: int := (s + t + t/4 + c_anchor) // 7 anchor: int if leap_year(d.year) then anchor := leapdoom[d.month] else anchor := normdoom[d.month] end return(days[(doom+d.day-anchor+7)//7]) end weekday start_up = proc () po: stream := stream$primary_output() dates: array[date] := array[date]$ [date$create( 1, 6,1800,0,0,0), date$create(29, 3,1875,0,0,0), date$create( 7,12,1915,0,0,0), date$create(23,12,1970,0,0,0), date$create(14, 5,2043,0,0,0), date$create(12, 2,2077,0,0,0), date$create( 2, 4,2101,0,0,0)] for d: date in array[date]$elements(dates) do stream$puts(po, date$unparse_date(d)) if d