48 lines
1.1 KiB
Plaintext
48 lines
1.1 KiB
Plaintext
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.
|