Когда магазин снова откроется
Задача по программированию с проверкой онлайн
- Сложность
- Сложная
- Языки
- Python
- JavaScript
- TypeScript
- Java
- Go
- Темы
- Даты и время
- Разбор и проверка данных
- Исключения
Часы работы заданы строкой spec — правилами через "; " (точка с запятой и пробел). Правило — это дни и через один пробел время: дни — список через запятую из Mo, Tu, We, Th, Fr, Sa, Su или диапазонов вида Mo-Fr (диапазон может переходить через воскресенье: Fr-Mo — это пятница, суббота, воскресенье и понедельник); время — off или список отрезков "HH:MM-HH:MM" через запятую. Отрезок открыт с начала включительно до конца не включая; если конец раньше начала, отрезок ночной и продолжается до конца в следующие сутки (22:00-02:00). Более позднее правило полностью заменяет часы названных в нём дней; дни, не названные ни разу, — выходные.
Дан момент moment вида "YYYY-MM-DD HH:MM". Если магазин в этот момент открыт (включая ночной хвост отрезка предыдущего дня), верните сам moment; иначе верните ближайшее начало отрезка позже moment в том же формате, а если в расписании нет ни одного отрезка — пустую строку "". Календарь григорианский, часовых поясов нет.
Сообщите об ошибке (бросьте исключение, в Go верните error), если правило записано не так (в том числе пустая строка или лишний пробел), день неизвестен, время не в формате HH:MM или вне 00:00–23:59, у отрезка начало совпадает с концом, а также если moment не в формате или такой даты нет.
Пример: "Mo-Fr 09:00-13:00,14:00-18:00; Sa 10:00-02:00; Su off", "2024-03-06 13:30" → "2024-03-06 14:00".
Источник: задача CodeShare