php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Algorithmus für schweizer system


 
Thor
02-10-2002, 13:54 
 
Lets get started: Ich habe einen 2-dimensionalen array und lasse ihn mit usort nach den pts(desc) sortieren;
ist die Anzahl der teams ungerade wird ein Freilos hinzugefügt. Ziel ist es einen Auslosungsalgorithmus zu schaffen,
der halt aus dem array paarungen macht, aber mit der Bedingung, dass kein Spiel doppelt vorkommt und immer teams mit möglichst gleicher punktzahl gegeneinander spielen. Irgendwie verpeile ich es andauernd nen richtigen algorithmus hinzukriegen oder bin einfach zu dumm dazu, deswegen will ich mal die schlauen Köpfe dieses Forums befragen ;)
[Die Begegnungen sollen dann halt wieder in einem array gespeichert werden]
code:

$sort = array('-pts');
function colcmp($a, $b)
{
global $sort;
for ($k=0; $k<count($sort); $k++)
{
$col = $sort[$k];
if (substr($col, 0, 1)=='-')
{
0 $m = -1;
$col = substr($col, 1);
}
else
$m = 1;
if ($a[$col] > $b[$col])
return $m;
elseif ($a[$col] < $b[$col])
return -$m;
}
return 0;
}

$res[0] = array("t_name" => "#mtw", "t_id" => "1", "pts" => "12");
$res[1] = array("t_name" => "#mouz", "t_id" => "2", "pts" => "14");
$res[2] = array("t_name" => "#sk", "t_id" => "3", "pts" => "6");
$res[3] = array("t_name" => "#tamm", "t_id" => "4", "pts" => "18");
$res[4] = array("t_name" => "#fairlight", "t_id" => "5", "pts" => "4");
$res[5] = array("t_name" => "#ernie", "t_id" => "6", "pts" => "11");
$res[6] = array("t_name" => "#bert", "t_id" => "7", "pts" => "1");
$res[7] = array("t_name" => "#lala", "t_id" => "8", "pts" => "3");
$res[8] = array("t_name" => "#moep", "t_id" => "9", "pts" => "7");
usort($res, "colcmp");
if(!is_int(count($res) / 2))
{
$res[count($res)] = array("t_name" => "#Freilos", "t_id" => "999999", "pts" => rand(1, $res[0][pts] + 1));
}
usort($res, 'colcmp');

 
slarti
02-10-2002, 14:22 
 
hmm... wenn du schon nen array hast, wo die teams nach punkten sortiert
sind, dann kannst du doch einfach den ersten gegen den zweiten, den dritten gegen
den vierten usw. antreten lassen, dann is nix doppelt und die punkte sind auch ungefähr gleich...

 
Thor
02-10-2002, 14:43 
 
jo dat is nicht das problem, nur soll das ganze über mehrere runden gehen, also die erste Runde ist nich das prob; nur in der zweiten, darf dann kein Spiel vorkommen, dass es in der ersten Runde schon gab

 
Thor
03-10-2002, 20:04 
 
versteht ihr das problem nicht oder überfordere ich euch? :(

Ich krieg es alleine echt nicht hin *muh*


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:08 Uhr.