RTTF.ru - настольный теннис

Форум

Организация турнира - помогите пожалуйста!

chatonau

Привет! Я сам в программировании ничего не понимаю, просто достала одна проблемка. Может прочтёт кто сведущий и поможет. Задача вроде бы не такая уж и сложная… Предисловие Я играю в клубе в настольный теннис. Раз в год мы устраиваем новогодний турнир для всех членов клуба. Турнир парный чтобы уравнять шансы на выигрыш, поскольку в клубе есть сильные и слабые игроки. Всего членов в клубе 30 человек, в этом году в турнире участвуют 24 человека. 12 сильных и 12 слабых. Суть задачи В начале из общего списка в 24 человека нужно по случайному принципу образовать пары сильный-слабый. Затем эти 12 пар должны по случайному принципу сыграть между собой, те одна какая-то пара с другой. Результаты данного тура фиксируются и опять производится разделение игроков для следующего тура. По идее каждый сильный должен сыграть по разу в одной паре с каждым слабым. По возможности нужно также избегать, чтобы кто-то слишком часто играл против одного и того же соперника. Т.е. всего проводится 12 туров. Игроки, индивидуально одержавшие наибольшее количество побед становятся победителями турнира. И вот это разделение игроков по парам и потом разделение пар вручную является очень муторной задачей. Между турами нам приходится ждать по полчаса и турнир затягивается чуть ли не до ночи. Может кто может помочь и компьютеризировать это дело? Весь наш клуб был бы очень признателен. Если я что-то непонятно написал и есть ещё вопросы, то с удовольствием отвечу.


343
бортики для настольного тенниса
Телеграм-канал о настольном теннисе

Комментарии10

сначала новые | сначала старые | по рейтингу
DF

Пришлите файл с ошибкой на адрес, который я отправляю вам в личку. Попробуем разобраться.

chatonau

Аааааа....жалко! Я составил собственный небольшой турнирчик на 16 персон, как Вы советовали. Первые страницы работают отлично, но на четвёртой ошибочка выскакивает, будь она неладна! На странице 4. Протокол Когда жму на "Получить протокол" выскакивает ошибка Runtime error '9':Subscript out of range и когда жму на Debug, то вот эта строка выделена жёлтым: nP = Sheets("2.Çàÿâêà").Cells(3, 3) Я тогда попробовал всю процедуру с Вашим оригинальным файлом и на этом же месте получил эту же ошибку. Может можно пофиксить? Турнир кстати проводится 22-го декабря. И большое Вам спасибо за Ваше время и желание помочь!

chatonau

Большое спасибо! Вы нам очень помогли! Будем тестировать.

DF

ВАЖНО: если вы получили протокол и начали играть - не нажимайте больше кнопок кроме как на пятом листе с итоговой таблицей. В лучшем случае вы затрете протокол (его можно восстановить по кнопке на 4-м листе, но придется заново вбить результаты). В худшем - поменяете напарников или порядок туров. Будет полный бардак.

Получили протокол - и прямо по нему вызываете да счет ставите.

