go ?=> println("Months with five weekends:"), FiveWeekends = [ [Year,Month] : Year in 1900..2100, Month in [1,3,5,7,8,10,12], dow(Year,Month,1) == 5], WLen = FiveWeekends.len, println(take(FiveWeekends,5)), println("..."), println(drop(FiveWeekends,WLen-5)), println(len=WLen), nl, println("Years w/o five weekends:"), FiveWeekendYears = [Year : [Year,_] in FiveWeekends].remove_dups, NoHitYears = [Year : Year in 1900..2100, not member(Year,FiveWeekendYears)], NHLen = NoHitYears.len, println(take(NoHitYears,5)), println("..."), println(drop(NoHitYears,NHLen-5)), println(len=NHLen), nl. go => true. % Day of week, Sakamoto's method dow(Y, M, D) = R => T = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4], if M < 3 then Y := Y - 1 end, R = (Y + Y // 4 - Y // 100 + Y // 400 + T[M] + D) mod 7. % Days in a month. max_days_in_month(Year,Month) = Days => if member(Month, [1,3,5,7,8,10,12]) then Days = 31 elseif member(Month,[4,6,9,11]) then Days = 30 else if leap_year(Year) then Days = 29 else Days = 28 end end. leap_year(Year) => (Year mod 4 == 0, Year mod 100 != 0) ; Year mod 400 == 0.