public static void Main()
var tmpb = new DateTime(2017, 1, 1);
var tmpe = new DateTime(2029,12, 31);
var partTimeGrade = 0.4d;
var daysTotal = (tmpe - tmpb).Days + 1;
var dueDate = new DateTime(2019, 7, 3);
var dueDate2 = new DateTime(2022, 1, 1);
var dueDate3 = new DateTime(2024, 7, 1);
var dueDate4 = new DateTime(2027, 1, 1);
var dueDate5 = new DateTime(2029, 7, 3);
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 || tmpDate.Ticks == dueDate5.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));
var guessed5 = 365 / partTimeGrade * 5 + leapDays;
Console.WriteLine(Math.Ceiling(guessed5));