From charlesreid1

Counting Sundays

In this problem, we are counting the number of Sundays during the twentieth century: "How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?"

https://projecteuler.net/problem=19

Solution Technique

The solution that I created in Java was to create two cyclical generator objects, which would be incremented with each day, and would keep track of the day of the week and hte day of the month, respectively. Then keeping track of the day would be a simple matter of stepping through each day, incrementing the counters each time, and stopping at the particular date of interest.

The day of the week generator was simple enough - a mod 7 counter - but the day of the month generator object needed several rules hard-coded to ensure it would account for leap years correctly.

Here is what the final driver program looked like - the two classes are SundayGenerator and DOMGenerator.

We begin the generators on January 1, 1900, and start counting after 1901 starts.

public class Problem019 {
	public static final int SUNDAY = 0;
	public static final int MONDAY = 1;
	public static final int FIRST  = 1;

	public static void main(String[] args) { 
		SundayGenerator sunday = new SundayGenerator(MONDAY);
		DOMGenerator dom = new DOMGenerator(1900,1,1, 2000,12,31);

		int count = 0;
		int j = 0;
		// Note: this skips the very first day, but we know that is not a solution.
		while(dom.hasNext()) {
			int thisdow = sunday.next();
			int thisdom = dom.next();
			if(thisdow==SUNDAY && thisdom==FIRST){
				// Careful.
				if(dom.year>1900) { 
					count++;
				}
			}
			j++;
		}
		System.out.println(Integer.toString(count));
			
	}

...

Code

https://git.charlesreid1.com/cs/euler/src/master/scratch/Round1_001-020/019/Problem019.java

Flags