mirror of
https://bitbucket.org/Mattrixwv/projecteulerjava.git
synced 2025-12-06 17:13:58 -05:00
Updated for performance
This commit is contained in:
@@ -37,24 +37,24 @@ package mattrixwv.ProjectEuler.Problems;
|
|||||||
public class Problem19 extends Problem{
|
public class Problem19 extends Problem{
|
||||||
private static enum DAYS{SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, NUMBER_OF_DAYS, ERROR};
|
private static enum DAYS{SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, NUMBER_OF_DAYS, ERROR};
|
||||||
//The first year we are going to test
|
//The first year we are going to test
|
||||||
private static final Integer START_YEAR = 1901;
|
private static final int START_YEAR = 1901;
|
||||||
//The last year we are going to test
|
//The last year we are going to test
|
||||||
private static final Integer END_YEAR = 2000;
|
private static final int END_YEAR = 2000;
|
||||||
|
|
||||||
public Problem19(){
|
public Problem19(){
|
||||||
super("How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?");
|
super("How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?");
|
||||||
}
|
}
|
||||||
public void solve(){
|
public void solve(){
|
||||||
//The total number of sundays
|
//The total number of sundays
|
||||||
Long totalSundays = 0L;
|
long totalSundays = 0L;
|
||||||
|
|
||||||
//Start the timer
|
//Start the timer
|
||||||
timer.start();
|
timer.start();
|
||||||
|
|
||||||
//Run for all years 1901-2000
|
//Run for all years 1901-2000
|
||||||
for(Integer year = START_YEAR;year <= END_YEAR;++year){
|
for(int year = START_YEAR;year <= END_YEAR;++year){
|
||||||
//Run for all months in the year
|
//Run for all months in the year
|
||||||
for(Integer month = 1;month <= 12;++month){
|
for(int month = 1;month <= 12;++month){
|
||||||
DAYS day = getDay(month, 1, year);
|
DAYS day = getDay(month, 1, year);
|
||||||
if(day == DAYS.ERROR){
|
if(day == DAYS.ERROR){
|
||||||
System.out.println("There was an error with the day");
|
System.out.println("There was an error with the day");
|
||||||
@@ -72,18 +72,18 @@ public class Problem19 extends Problem{
|
|||||||
result = String.format("There are %d Sundays that landed on the first of the months from %d to %d\n", totalSundays, START_YEAR, END_YEAR);
|
result = String.format("There are %d Sundays that landed on the first of the months from %d to %d\n", totalSundays, START_YEAR, END_YEAR);
|
||||||
}
|
}
|
||||||
//Return the day of the week that the date you pass into it is on
|
//Return the day of the week that the date you pass into it is on
|
||||||
private DAYS getDay(Integer month, Integer day, Integer year){
|
private DAYS getDay(int month, int day, int year){
|
||||||
//Make sure the numbers are within propper bounds
|
//Make sure the numbers are within propper bounds
|
||||||
if((month < 1) || (month > 12) || (day < 1) || (day > 31) || (year < 1)){
|
if((month < 1) || (month > 12) || (day < 1) || (day > 31) || (year < 1)){
|
||||||
return DAYS.ERROR;
|
return DAYS.ERROR;
|
||||||
}
|
}
|
||||||
Integer numDays = 0;
|
int numDays = 0;
|
||||||
Integer currentYear = 1;
|
int currentYear = 1;
|
||||||
Integer currentMonth = 1;
|
int currentMonth = 1;
|
||||||
Integer currentDay = DAYS.SATURDAY.ordinal();
|
int currentDay = DAYS.SATURDAY.ordinal();
|
||||||
--day;
|
--day;
|
||||||
|
|
||||||
//Add teh currect number of days for every year
|
//Add the correct number of days for every year
|
||||||
while(currentYear < year){
|
while(currentYear < year){
|
||||||
if(isLeapYear(currentYear)){
|
if(isLeapYear(currentYear)){
|
||||||
numDays += 366;
|
numDays += 366;
|
||||||
@@ -150,7 +150,7 @@ public class Problem19 extends Problem{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Returns true if the year passed to it is a leap year
|
//Returns true if the year passed to it is a leap year
|
||||||
private Boolean isLeapYear(Integer year){
|
private boolean isLeapYear(int year){
|
||||||
if(year < 1){
|
if(year < 1){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -172,5 +172,5 @@ public class Problem19 extends Problem{
|
|||||||
|
|
||||||
/* Results:
|
/* Results:
|
||||||
There are 171 Sundays that landed on the first of the months from 1901 to 2000
|
There are 171 Sundays that landed on the first of the months from 1901 to 2000
|
||||||
It took 46.394 milliseconds to solve this problem.
|
It took 1.767 milliseconds to solve this problem.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user