Work Schedule Generator

Work Schedule Generator

example

Ви отримуєте послідовність працівників з їхніми робочими вподобаннями та навичками. Також у вас є бізнес-потреби у вигляді необхідного робочого часу та завдань. Ваша функція повинна повернути розклад, який задовольняє бізнес-потреби при наявних працівниках (якщо це можливо). Тепер давайте зануримося в деталі.

staff це словник, де ключами є імена працівників, а значеннями - словники. Кожне значення словника включає три пари ключ-значення:

  • "pref_shifts" - список рядків: зміни, працівник хоче працювати (може бути "first", "second" або обидва в такому порядку);
  • "days_off" - список рядків: дні, у які працівник хоче бути вільним (повні назви днів тижня);
  • "skills" - список рядків: роботи, які працівник може виконувати.

business_needs це список з трьох значень: день тижня, для якого потрібно скласти розклад - рядок; кількість змін у цей день - ціле число; завдання, які потрібно виконати у цей день - список з рядків.

Зауваження про зміни. Кожен працівник може працювати у першу зміну, другу або обидві (цілий день), за винятком своїх вихідних. Кількість змін для бізнесу означає кількість різних змін, які можуть бути присутніми в цей день. Наприклад, якщо кількість змін 3, то під неї може підпадати працівник, який працює повний день (обидві його зміни, "перша" і "друга", разом - 2), і ще один працівник (оскільки кожен працівник має принаймні одну зміну), або три зміни від різних працівників. Кількість змін має бути поділена порівну між "first" та "second" денними змінами. Якщо кількість змін непарна (і не дорівнює 1), то "first" денна зміна повинна включати на одну зміну більше, ніж "second" денна зміна.

Навички можуть бути частково/повністю однаковими для різних працівників. Тому, коли ви заповнюєте денні зміни, вибирайте працівників з меншою кількістю навичок - вони, як правило, менше оплачуються. Якщо кількість однакова - обирайте за іменами в алфавітному порядку. З точки зору залученості працівників, перша денна зміна має пріоритет: там важливіше мати працівників з меншою кількістю навичок. Завдання - це мінімальна послідовність, яку потрібно виконати - послідовність агрегованих навичок на цей день може бути ширшою. Кожне...

You should be an authorized user in order to see the full description and start solving this mission.