Python · 29 строк
Покупатель выбирает получасовой слот доставки на сегодня: с 8:00 до 23:00 по местному времени лавки, не раньше чем через час от текущего момента. В слот курьеры успевают отвезти 12 заказов.
booked — словарь «начало слота → число заказов» из кэша, store.timezone — пояс лавки вроде Asia/Yekaterinburg. Серверы работают по Москве. Отметьте строки с ошибками.
В работе: Экран оформления заказа в Лавке: блок «Доставить к времени».
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: наша задача на данных Яндекс Лавки: доставка к удобному времени. Условие пересказано своими словами.
Давали на собеседовании?
from datetime import datetime, timedeltaSLOT_MINUTES = 30OPEN_HOUR = 8CLOSE_HOUR = 23MAX_ORDERS_PER_SLOT = 12MIN_LEAD = timedelta(hours=1)def slot_label(start: datetime) -> str:end = start + timedelta(minutes=SLOT_MINUTES)return f"{start:%H:%M}–{end:%H:%M}"def available_slots(store, booked: dict = {}) -> list:"""Слоты на сегодня с шагом 30 минут, не раньше чем через час от текущего времени."""now = datetime.now()first = now.replace(minute=0, second=0, microsecond=0) + MIN_LEADlast = now.replace(hour=CLOSE_HOUR, minute=0, second=0, microsecond=0)slots = []t = firstwhile t < last:if t.hour >= OPEN_HOUR:key = t.strftime("%H:%M")if booked.get(key, 0) <= MAX_ORDERS_PER_SLOT:slots.append(slot_label(t))t += timedelta(minutes=SLOT_MINUTES)booked.setdefault("shown_at", now)return slots