# Библиотека формирующая список свободных временных интервалов в графике сотрудника для формирования оптимального графика работы сотрудников (ДЭ22)
## Разработка библиотеки
Разработайте библиотеку, которая позволит вернуть список
свободных временных интервалов (заданного размера) в графике сотрудника для формирования оптимального графика работы сотрудников.
Необходимо обязательно следовать правилам именования библиотек, классов и методов в них. В случае ошибок в рамках именования ваша работа не может быть проверена
и ваш результат не будет зачтен. Классы и методы должны содержать модификатор **public** (если это реализуемо в рамках платформы), чтобы внешние приложения могли получить к ним доступ.
Вход:
* список занятых промежутков времени (в двух массивах: _startTimes_ - начало, _durations_ - длительность),
* минимальное необходимое время для работы менеджера (consultationTime),
* рабочий день сотрудника (начало - _beginWorkingTime_ и завершение - _endWorkingTime_)
Выход:
* список подходящих свободных временных промежутков (в массив строк формата HH:mm-HH:mm)
Требования к именованиям и форматам:
| C# | Java | Python
-------|----|------|--------
Библиотека классов | SF2022User{NN}Lib.dll | SF2022User{NN}Lib.jar | SF2022User{NN}Lib
Название класса | Calculations | Calculations | Calculations
Название метода | AvailablePeriods() | availablePeriods() | available_periods()
Входящие обязательные параметры | TimeSpan[] startTimes,
int[] durations,
TimeSpan beginWorkingTime,
TimeSpan endWorkingTime,
int consultationTime |LocalTime[] startTimes,
int[] durations,
LocalTime beginWorkingTime,
LocalTime endWorkingTime,
int consultationTime | time[] start_times,
int[] durations,
time begin_working_time,
time end_working_time,
int consultation_time
Возвращаемые параметры | string[] | string[] | string[]
Пример:
Вход | Выход
-----|------
startTimes [10:00, 11:00, 15:00, 15:30, 16:50],
durations [60, 30, 10, 10, 40],
beginWorkingTime 08:00,
endWorkingTime 18:00,
consultationTime 30 |["08:00-08:30",
"08:30-09:00",
"09:00-09:30",
"09:30-10:00",
"11:30-12:00",
"12:00-12:30",
"12:30-13:00",
"13:00-13:30",
"13:30-14:00",
"14:00-14:30",
"14:30-15:00",
"15:40-16:10",
"16:10-16:40",
"17:30-18:00"]
## Тестирование программных решений
### Тестовые сценарии
Опишите 10 тестовых сценариев для библиотеки, функционал которой описан ранее. Важно, чтобы тестовые сценарии предусматривали различные ситуации. Например, недостаточное время в промежутках между ранее созданными
консультациями, либо в начале рабочего дня, либо в конце рабочего дня; различная длительность консультация и т.д.
### Модульные тесты
Реализуйте unit-тесты по описанным тестовым сценариям