Вычисление цены за проживание в гостинице

За полную неделю цена всегда 11 900 ₽. Посчитайте полные недели отдельно, затем добавьте стоимость оставшихся ночей по дню недели даты заезда.

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

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

За полную неделю цена всегда 11 900 ₽. Посчитайте полные недели отдельно, затем добавьте стоимость оставшихся ночей по дню недели даты заезда.

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

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

Условие

Нужно реализовать функцию, которая определяет стоимость пребывания гостя в гостинице. Функция принимает два параметра:

  1. Количество ночей (обязательный).
  2. Дату заезда (опциональная). Если дата не передана, считается, что заезд происходит в текущий день. Тарифы:
  • будние дни (с понедельника по пятницу) — 1500 ₽ за ночь;
  • выходные (суббота и воскресенье) — 2200 ₽ за ночь.
function bookingCalculate(nights, startDate) {
}

console.log(bookingCalculate(7)); // 11900
console.log(bookingCalculate(3, new Date('2023-11-10'))); // 5900

Ответ

За полную неделю цена всегда 11 900 ₽. Посчитайте полные недели отдельно, затем добавьте стоимость оставшихся ночей по дню недели даты заезда.

function bookingCalculate(nights, startDate = new Date()) {
  if (!Number.isSafeInteger(nights) || nights < 0 ||
      !(startDate instanceof Date) || !Number.isFinite(startDate.getTime())) {
    throw new RangeError('Некорректные параметры');
  }
  let total = Math.floor(nights / 7) * 11900;
  const startDay = startDate.getUTCDay();
  for (let i = 0; i < nights % 7; i++) {
    const day = (startDay + i) % 7;
    total += day === 0 || day === 6 ? 2200 : 1500;
  }
  if (!Number.isSafeInteger(total)) throw new RangeError('Слишком большая сумма');
  return total;
}

Ночь относится к дню её начала. Здесь явно используется календарный день UTC, чтобы результат не зависел от зоны компьютера. Для реального отеля нужно согласовать его часовой пояс. С 10 ноября 2023 три ночи стоят 1500 + 2200 + 2200 = 5900.

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

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

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

Подробнее