102 lines
2.8 KiB
INI
102 lines
2.8 KiB
INI
Calendar is a room.
|
|
|
|
When play begins:
|
|
let happy month count be 0;
|
|
let sad year count be 0;
|
|
repeat with Y running from Y1900 to Y2100:
|
|
if Y is a sad year, increment the sad year count;
|
|
repeat with M running through months:
|
|
if M of Y is a happy month:
|
|
say "[M] [year number of Y].";
|
|
increment the happy month count;
|
|
say "Found [happy month count] month[s] with five weekends and [sad year count] year[s] with no such months.";
|
|
end the story.
|
|
|
|
Section - Years
|
|
|
|
A year is a kind of value. Y1 specifies a year.
|
|
|
|
To decide which number is year number of (Y - year):
|
|
decide on Y / Y1.
|
|
|
|
To decide if (N - number) is divisible by (M - number):
|
|
decide on whether or not the remainder after dividing N by M is zero.
|
|
|
|
Definition: a year (called Y) is a leap year:
|
|
let YN be the year number of Y;
|
|
if YN is divisible by 400, yes;
|
|
if YN is divisible by 100, no;
|
|
if YN is divisible by 4, yes;
|
|
no.
|
|
|
|
Section - Months
|
|
|
|
A month is a kind of value. The months are defined by the Table of Months.
|
|
|
|
Table of Months
|
|
month month number
|
|
January 1
|
|
February 2
|
|
March 3
|
|
April 4
|
|
May 5
|
|
June 6
|
|
July 7
|
|
August 8
|
|
September 9
|
|
October 10
|
|
November 11
|
|
December 12
|
|
|
|
A month has a number called length. The length of a month is usually 31.
|
|
September, April, June, and November have length 30. February has length 28.
|
|
|
|
To decide which number is number of days in (M - month) of (Y - year):
|
|
let L be the length of M;
|
|
if M is February and Y is a leap year, decide on L + 1;
|
|
otherwise decide on L.
|
|
|
|
Section - Weekdays
|
|
|
|
A weekday is a kind of value. The weekdays are defined by the Table of Weekdays.
|
|
|
|
Table of Weekdays
|
|
weekday weekday number
|
|
Saturday 0
|
|
Sunday 1
|
|
Monday 2
|
|
Tuesday 3
|
|
Wednesday 4
|
|
Thursday 5
|
|
Friday 6
|
|
|
|
To decide which weekday is weekday of the/-- (N - number) of (M - month) of (Y - year):
|
|
let MN be the month number of M;
|
|
let YN be the year number of Y;
|
|
if MN is less than 3:
|
|
increase MN by 12;
|
|
decrease YN by 1;
|
|
let h be given by Zeller's Congruence;
|
|
let WDN be the remainder after dividing h by 7;
|
|
decide on the weekday corresponding to a weekday number of WDN in the Table of Weekdays.
|
|
|
|
Equation - Zeller's Congruence
|
|
h = N + ((MN + 1)*26)/10 + YN + YN/4 + 6*(YN/100) + YN/400
|
|
where h is a number, N is a number, MN is a number, and YN is a number.
|
|
|
|
To decide which number is number of (W - weekday) days in (M - month) of (Y - year):
|
|
let count be 0;
|
|
repeat with N running from 1 to the number of days in M of Y:
|
|
if W is the weekday of the N of M of Y, increment count;
|
|
decide on count.
|
|
|
|
Section - Happy Months and Sad Years
|
|
|
|
To decide if (M - month) of (Y - year) is a happy month:
|
|
if the number of days in M of Y is 31 and the weekday of the 1st of M of Y is Friday, decide yes;
|
|
decide no.
|
|
|
|
To decide if (Y - year) is a sad year:
|
|
repeat with M running through months:
|
|
if M of Y is a happy month, decide no;
|
|
decide yes.
|