Project Euler/19
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
Project Euler project euler notes
Round 1: Problems 1-20 Problem 1 · Problem 2 · Problem 3 · Problem 4 · Problem 5 · Problem 6 · Problem 7 · Problem 8 · Problem 9 · Problem 10 Problem 11 · Problem 12 · Problem 13 · Problem 14 · Problem 15 · Problem 16 · Problem 17 · Problem 18 · Problem 19 · Problem 20 Round 2: Problems 50-70 Problem 51 · Problem 52 · Problem 53 · Problem 54 · Problem 55 · Problem 56 · Problem 57 · Problem 58 · ... · Problem 61 · Problem 62 · Problem 63 · Problem 64 · Problem 65 · Problem 66 · Problem 67 Round 3: Problems 100-110 Problem 100 · Problem 101 · Problem 102 Round 4: Problems 500-510 Problem 500 · Problem 501 * · Problem 502 * Round 5: Problems 150-160 Round 6: Problems 250-260 Round 7: Problems 170-180
|