2

新しい質問でこの質問をすることから否定的なフィードバックを得た後...これが私の改訂された質問です。はい、それは私が取り組んでいるのと同じプロジェクトですが、基本的にラウンドロビンタイプのスケジューラーが必要かどうかはわかりませんでした。

ラウンドロビンスタイルのホッケーリーグスケジューラーに取り組んでいますが、助けが必要です。

全体的な目標は、エンド管理者ユーザーが3つの変数をパンチインし、WEEKSカウンターがヒットするまでラウンドロビンスタイルのスケジュールを実行できるようにすることです。以下は、チームの数とゲームがプレイされる週の数の例です。

$Teams = array('team1','team2','team3','team4','team5','team6','team7','team8');
$Weeks = 16;

目標は、それを16回ループさせ、週に4つのゲームを作成し、各チームに週に1回プレイさせることです。ラウンドロビンアルゴリズムでは、可能なすべての組み合わせが行われるまで、ただし16週間を超えないように、チームが毎週異なるチームでプレーする必要があります。可能な組み合わせよりも4チーム以下のチームしかない場合は、週数に達するまでラウンドロビンを最初からやり直す必要があります。


編集:

私はこのスクリプトを実行するために必要なことに約90%取り組んでいます...しかし、私は1つのことに固執しています。多次元配列のマージについてサポートが必要です。

最初はティアです。次は週です(すべてが第1週です)。次に、チームのゲームが一致します。

Array
(
[1] => Array
    (
        [1] => Array
            (
                [1] => Array
                    (
                        [home] => Whalers
                        [visitor] => Lumberjacks
                    )

                [2] => Array
                    (
                        [home] => Team America
                        [visitor] => Wolfpack
                    )

            )

    )

[2] => Array
    (
        [1] => Array
            (
                [1] => Array
                    (
                        [home] => Warriors
                        [visitor] => Litchfield Builders
                    )

                [2] => Array
                    (
                        [home] => Icemen
                        [visitor] => Nighthawks
                    )

            )

    )

[3] => Array
    (
        [1] => Array
            (
                [1] => Array
                    (
                        [home] => The Freeze
                        [visitor] => Devils Rejects
                    )

                [2] => Array
                    (
                        [home] => Cobras
                        [visitor] => New Haven Raiders
                    )

                [3] => Array
                    (
                        [home] => Crusaders
                        [visitor] => Whalers
                    )

                [4] => Array
                    (
                        [home] => Blizzard
                        [visitor] => CT Redlines
                    )

            )

    )

)。

最終結果でティアを削除し、同じ週のゲームをすべてマージして、次のようにしたいと思います。

Array
    (
        [1] => Array
            (
                [1] => Array
                    (
                        [home] => Whalers
                        [visitor] => Lumberjacks
                    )

                [2] => Array
                    (
                        [home] => Team America
                        [visitor] => Wolfpack
                    )

                [3] => Array
                    (
                        [home] => Warriors
                        [visitor] => Litchfield Builders
                    )

                [4] => Array
                    (
                        [home] => Icemen
                        [visitor] => Nighthawks
                    )

                [5] => Array
                    (
                        [home] => The Freeze
                        [visitor] => Devils Rejects
                    )

                [6] => Array
                    (
                        [home] => Cobras
                        [visitor] => New Haven Raiders
                    )

                [6] => Array
                    (
                        [home] => Crusaders
                        [visitor] => Whalers
                    )

                [8] => Array
                    (
                        [home] => Blizzard
                        [visitor] => CT Redlines
                    )

            )

    )
4

4 に答える 4

1

多分このようなもの?

<?php
$teams = array(
    'Team 1',
    'Team 2',
    'Team 3',
    'Team 4',
    'Team 5',
    'Team 6',
    'Team 7',
    'Team 8'
);

function getMatches($teams) {
    shuffle($teams);
    return call_user_func_array('array_combine', array_chunk($teams, sizeof($teams) / 2));
}

for ($i = 0; $i < 14; $i += 1) {
    print_r(getMatches($teams));
}

スケジュールの定義がよくわからなかったので、少し説明していただければと思います。

于 2011-05-03T14:36:12.560 に答える
1

1 つをポップして、ランダム化し、別のものをポップします。あなたのゲームがあります。1 つが残っている場合、ランダムなチームが主力となり、今週 2 つのゲームをプレイする必要があります。

for ($week=1; $i<=$totalWeeksPlayed; $i++)
{

  $games = 0;
  $temp = $teams;

  while (count($temp) > 1)
  {
    $team = array_shift($temp);  
    shuffle($temp);
    $opponent = array_shift($temp);
    $game[$week][$games] = $team . ' vs' . $opponent;
    $games++;
  }

  if (count($temp) == 1)
  {
    $workhorses = $teams;
    unset($workhorses[array_search($temp[0], $teams));
    shuffle($workhorses);
    $team = $temp[0];
    $opponent = array_shift($workhorses);
    $game[$week][$games] = $team . ' vs' . $opponent;
    $games++;
  }

}
于 2011-05-03T14:54:50.290 に答える
0

チームのテーブルが与えられた場合、team(teamname);と言います。

そして備品の表

フィクスチャ(日付;);

「遊ぶ」ことで分解された関係

再生中(fixture_date。teamname);

次に、各日付を繰り返して、その日付のフィクスチャをまだ持っておらず、選択したチームをプレイしていない(または最近選択したチームをプレイしていない)チームをランダムに選択するだけです。

より簡単な解決策は、team [n](nは0 ....チーム数-1)がさまざまなXの値に対してteam [(n +(チーム数))%X]をプレイすることです。

于 2011-05-03T15:20:12.240 に答える