Студенты в Школе разработки интерфейсов делятся на команды. В процессе обучения студенты выполняют задания. Оценки за них ставятся либо конкретному студенту, либо всей команде студентов. В конце Школы перед менторами стоит задача распределения студентов. Каждый ментор составляет приоритизированный список студентов, в которых он заинтересован. Каждый из студентов также составляет приоритизированный список менторов, к которым он бы хотел пойти.
Создайте библиотеку, которая реализует такой программный интерфейс: — добавление студентов-участников и объединение их в команды; — создание командных и индивидуальных заданий; — выставление оценок за задание; — создание приоритизированных списков менторов и студентов; — решение задачи распределения студентов среди менторов в соответствии с приоритизированными списками.
Задачу распределения студентов среди менторов в соответствии с приоритизированными списками, свел к задаче поска минимального по весу паросочетания, венгерский алгоритм, что-бы всем студентам был назначен ментор, прогоняем его несколько раз, исключая тех которым назначен ментор
state
– что-бы посмотреть, состояние системы
distribution
– что-бы распределить студентов по менторам
а вся работа данными происходит плоско через интерфейс диспатча
dispatch {"type":"ADD","value":{"type":"student","name":"Vasiliy Petrov","prior":[0,1]}}
- ADD
- type: [student, mentor, task, group] {String}
- if [type: student, mentor]
- name {String}
- prior {Array}
- if [type: task]
- task {String} Название задачи
- assign {Object} {type: ['students', 'groups']}
- if [type: group]
- members {Array} of students id
- REMOVE
- type: [student, mentor, task, group] {String}
- id {Number}
- MODIFY
- type: [student, mentor, task, group] {String}
- if [type: student, mentor]
- name {String}
- prior {Array}
- if [type: task]
- assign {Object} {type: ['students', 'groups']}
- check {Boolean or Number}
- task {String} Новое название задачи
- if [type: group]
- members {Array} of students id
Включает классный веб-интерфейс командной строки