# Self-hatred

## Project Euler Problem #19

Mark now knows more than Mark ever wished to know about leap years, months, days, and weeks – generally a whole lot of the Georgian calendar and calendar days versus solar days.

```using System;

public class Nineteen
{
static void Main()
{
int a = 0;

for (int i = 1901; i < = 2000; i++)
for (int j = 1; j <= 12; j++)
if (Dow(i,j,1) == 0)
a++;

Console.WriteLine("\n{0}\n", a);
}

static int Dow(int year, int month, int day)
{
int a = 1900;
int b = 1;
int c = 1;
int d = Elapsed(a,b,c,year,month,day);

return d %= 7;
}

// Days between any two arbitrary dates. Inclusive!
static int Elapsed(int yOne, int mOne, int dOne, int yTwo, int mTwo, int dTwo)
{
int a = 0;

for (int i = yOne; i < yTwo; i++)
a += DaysYear(i);
for (int i = mOne; i < mTwo; i++)
a += DaysMonth(yTwo, i);
if (dTwo >= dOne)
a += dTwo;
else
a += dOne;

return a;
}

// Days in one month. Assumes "1-12" input. Adjusts for leap year.
static int DaysMonth(int year, int month)
{
int[]  a = new int[13] {-42,31,28,31,30,31,30,31,31,30,31,30,31};
int	 b = 0;

b = a[month];

if ((Leap(year)) && (month == 2))
b += 1;

return b;
}

// Days in one year period.
static int DaysYear(int year)
{
int a = 0;

for (int i = 1; i < = 12; i++)
a += DaysMonth(year, i);

return a;
}

static bool Leap(int year)
{
bool a = false;

if (year % 400 == 0)
a = true;
else if (year % 100 == 0)
a = false;
else if (year % 4 == 0)
a = true;
else
a = false;

return a;
}
}```

Categorised as: programming