How to resolve the algorithm Five weekends step by step in the Inform 7 programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Five weekends step by step in the Inform 7 programming language

Table of Contents

Problem Statement

The month of October in 2010 has five Fridays, five Saturdays, and five Sundays.

Algorithm suggestions

Extra credit Count and/or show all of the years which do not have at least one five-weekend month (there should be 29).

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Five weekends step by step in the Inform 7 programming language

Source code in the inform programming language

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.


  

You may also check:How to resolve the algorithm Draw a cuboid step by step in the Arturo programming language
You may also check:How to resolve the algorithm Multifactorial step by step in the AutoHotkey programming language
You may also check:How to resolve the algorithm Associative array/Creation step by step in the Babel programming language
You may also check:How to resolve the algorithm Create an object at a given address step by step in the Applesoft BASIC programming language
You may also check:How to resolve the algorithm Read entire file step by step in the Ursa programming language