Drill

ProblemsJavaScript › scheduling

Extra pay for overnight hours

hardschedulingJavaScript

Hours between 22:00 and 06:00 carry a premium: each premium hour earns premiumPerHour on top of the base. Compute the added pay for one shift.

nightPremium(start: int, finish: int, premiumPerHour: int) → int

Solve it in the editor →

Where you start

function nightPremium(start, finish, premiumPerHour) {
  
}

Worked examples

CallResult
nightPremium(1320, 1380, 3000)3000
nightPremium(360, 420, 1000)0
nightPremium(1260, 1440, 1000)2000
nightPremium(0, 120, 1000)2000

Hint

Split the shift against the two half-open bands; a crossing shift spans [start, 1440) plus [0, finish).

Reference solution in JavaScript
function nightPremium(start, finish, premiumPerHour) {
  if (start === finish) return 0;
  const overlap = (a, b, lo, hi) => Math.max(0, Math.min(b, hi) - Math.max(a, lo));
  let minutes;
  if (start < finish) {
    minutes = overlap(start, finish, 0, 360) + overlap(start, finish, 1320, 1440);
  } else {
    minutes = overlap(start, 1440, 1320, 1440) + overlap(0, finish, 0, 360);
  }
  return Math.floor((minutes * premiumPerHour) / 60);
}

The same problem in another language

More scheduling problems in JavaScript