Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Задание: написать алгоритм распределения участников соревнования на группы

Инструментарий: PHP, MySQL

1. Классификация участников

Данные об участниках состоят из 2х частей: статической и динамической

1.1 Статические данные об участниках

К этому типу относятся такие данные, которые не меняются со временем:

- ФИО участника;

- пол

- дата рождения

1.2 Динамические данные об участниках

К этому типу относятся такие данные, которые меняются со временем:

- вес;

- рост;

- уровень (по критерию дисциплины - пояс);

- флаг "лидер" (флаг используется в пункте 3 - формирование дерева спаррингов)

Таблица динамических данных должна поддерживать версионность, т.е. для любого участника

должна быть возможность просмотреть предыдущую информацию (записи должны быть маркированы датой изменения)

При формировании групп должна использоваться самая актуальная информация.

/+Внешний ключ на статические данные об участнике/

/+Внешний ключ на школу, которой принадлежит участник/

2. Соревнования

2.1 Классификация соревнований на категории

Участники соревнований могут делиться на несколько категорий в зависимости от параметров участников.

Так любое соревнование может иметь 1+ категорий участников.

Категории на соревнованиях характеризуются по нижеописанным признакам:

- возраст от;

- возраст до;

- вес от;

- вес до;

- пол.

/+Таблица соревнований имеет внешний ключ на статические данные о конкретной категории/

2.2 Порядок работы

Пользователь имеет возможность просмотреть все соревнования

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

Для каждой категории можно просмотреть полный список участников, а также дерево спаррингов (состязаний)

Описание требований к формированию дерева спаррингов описано в пункте 3.

3. Требования к формированию дерева спаррингов

3.1 Деление на группы

Результатом формирования дерева является множество пар и триплетов участников.

Правильное формирование образуется за счет рекурсивного деления общего (и образуемых подмножеств) количества участников на 2 до тех пор, пока каждое из множеств не будет состоять из 2 или 3 участников.

Пример разделения 12и участников

12

-----------6

------------------------3

------------------------3

-----------6

------------------------3

------------------------3

4 триплета формируют "результирующее множество групп"

3.2 Требования к сформированному множеству участников (из пункта 3.1)

Наборы участников описаны в пункте 3.1. Данный пункт описывает требования к формированию непосредственно пар и триплетов.

а. В первую очередь в группах должны заполняться первые 2 поля (для триплетов). 3е поле заполняется лидерами и в случае недостачи места.

б. Участники с пометкой "лидер" обрабатываются в последнюю очередь (не участвуют в общем алгоритме)

в. участники одной школы должны быть максимально рассредоточены (так, чтобы вероятность встречи соперников с одной школы была минимальной). Участники одной школы находятся равноудаленно друг от друга в результирующем множестве групп.

в. После начала соревнований (2й+ этапы) должна быть возможность формировать пары такими способами:

- вручную: пользователь вручную выставляет пары (используется после автоматического формирования пар)

- соседние (в следующем этапе встречаются соперники, соседние по турнирной таблице)

- оптимальное распределение школ (все множество победителей формируется так, чтобы свести к минимуму встречу соперников одной школы)

3.3 Требования к интерфейсу работы с множеством участников

а. результирующее множество групп формируется автоматически программой, но пользователь имеет возможность редактирования (менять участников местами) на любом этапе соревнования.

б. пользователь должен иметь возможность видеть турнирное дерево и выбирать победителя в существующей паре

в. Возможность просмотра и печати всего дерева турнира.

г. любого участника можно удалить из турнирного дерева (дисквалифицировать). В таком случае оставшийся участник выставляется 3м в одну из групп. Если нет группы с количеством участником

5. Требования к написанию

5.1 База данных

Все поля таблиц должны иметь такие имена, которые однозначно идентифицируют его назначение

например:

Имя - first_name / firstname

Фамилия - last_name / lastname

Пол - gender

Возраст age

и т.д.

5.2 Код программы

Имена переменных, функция, классов и методов должны иметь такие имена, которые однозначно идентифицируют их назначение

$firstName, $lastName, $isLeader, etc.

Приветствуются комментарии.

14 лет назад
need_todo
Иван 
43 годаУкраина
14 лет в сервисе
Был
14 лет назад