/task2

Primary LanguageJavaScript

Второе задание

Предметная область

Студенты в Школе разработки интерфейсов делятся на команды. В процессе обучения студенты выполняют задания. Оценки за них ставятся либо конкретному студенту, либо всей команде студентов. В конце Школы перед менторами стоит задача распределения студентов. Каждый ментор составляет приоритизированный список студентов, в которых он заинтересован. Каждый из студентов также составляет приоритизированный список менторов, к которым он бы хотел пойти.

Задача

Создайте библиотеку, которая реализует такой программный интерфейс: — добавление студентов-участников и объединение их в команды; — создание командных и индивидуальных заданий; — выставление оценок за задание; — создание приоритизированных списков менторов и студентов; — решение задачи распределения студентов среди менторов в соответствии с приоритизированными списками.

Решение

Задачу распределения студентов среди менторов в соответствии с приоритизированными списками, свел к задаче поска минимального по весу паросочетания, венгерский алгоритм, что-бы всем студентам был назначен ментор, прогоняем его несколько раз, исключая тех которым назначен ментор

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

Включает классный веб-интерфейс командной строки