Фрилансеры предложат решение вашей задачи уже через несколько минут!

Публикация заказа на фриланс бирже не займет много времени.

9 лет назад
Иван О.
Иван О. 
39 лет, Украина
9 лет в сервисе
Был онлайн 9 лет назад
9 лет назад

Задание: написать алгоритм распределения участников соревнования на группы
Инструментарий: 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м в одну из групп. Если нет группы с количеством участником <3, участник выставляется на этапе, когда это возможно.

5. Требования к написанию
5.1 База данных
Все поля таблиц должны иметь такие имена, которые однозначно идентифицируют его назначение
например:
Имя - first_name / firstname
Фамилия - last_name / lastname
Пол - gender
Возраст age
и т.д.

5.2 Код программы
Имена переменных, функция, классов и методов должны иметь такие имена, которые однозначно идентифицируют их назначение
$firstName, $lastName, $isLeader, etc.
Приветствуются комментарии.

  1. Прием заявок
  2. Выбор исполнителя
  3. Выполнение заказа
  4. Обмен отзывами

Нет заявок

Другие заказы в категории «Веб-программирование»

Здесь заказчик и фрилансеры могут обсуждать заказ до начала его выполнения.
Фрилансеры могут участвовать в обсуждении только после подачи заявки.
Здесь заказчик будет контролировать выполнение заказа и общаться с исполнителем.
Доступ к этому разделу имеют только заказчик и выбранный исполнитель.
Все материалы этого раздела закрыты от поисковых систем.