Создание расписания php

539
12 июня 2017, 23:13

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

Дано:

N-количество команд

Каждая команда играет с каждой (круговая система)

Количество туров: N-1 (команда не может играть сама с собой)

Команда не может играть 2 раза за 1 тур; команда может играть с другой командой лишь 1 раз за время турнира

На данный момент продумываю идеологию этого скрипта. Сейчас считаю нормальным сделать вот так:

$count_teams = количество команд в турнире
$array_games = массив, в который будем записывать все игры
for ($i, $i < $count_teams; $i++) {
     *составить пары из массива $count_teams* (Как это сделать???) 
     *проверить, не играла ли данная пара в турнире*
     *если не играла, записать в массив игру*  
}

На выходе хочу получить такой массив:

$arr = array(
   'tour1' => array(
      '0' => array (
         '0' => 'team1',
         '1' => 'team2'
      )
      '1' => array (
         '0' => 'team3',
         '1' => 'team4'
      )
   )
'tour2' => array(
      '0' => array (
         '0' => 'team1',
         '1' => 'team4'
      )
      '1' => array (
         '0' => 'team2',
         '1' => 'team3'
      )
   )
);

Остался лишь вопрос в реализации этого. Как считаете, насколько это правильно? Какие есть еще методы создания данного функционала? Заранее спасибо!

UPD: Нашел точный аналог того, что мне нужно - http://challonge.com/ru/tournament/bracket_generator Вопрос 1 - как сделать это на php?

Answer 1
$teams=['t1','t2','t3','t4','t5','t6','t7','t8'];
function teamInTour($tour, $team){
    foreach($tour as $game){
        if(in_array($team, $game))return true;
    }
    return false;
}
$tours=[];
$games=[];
for($i=0;$i<count($teams);$i++){
    for($j=$i+1;$j<count($teams);$j++){
        $games[]=[$teams[$i],$teams[$j]];
    }
}
for($i=0;$i<count($teams)-1;$i++){
    $name='tour'.$i;
    $tours[$name]=[];
    foreach($games as $key=>$game){
        if(teamInTour($tours[$name],$game[0])||teamInTour($tours[$name],$game[1]))continue;
        $tours[$name][]=$game;
        unset($games[$key]);
    }
}
foreach($tours as &$t) {shuffle($t);}

sandbox

READ ALSO
1C-Bitrix CIBlockElement::GetByID

1C-Bitrix CIBlockElement::GetByID

Нужно в файле bitrix/php_interface/initphp вывести значение свойства блока

428
Как работает валидация на JavaScript?

Как работает валидация на JavaScript?

Добрый деньНемного не понимаю как работают проверки на клиенте и сервере

290
Не вырисовывает таблицу php

Не вырисовывает таблицу php

Подскажите в чем проблема,почему не вырисовывает таблицу

202
Как вывести картинки(дир) с бд прямиком на слайдер?

Как вывести картинки(дир) с бд прямиком на слайдер?

Суть такова: я загружаю картинку - в бд я заношу только директорию картинки и на нужной странице вывожу еёВывод:

304