Расчёт стоимости проживания в гостинице

Нужно суммировать тариф каждой ночи по дню недели. Указанные в примере результаты противоречат тарифам: 7 ночей стоят 10 000 ₽, а три с пятницы — 5 200 ₽.

Короткий ответ

Что ответить на собеседовании

Нужно суммировать тариф каждой ночи по дню недели. Указанные в примере результаты противоречат тарифам: 7 ночей стоят 10 000 ₽, а три с пятницы — 5 200 ₽.

Подробный разбор

Ответ с пояснениями

Условие

Определение цены за ночевку в отеле. Функция принимает два параметра:

  1. Количество ночей (обязательный параметр).
  2. Дата заезда (необязательный параметр). Если дата не указана, используется текущий день. Стоимость проживания в будние дни (с понедельника по пятницу) — 1200 руб. Стоимость проживания в выходные (суббота, воскресенье) — 2000 руб.
const rates = {
    weekday: 1200,
    holidays: 2000,
};

function calculateBooking(nights, startDate) {
    let total = 0;
    return total;
}

console.log(calculateBooking(7)); // 31000
console.log(calculateBooking(3, new Date("2023-11-10"))); // 5000

Ответ

Нужно суммировать тариф каждой ночи по дню недели. Указанные в примере результаты противоречат тарифам: 7 ночей стоят 10 000 ₽, а три с пятницы — 5 200 ₽.

Ниже дни трактуются в UTC, чтобы Date('2023-11-10') не смещалась из-за локальной зоны:

function calculateBooking(nights, startDate = new Date()) {
  if (!Number.isSafeInteger(nights) || nights < 0) throw new RangeError('Неверное число ночей');
  if (!(startDate instanceof Date) || !Number.isFinite(startDate.getTime())) throw new TypeError('Неверная дата');
  const firstDay = startDate.getUTCDay();
  const weeks = Math.floor(nights / 7);
  let total = weeks * (5 * 1200 + 2 * 2000);
  for (let i = 0; i < nights % 7; i++) {
    const day = (firstDay + i) % 7;
    total += day === 0 || day === 6 ? 2000 : 1200;
  }
  return total;
}

В реальном бронировании календарную дату определяют в часовом поясе гостиницы. Тариф относится к дате начала ночи; государственные праздники условием не заданы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее