Назначение учеников в классе - поток в сети?
У меня есть одна комната, которая открыта несколько дней в неделю, каждый день в разные часы (7:00-14:42, ...)
У меня несколько студентов, каждый из которых может посещать комнату в разные дни, в разные часы (у студентов может быть время посетить комнату за несколько дней)
Мне нужно назначить всех (или больше, чем я могу) студентов в комнату по следующим правилам:
- Каждый студент должен посещать комнату один раз в неделю ровно на 50 минут.
- После (только) 2-го студента в комнате, комната будет недоступна в течение следующих 20 минут
Пример второго правила:
+---------------+-----------------+
| TIME | INFO |
+---------------+-----------------+
| 7:00 - 7:50 | Student 1 |
| 7:50 - 8:40 | Student 2 |
| 8:40 - 9:00 | Mandatory break | // No student may be here
| 9:00 - 9:50 | Student 3 |
| 9:50 - 10:40 | Student 4 |
| 10:40 - 11:30 | Student 5 |
| . . . | . . . |
+---------------+-----------------+
Как я могу решить это? Я думал об использовании потока в сетях, но я столкнулся с проблемой.
Допустим, у меня есть этот поток. Когда ученик подключается ко времени, поток должен пройти через все группы, которые содержат время. Если какая-либо из этих групп занята, поток не может идти туда. Поэтому, когда ученик подключается ко времени, все времена, которые могут перекрываться со временем ученика, отключаются. Но я не знаю, как построить алгоритм, который позволил бы это.
Не могли бы вы сказать мне, как сделать алгоритм, чтобы эта работа? Я не знаю, как это сделать. Спасибо!