Класс: общий подход (без указания предмета и класса). Задача реализуется как планирование графика смен с учетом ограничений.
Пояснение к условиям
- Нужно 2 выходных дня у каждого сотрудника в неделю.
- Один сотрудник (обозначим как A) не может работать в субботу и понедельник.
- Во вторник и среду необходимо усилить дневную смену (больше сотрудников на дневной смене).
Предложенные допущения для наглядности (можно заменить под ваши данные)
- Пусть всего 5 сотрудников: A, B, C, D, E.
- Требуемое покрытие дневной смены по дням недели (чтобы было понятно, как усиление работает):
- Пн: 3 человека на дневной смене
- Вт: 4 человека
- Ср: 4 человека
- Чт: 3 человека
- Пт: 3 человека
- Сб: 2 человека
- Вс: 2 человека
- У каждого сотрудника должно быть ровно 2 выходных дня в неделю.
- A обязан быть неработающим в субботу и в понедельник (те дни — его выходные).
Пошаговый способ формирования расписания
- Задайте для каждого сотрудника два выходных дня, соблюдая условие для A (Суббота и Понедельник). Примеры выходных:
- A: Сб, Пн
- B: Вс, Вт
- C: Ср, Сб
- D: Пн, Чт
- E: Пт, Вс
- Определите, в какие дни нужно больше людей на дневной смене (во вторник и среду — усиление). В другие дни число работников на дневной смене меньше.
- По каждому дню недели посмотрите, каких сотрудников можно задействовать на дневной смене (те, у кого в этот день не выпадают выходные).
- Соберите расписание так, чтобы:
- у каждого было ровно 2 выходных в неделю;
- на дневной смене в Tue и Wed было больше сотрудников (усиление);
- A действительно не работал в Сб и Пн.
- Проверьте соответствие всем ограничениям. При необходимости подгоните выходные некоторых сотрудников, чтобы соблюсти требуемые мощности смен.
Пример конкретного расписания (5 сотрудников: A, B, C, D, E)
Выходные_days (для примера, как в шаге 1):
- A: Сб, Пн
- B: Вс, Вт
- C: Ср, Сб
- D: Пн, Чт
- E: Пт, Вс
Дневная смена по дням:
- Понедельник: B, C, E
- Вторник: A, C, D, E
- Среда: A, B, D, E
- Четверг: A, B, C
- Пятница: A, B, D
- Суббота: B, E
- Воскресенье: A, C
Проверка условий
- У каждого по 2 выходных:
- A: Сб, Пн — верно
- B: Вс, Вт — верно
- C: Ср, Сб — верно
- D: Пн, Чт — верно
- E: Пт, Вс — верно
- Во вторник и среду усилена дневная смена:
- Вторник — 4 человека: A, C, D, E
- Среда — 4 человека: A, B, D, E
- На другие дни покрытие соответствует указанным требованиям (3 на понедельник, 3–2 на выходные и т.д.).
Замечания и варианты подстройки
- Если у вас другой запас сотрудников (меньше/больше 5), можно масштабировать аналогично:
- При N сотрудников можно определить требуемые числа по дням (например, Tue/Wed — N-1 на дневной смене, если нужен приличный запас), и подбирать выходные так, чтобы в эти дни было не больше одного человека, отсутствующего по выходному.
- Если вы хотите, чтобы на Tue/Wed было точно 4 человека, нужен как минимум 5 сотрудников (при строгих двух выходных на каждого), либо можно позволить иногда переработку/перекрытие смен.
- В реальном приложении удобнее хранить график в таблице/Excel и использовать формулы для проверки сумм на каждый день и сумм по выходным.
Готов помочь под ваши реальные данные
- Сообщите, сколько у вас сотрудников на смену и какие конкретные требования по дневной смене в каждый день (сколько человек требуется на дневной смене в каждый день недели).
- Можете прислать имеющиеся ограничения по каждому сотруднику (какие дни выходные) — я построю оптимальный расписок с учётом ваших условий и дам готовый вариант в виде списка по дням или таблицы.