За полную неделю цена всегда 11 900 ₽. Посчитайте полные недели отдельно, затем добавьте стоимость оставшихся ночей по дню недели даты заезда.
Вычисление цены за проживание в гостинице
За полную неделю цена всегда 11 900 ₽. Посчитайте полные недели отдельно, затем добавьте стоимость оставшихся ночей по дню недели даты заезда.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно реализовать функцию, которая определяет стоимость пребывания гостя в гостинице. Функция принимает два параметра:
- Количество ночей (обязательный).
- Дату заезда (опциональная). Если дата не передана, считается, что заезд происходит в текущий день. Тарифы:
- будние дни (с понедельника по пятницу) — 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.