Дежурства по датам с ограничениями

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

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

Составьте график дежурств на дни с start по end включительно ("YYYY-MM-DD", не больше 14 дней). Сотрудники staff — до 6 различных имён из латинских букв. В будний день (пн–пт) нужно ровно weekday_need дежурных, в субботу и воскресенье — ровно weekend_need. Строки unavailable вида "Имя YYYY-MM-DD" означают, что этот человек в этот день дежурить не может. Никто не дежурит больше max_streak дней подряд и больше max_shifts дней всего за период.

Среди всех допустимых графиков верните наименьший в таком порядке: дни сравниваются по очереди с первого, а состав дня — отсортированный по алфавиту список имён — сравнивается как список строк (по кодам символов). График записывается списком строк "YYYY-MM-DD:Имя1,Имя2" по дням, имена дня по алфавиту; день без дежурных — "YYYY-MM-DD:". Если допустимого графика нет, верните []. Календарь григорианский.

Пример: "2024-03-08", "2024-03-11", ["Cid", "Ann", "Bob"], 2, 1, ["Ann 2024-03-09"], 2, 3 → ["2024-03-08:Ann,Bob", "2024-03-09:Bob", "2024-03-10:Ann", "2024-03-11:Ann,Bob"].


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

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

Ещё задачи

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