HakerRank

Day of Programmer

by syjsdev

JavaScript

function calcMonth(days, febDays) {
  var ds = days;
  var month = 1,
    lastValue = 0;
  while (ds >= 0) {
    let daysPerMonth = 31;
    if (month === 2) daysPerMonth = febDays;
    else if (month <= 7) daysPerMonth = month % 2 === 0 ? 30 : 31;
    else daysPerMonth = month % 2 === 0 ? 31 : 30;
    ds -= daysPerMonth;
    lastValue = daysPerMonth;
    month++;
  }
  month--;
  var day = lastValue + ds;
  return {
    day: day,
    month: month,
  };
}

function formatedPrint(number) {
  return number < 10 ? `0${number}` : number;
}

// Complete the dayOfProgrammer function below.
function dayOfProgrammer(year) {
  var days = 256,
    febDays = 28;

  if (year < 1918) {
    febDays = (year % 4 === 0) ? 29 : 28;
  } else if (year === 1918) {
    febDays = 15;
  } else {
    febDays = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 ? 29 : 28;
  }
  var obj = calcMonth(days, febDays);
  if (year === 1918 && obj.month === 2) {
    return `${formatedPrint(obj.day + 14)}.${formatedPrint(obj.month)}.${year}`;
  } else {
    return `${formatedPrint(obj.day)}.${formatedPrint(obj.month)}.${year}`;
  }
}

console.log(dayOfProgrammer(1800));
console.log(dayOfProgrammer(1900));
console.log(dayOfProgrammer(1918));
console.log(dayOfProgrammer(1917));
console.log(dayOfProgrammer(2016));