Следующие запуски по расписанию в стиле cron

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

Сложность
Сложная
Языки
Python
JavaScript
TypeScript
Java
Go
Темы
Даты и время
Разбор и проверка данных
Исключения

Расписание задано строкой expression из пяти полей через один пробел: минута (0–59), час (0–23), день месяца (1–31), месяц (1–12), день недели (0–6, 0 — воскресенье). Поле — это список элементов через запятую; элемент — * (все значения поля), число a, диапазон a-b (a ≤ b), а также */k или a-b/k — значения от начала, взятые с шагом k ≥ 1. Числа записываются одной или двумя цифрами и лежат в пределах поля.

Момент подходит, если его минута, час и месяц входят в свои поля и одновременно день месяца и день недели входят в свои (в отличие от классического cron, нужны оба). Календарь григорианский, часовых поясов нет. Дан момент after вида "YYYY-MM-DD HH:MM" (год от 1900 до 2100) и число n ≥ 0. Верните первые n подходящих моментов строго позже after по возрастанию, в том же формате. Ищите только до конца четвёртого года после года after (до "Y+4-12-31 23:59" включительно); если подходящих моментов там меньше n, верните найденные.

Если полей не пять (лишний пробел тоже ошибка), элемент записан неверно, значение вне пределов, a > b, шаг 0 или шаг после одиночного числа, если after не в формате или не существует, или n < 0 — сообщите об ошибке: бросьте исключение, в Go верните error.

Пример: "30 9 * * 1-5", "2024-03-08 10:00", 3 → ["2024-03-11 09:30", "2024-03-12 09:30", "2024-03-13 09:30"].


Источник: задача CodeShare

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

Ещё задачи

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