私は次のようなテーブルウィッチを持っています:
-------------------------------------------- | | インデックス | プレーヤー | 日付 | スコア | -------------------------------------------- | | 1 | ヤン | 2013-01-13 | 5 | -------------------------------------------- | | 2 | ピート | 2013-01-13 | 6 | -------------------------------------------- | | 3 | クラース | 2013-01-13 | 5 | -------------------------------------------- | | 4 | キース | 2013-01-13 | 7 | -------------------------------------------- | | 5 | ウィリアム | 2013-01-13 | 8 | -------------------------------------------- | | 6 | ジョン | 2013-01-13 | 4 | --------------------------------------------
2013-01-14 の試合のように、次の試合を行うために、2 つのスコアを同じチームにしたいと考えています。
日付期間ごとに 12 人のプレーヤーが存在するため、2013 年 1 月 13 日には 12 人のプレーヤーであり、2013 年 1 月 14 日にはまだ同じプレーヤーがいます。
彼らは 2 つのチームに分かれなければならないので、12 / 2 = 6. 各チームに 6 人の男性がいます。それは問題ではなく、両方のチームの合計スコアが等しいか、互いに近い必要があるということです。
12 人のプレーヤーのすべてのスコアが 77 の場合、2 つのチームの合計スコアは、このようにほぼ等しくなければなりません 77 / 2 = 38,5
チーム 1 - プレーヤー 6 - 合計スコア 37
チーム 2 - プレーヤー 6 - 合計スコア 40
最終的に、クエリの出力は次のようになります。
----------------------------------------------- | | インデックス | プレーヤー | 日付 | スコア | チーム | ----------------------------------------------- | | 1 | ヤン | 2013-01-13 | 5 | 1 | ----------------------------------------------- | | 2 | ピート | 2013-01-13 | 6 | 1 | ----------------------------------------------- | | 3 | クラース | 2013-01-13 | 8 | 1 | ----------------------------------------------- | | 4 | キース | 2013-01-13 | 7 | 1 | ----------------------------------------------- | | 5 | ウィリアム | 2013-01-13 | 5 | 1 | ----------------------------------------------- | | 6 | ジョン | 2013-01-13 | 6 | 1 | ----------------------------------------------- | | 7 | ゲリット | 2013-01-13 | 6 | 2 | ----------------------------------------------- | | 8 | マーチェ | 2013-01-13 | 6 | 2 | ----------------------------------------------- | | 9 | しゃら | 2013-01-13 | 8 | 2 | ----------------------------------------------- | | 10 | エルス | 2013-01-13 | 7 | 2 | ----------------------------------------------- | | 11 | アレン | 2013-01-13 | 5 | 2 | ----------------------------------------------- | | 12 | スティーブン | 2013-01-13 | 8 | 2 | -----------------------------------------------
と
----------------------------------------------- | | チーム | スコア | 日付 | プレーヤー | ----------------------------------------------- | | チーム 1 | 37 | 2013-01-13 | 6 | ----------------------------------------------- | | チーム 2 | 40 | 2013-01-13 | 6 | -----------------------------------------------
#Danack からインスピレーションを得て、これを作成しました。
$difference = 10;
$team_smnstlln = array();
for($q=0; $q<1000; $q++){
$players = array();
$team_smnstlln[$q] = array(
'team1' => array(),
'team2' => array(),
'total' => 0
);
$count1 = 0;
for($w=0; $w<6; $w++){
$player = pick_random(true);
$score1 = $team_smnstlln[$q]['team1'][$player] = $data[$player]['score'];
$count1 = $count1 + $score1;
}
$count2 = 0;
for($w=6; $w<12; $w++){
$player = pick_random(true);
$score2 = $team_smnstlln[$q]['team2'][$player] = $data[$player]['score'];
$count2 = $count2 + $score2;
}
if($count1 > $count2){
$total = $count1 - $count2;
}
elseif($count2 > $count1){
$total = $count2 - $count1;
}
else{
$total = 0;
}
$team_smnstlln[$q]['total'] = $total;
if($team_smnstlln[$q]['total'] == 0){
$difference = 0;
$winner = $q;
break;
}
elseif($team_smnstlln[$q]['total'] < $difference){
$difference = $team_smnstlln[$q]['total'];
$winner = $q;
}
}
echo "Kleinst gekozen set met score verschil van $difference punten. array $winner is gekozen<br>";
$team1 = $team_smnstlln[$winner]['team1'];
$team2 = $team_smnstlln[$winner]['team2'];
print_r($team1);
print_r($team2);
// random player picker
function pick_random($gonogo){
global $players;
$go = true;
$total_players = 11;
while($go){
$player = rand(0, $total_players);
if(!in_array($player, $players)){
$players[] = $player;
$go = false;
}
}
return $player;
}
このコードは、1000 の異なるチーム設定を実行します。スコアの差が 0 になると、最高の対等チームの試合が終了します。または、差が0でない場合、最低の結果が返されます