Частый гость
Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
[+]
|
Добрый день уважаемые пользователи данного портала. Пишу вам с просьбой помочь мне доделать алгоритм распределения матчей и генерации данной сетки. Суть проблемы: если при регистрации турнира указать максимум 16 команд и в процессе регистрации на турнир зарегистрируются 16 команд, то всё норм, а если хотя бы на одну команду меньше, то вот здесь уже начинается проблемос. Вот как должно работать, если хотя бы на 1 команду меньше. Ниже описывается сколько участников всупят в первый день, у меня же это считается первая стадия, точнее максимальная(Стадия - Круг, в котором встречаются четыре игрока, называется полуфиналом. При числе участников свыше 16 круг, ему предшествующий, т. е. в котором встречаются восемь игроков, называется четвертьфиналом.)
Спойлер (Отобразить)Узнать, какое количество участников вступит в соревнование в первый день, можно при помощи формулы (А—2п) х 2, где А есть условное число всех записавшихся участников, а п будет такая степень двух, при которой мы получим число меньшее, ближайшее к А.
Пример: количество участников А — 12. Раскроем формулу последовательно: (А —2") х 2 = (12 — 23) Х2 = (12 — 8) х 2 = 4 х 2 = 8, Восемь участников первого дня получают средние номера, 3, 4, 5, 6, 7, 8, 9 и 10-й, а участники, получившие по жребию верхние и нижние номера, вступают в соревнование со второго дня. Когда число участников нечетное, то количество вступающих в игру со второго круга на единицу больше в нижней половине таблицы, а соревнующихся пар, играющих в первом круге, наоборот, больше на единицу в верхней половине таблицы.
При нечетном количестве, например при 13 участниках, формула последовательно раскрывается так: (13 — 2п) х2 = (13 — 8)х2 = 5 X 2 = 10. Десять участников вступают в соревнование с первого дня, это средние номера, а верхние и нижние вступают со второго дня, причем снизу два, а сверху один
Теперь что у меня не получается: я могу расчитать количество команд, которые должны начать играть в первый день, и вот тут начинается проблемос. Возьмем например максимум 16 команд, это 4 стадии. У меня зарегистрировались всего 9, получается на 4 стадии играют 2 команды(рассчитывая по формуле), а остальные 7 начинают с третьей стадии. Сетка генерируется по матчам, таблица матчей выглядит так:
Спойлер (Отобразить)CREATE TABLE IF NOT EXISTS `matchs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_tour` int(11) DEFAULT NULL COMMENT 'Ид турнира',
`team_id_1` int(11) DEFAULT NULL COMMENT 'Ид команды 1',
`team_id_2` int(11) DEFAULT NULL COMMENT 'Ид команды 2',
`group_match` varchar(10) DEFAULT NULL COMMENT 'Группа',
`stage` int(11) DEFAULT NULL COMMENT 'Стадия',
`cell` int(11) DEFAULT NULL COMMENT 'Матч или ячейка',
`next_stage` int(11) DEFAULT NULL COMMENT 'Следующая стадия',
`next_cell` int(11) DEFAULT NULL COMMENT 'Следующая ячейка',
`next_team_id` varchar(32) DEFAULT NULL COMMENT 'Какое поле обновить:team_id_1 или team_id_2',
`last_match_1` int(11) DEFAULT NULL COMMENT 'Предыдущий матч команды 1',
`last_match_2` int(11) DEFAULT NULL COMMENT 'Предыдущий матч команды 2',
`score_1` int(11) DEFAULT NULL COMMENT 'Счет команды 1',
`score_2` int(11) DEFAULT NULL COMMENT 'Счет команды 2',
`win` int(11) DEFAULT NULL COMMENT 'Победитель матча или турнира',
`date_match` varchar(32) DEFAULT NULL COMMENT 'Дата матча',
`stream` varchar(32) DEFAULT NULL COMMENT 'Трансляция матча',
`protest` int(11) DEFAULT NULL COMMENT 'Протест',
`status` int(11) DEFAULT NULL COMMENT 'Статус матча(ожидается, играется, сыгран, отменен)',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
--
-- Дамп данных таблицы `dynamit_matchs`
--
INSERT INTO `matchs` (`id`, `id_tour`, `team_id_1`, `team_id_2`, `group_match`, `stage`, `cell`, `next_stage`, `next_cell`, `next_team_id`, `last_match_1`, `last_match_2`, `score_1`, `score_2`, `win`, `date_match`, `stream`, `protest`, `status`) VALUES
(1, 1, 15, 12, NULL, 4, 1, 3, 1, 'team_id_1', NULL, NULL, 16, 0, 15, NULL, NULL, NULL, NULL),
(2, 1, 6, 5, NULL, 4, 2, 3, 1, 'team_id_2', NULL, NULL, 20, 20, 5, NULL, NULL, NULL, NULL),
(3, 1, 2, 3, NULL, 4, 3, 3, 2, 'team_id_1', NULL, NULL, 20, 0, 2, NULL, NULL, NULL, NULL),
(4, 1, 13, 9, NULL, 4, 4, 3, 2, 'team_id_2', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5, 1, 16, 1, NULL, 4, 5, 3, 3, 'team_id_1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6, 1, 7, 10, NULL, 4, 6, 3, 3, 'team_id_2', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7, 1, 11, 14, NULL, 4, 7, 3, 4, 'team_id_1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(8, 1, 8, 4, NULL, 4, 8, 3, 4, 'team_id_2', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(9, 1, 15, 5, NULL, 3, 1, 2, 1, 'team_id_1', 1, 2, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(10, 1, 2, 0, NULL, 3, 2, 2, 1, 'team_id_2', 3, NULL, 21, 0, 2, NULL, NULL, NULL, NULL),
(11, 1, 0, 0, NULL, 3, 3, 2, 2, 'team_id_1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(12, 1, 0, 0, NULL, 3, 4, 2, 2, 'team_id_2', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(13, 1, 0, 2, NULL, 2, 1, 1, 1, 'team_id_1', NULL, 10, 0, 21, 2, NULL, NULL, NULL, NULL),
(14, 1, 0, 0, NULL, 2, 2, 1, 1, 'team_id_2', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(15, 1, 2, 0, NULL, 1, 1, 0, 1, 'team_id_1', 13, NULL, 22, 0, 2, NULL, NULL, NULL, NULL);
Так вот как мне сделать, чтобы скрипт правильно понимал, сколько команд в первой стадии, а остальных кидал на предыдущую стадию. Если нужен скрипт, который генерирует данный запрос, выложу. Помогите пожалуйста. Третий день голову ломаю, ничего придумать не могу(
|