Когда магазин снова откроется

Задача по программированию с проверкой онлайн

Сложность
Сложная
Языки
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

Решить онлайнБесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Ещё задачи

Все задачи для тренировки