public static void Main()
var tmpb = new DateTime(2016, 12, 1);
var tmpe = new DateTime(2030, 12, 31);
var partTimeGrade = 0.5d;
var daysTotal = (tmpe - tmpb).Days + 1;
var dueDate = new DateTime(2018, 12, 1);
var dueDate2 = new DateTime(2020, 12, 1);
var dueDate3 = new DateTime(2022, 12, 1);
var dueDate4 = new DateTime(2024, 12, 1);
var dueDate5 = new DateTime(2026, 12, 1);
while (days < daysTotal) {
var tmpDate = tmpb.AddDays(days);
countLinear += 1d / 365 * partTimeGrade;
countLeap += 1d / (DateTime.IsLeapYear(tmpDate.Year) ? 366 : 365) * partTimeGrade;
var isLeapYearFirst = DateTime.IsLeapYear(tmpb.Year);
var isLeapYearLast = DateTime.IsLeapYear(tmpDate.Year);
var daysUntilMarch = DateTime.IsLeapYear(tmpb.Year) ? 29 : 28;
var daysToFeb29 = Math.Max(0, (new DateTime(Math.Min(new DateTime(tmpb.Year, 2, daysUntilMarch).Ticks, tmpe.Ticks)) - new DateTime(Math.Max(new DateTime(tmpb.Year, 2, 1).Ticks, tmpb.Ticks))).Days + 1);
double additionalDay = 0;
if (daysToFeb29 == 0 && !isLeapYearLast) {
if (daysToFeb29 != 0 && isLeapYearLast) {
if (tmpDate.Ticks == dueDate.Ticks || tmpDate.Ticks == dueDate2.Ticks || tmpDate.Ticks == dueDate3.Ticks || tmpDate.Ticks == dueDate4.Ticks ) {
Console.WriteLine("Hit! " + days + "/" + (days + additionalDay));
Console.WriteLine("Leapdays " + leapDays);
Console.WriteLine("additionalDay " + additionalDay);
var guessed = 365 / partTimeGrade;
Console.WriteLine(Math.Ceiling(guessed));
var guessed2 = 365 / partTimeGrade * 2 + leapDays;
Console.WriteLine(Math.Ceiling(guessed2));
var guessed3 = 365 / partTimeGrade * 3 + leapDays;
Console.WriteLine(Math.Ceiling(guessed3));
var guessed4 = 365 / partTimeGrade * 4 + leapDays;
Console.WriteLine(Math.Ceiling(guessed4));