Algorithmus für schweizer system

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Algorithmus für schweizer system

    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:
    PHP-Code:
    $sort = array('-pts');
    function 
    colcmp($a$b)
    {
      global 
    $sort;
      for (
    $k=0$k<count($sort); $k++)
      {
        
    $col $sort[$k];
        if (
    substr($col01)=='-')
        {
    0      $m = -1;
          
    $col substr($col1);
        }
        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'); 
    /me

  • #2
    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...
    eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

    Kommentar


    • #3
      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
      /me

      Kommentar


      • #4
        versteht ihr das problem nicht oder überfordere ich euch?

        Ich krieg es alleine echt nicht hin *muh*
        /me

        Kommentar

        Lädt...
        X