DF
Делаете копию файла, называете ее "шаблон" и храните отдельно. Лучше заархивировать. Это чтобы у вас всегда был оригинальный файл под рукой, не измененный. И всегда можно было начать сначала. Теперь берете шаблон, называете его как-нибудь "финал 2010. С этим файлом дальше и работаете (а шаблон лежит отдельно). Идете на лист "1.Rating"г и копируете туда свой рейтинг. Наш рейтинг там только для примера. Идете на лист "2.Заявка". В колонку "В" (она голубого цвета) записываете своих игроков. Сейчас там 24 игрока - для примера из нашего рейтинга. Их удалите. Если правильно записали (именно так, как в рейтинг-листе) - в колонке "рейтинг" появляется рейтинг игрока (автоматически). Вводите ЧЕТНОЕ число игроков. Если число игроков нечетное - компьютер может взорваться! :) Ввели своих игроков, например, 24 человека. В колонке "G" "Ранжированный список" они все выстраиваются по убывания рейтинга (сильные - вверху списка, слабые - внизу). Если их там меньше 24, значит, где-то вы неправильно записали игрока или этого игрока вообще нет в рейтинге (надо тогда его туда внести). Теперь нужно сформировать стартовый список - колонку "К". Стартовый список отличается от ранжированного тем, что он перемешивает слабых игроков. Сильные не меняют своего порядка, а слабые переставляются случайным образом. Кнопка "перемешать слабых" очищает список и выводит новый "замес". Кнопка "очистить" просто очищает область данных. Промежуточный итог: на листе "2.Заявка" в колонке "К" сформирован стартовый спиок игроков. Назначены случайные напарники. В случае 24 игроков 1 номер играет первый тур с 13, 2 с 14 и т.д. Теперь идем на лист "3.Порядок" и получаем расписание матчей. Пара идентифицируется по своей "первой ракетке". В колонках "В-С-D" вы видите пример расписания матчей по турам. В первой колонке указан номер тура, а во второй и третьей - номера пар-соперниц. Например, если там стоят 5, 7 - это означает, что играет пара 5 против пары 7. В паре 5 первая ракетка - пятый номер посева. В паре 7 - первая ракетка 7-й номер посева. А вот то, с кем они играют, зависит от номера тура. Это можно посмотреть правее, в колонках под общим заголовком "Распределение партнеров в парах по турам". Там горизонтальный заголовок - это номер тура, левый вертикальный столбец-заголовок - номер первой ракетки, а на пересечении - номер второй ракетки, которая играет в паре в данном туре с данным первым номером. На листе  "3.Порядок" - пять кнопок. "Рандомизация порядка матчей в турах" - дополнительный случайный параметр. От него зависит, как именно распределены матчи по турам. Например, пары (1,*) и (2,*) могут играть между собой в первом туре, в третьем или в последнем. Выбор - случаен. Кнопки "очистить" и рядом "получить расписание матчей" - для получения расписания матчей по турам. Кнопки "очистить" и "получить пары по турам" - для назначения напарников в каждом туре. Промежуточный итог: на листе "3.Порядок" нажимаете последовательно три кнопки: "Получить случайный параметр" (не обязательно); "Получить расписание матчей" - выдает разблюдовку по турам/ по матчам (указаны первые ракетки соперников); "Получить пары по турам". После этого порядок вызова пар и порядок распределения партнеров полностью определен.  Идем на лист "4.Протокол". Жмем "Получить протокол!" и получаем протокол. (кнопки "очистить!" на всех листах просто очищают область данных. но очистка есть и в основных кнопках). Счет по сетам вводим в центральные колонки. Если матча не было (техническая победа) - ставите туда "какие-нибудь буквы" на ваш вкус. Или ничего не ставите вообще. Если матч был - ставите счет по сетам. Если пар - нечетное число, то в каждом туре одна из пар пропускает тур (появляется строка с надписью dummy). При этом первые ракетки пропускают каждая по одному туру. А вот вторые могут "попасть". Это несчастный случай и я с ним бороться не умею( Это надо сильно подумать. В результате некоторые вторые номера могут сыграть матчей больше остальных, а некоторые - меньше. При расчете мест надо это учитывать. Например, можно для каждого игрока рассчитать среднее количество очков = "Количество очков"/"Количество сыгранных матчей". Но если у вас общее число участников делится на 4 (т.е. число пар четно) - то все хорошо и накладок нет. На листе "5.Результаты" - таблица результатов. К очкам добавляется еще одна тысячная отношения сетов "выигр/ проигр". Это - приоритет при равенстве очков. "Треугольники" здесь не имеют смысла, так как в каждом туре - пары разные. Очень советую протестировать на коротком модельном турнире. Например, на 8 пар (16 участников). Я писал это за 1 день :)
chatonau

Спасибо Вам огромное! Вот наши мужики обрадуются! Турнир то на будущей неделе. За инструкцию были бы конечно особо благодарны, тк в экселе не мастаки.

DF

Прилепил к вашей теме атачмент - эксель файл.

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

Инструкцию напишу чуть позже. В принципе, если поиграться - можно понять. Завтра или в понедельник напишу пошагово.

chatonau
ответ на комментарий DF Далее следим только за сильными и добиваемся того, чтобы они играли между собой по 1 разу. Как будто у нас группа на 12 игроков. Берете расписание туров для группы на 12 и прямо по нему вызываете.

Вы имеете в виду, что то же самое, что мы выше проделали для игроков, сейчас проделываем для 12-ти пар, где первое чилсо = сильный игрок? 1-7 2-8 3-9 ...

DF

1. Компьютеризировать - я сейчас не возьмусь, много другой работы.

2. Предлагаю простой алгоритм:

- В каждом туре выбирайте пары сильный-слабый не случайно, а жестко. Например, в первом туре пары такие:

1-13

2-14

3-15

4-16

...

12-24

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

1-14

2-15

3-16

...

11-24

12-1

В следующем туре - еще на единичку. Пары:

1-15

2-16

3-17

...

10-24

11-1

12-2

Таким образом, на каждый тур у вас есть готовый набор пар.

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

При этом так как сильные встречаются друг против друга только по одному разу, то и пары одинаковые друг против друга не встретятся.

Остается только проблема с последним, 12-м туром. Ее решать "вручную".

Омут

В бридж играют 4 человека, поищите схему движения [b]индивидуальных[/b] турниров по бриджу. Общая идея: столы нумеруются, игроки делятся на 4 равные группы, каждый раз вместе играют игроки из 4-х групп. Сыграв междусобойчик, игроки переходят на столы с номерами +1, +2, -1 или сидят на месте, в зависимости от своей изначальной группы движения по турам.