spielplan wieder einmal

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

  • spielplan wieder einmal

    hallo an alle, es gibt ja einige threads hier im forum wie man für eine liga (bei mir beispielsweise mit 10 mannschaften) automatisch spielpläne erstellen kann.

    meine idee war, zuerst einmal alle möglichen spiele zu erzeugen und diese dann auf die richtigen spieltage aufzuteilen. das erzeugen aller möglichen spiele geht mit ineinander geschachtelten schleifen ja relativ einfach.

    PHP-Code:
        $i=1;
        while (
    $i) {
            for (
    $j=1$j<=$anz_teams$j++) {
                if (
    $j<=$i) {
                    
    $j=$i+1;
                }
                if (
    $j>10) {
                    
    $j=($j%10);
                }

                
    $team_home mysql_query("SELECT team FROM liga where id=$i");
                
    $bla1 mysql_result($team_home,0,0);
                
    $team_away mysql_query("SELECT team FROM liga where id='$j'");
                
    $bla2 mysql_result($team_away,0,0);
                echo 
    "mannschaft $i ($bla1) vs. Mannschaft $j ($bla2) <br>";
                
            }
            
    $i++;

            if(
    $i>=10) {
                
    $i=false;
            }
        } 
    auch das eintragen aller dieser begegnungen in eine datenbank ist nicht das problem. was ist aber unteschätzt habe ist das aufteilen dieser partien auf die richtigen spieltage.

    hat irgendwer eine idee für mich, wie ich alle möglichen spiele generieren kann und zusätzlich sicherstelle, dass pro spieltag jedes team nur genau einmal spielt?

    ich wäre echt dankbar für eure hilfen.

  • #2
    Ein ganz dickes Lob, dass du obwohl es dein erster Beitrag ist, erstmal gesucht hast!!!

    Ich verschiebe dich mal zu Brainstorming, da bekommst du schneller hilfe denke ich.

    Mein Ansatz wäre es, die Einträge zu sortieren.

    also die spiele kannst du ja schon erstelle:

    a-b
    a-c
    a-d
    b-c
    b-d
    c-d

    jetzt noch das verteilen: einfach die spiele durchgehen

    a-b -> in die DB für spieltag 1 eintragen
    a-c -> wird nicht genommen, da a schon ein spiel hat
    a-d -> auch nicht
    b-c -> wieder nicht
    b-d -> b spielt ja schon
    c-d -> kann auch am spieltag 1 spielen

    hast du also noch 4 über:

    a-c -> kann spielen am tag 2
    a-d -> immer noch nicht
    b-c -> c ist beschäfftigt
    b-d -> warum eigentlich nicht? also spielen die am tag 2

    jetzt noch zwei:

    a-d -> kann am 3. spielen
    b-c -> hat jetzt auch zeit.

    hoffe das geht auch für 10 mannschaften auf.

    wenns dir genehm wäre, fände ichs nett, wenn ich mal in deine code gucken dürfte. email: tobiaz@php-resource.de

    Kommentar


    • #3
      Ein ganz dickes Lob, dass du obwohl es dein erster Beitrag ist, erstmal gesucht hast!!! Ich verschiebe dich mal zu Brainstorming, da bekommst du schneller hilfe denke ich.
      also, die hilfe ist ja prompt gekommen, dankeschön.

      Mein Ansatz wäre es, die Einträge zu sortieren.

      also die spiele kannst du ja schon erstelle:

      a-b
      a-c
      a-d
      b-c
      b-d
      c-d

      jetzt noch das verteilen: einfach die spiele durchgehen

      a-b -> in die DB für spieltag 1 eintragen
      a-c -> wird nicht genommen, da a schon ein spiel hat
      a-d -> auch nicht
      b-c -> wieder nicht
      b-d -> b spielt ja schon
      c-d -> kann auch am spieltag 1 spielen

      hast du also noch 4 über:

      a-c -> kann spielen am tag 2
      a-d -> immer noch nicht
      b-c -> c ist beschäfftigt
      b-d -> warum eigentlich nicht? also spielen die am tag 2

      jetzt noch zwei:

      a-d -> kann am 3. spielen
      b-c -> hat jetzt auch zeit.

      hoffe das geht auch für 10 mannschaften auf.
      das hoffe ich auch, dass das für 10 mannschaften noch funktioniert. so restlos bin ich von deiner idee ehrlich gesagt noch nicht begeistert, könnte aber auch daran liegen, dass ich noch nicht recht weiss, wie ich diese idee in programmcode bringen sollte.

      die idee die mir heute noch gekommen ist wäre, dass man alle spiele mal (im falle der zehnerliga) in fünfergruppen ordnet (das wären 9 fünfergruppen) und dann eine schleife solange laufen lässt, die die partien zwischen den spieltagen verschiebt, bis jede mannschaft in jedem spieltag nur mehr genau einmal vorkommt. allerdings habe ich keine ahnung wie und ob sich das realisieren lässt.

      wenns dir genehm wäre, fände ichs nett, wenn ich mal in deine code gucken dürfte. email: tobiaz@php-resource.de
      natürlich, kein problem. was ich mich allerdings frage ist, was dich genau interessiert. möchtest du die tabellenstruktur sehen? bitte schreib es einfach und ich werd es dir schicken.

      danke für die prompte hilfe nochmal,
      berndl

      Kommentar


      • #4
        mein erster gedanke und ohne nun groß zu coden. du hast ja deine tabelle

        id
        mannschaft1
        mannschaft2

        mit allen paarungen und du kennst die anzahl der spieltage

        schleife über die spieltage {

        tabelle für spieltag anlegen

        schleife über die vorhandenen spielpaarungen

        select, ob id[spielpaarung] (spielpaarung) in spieltagtabelle[spieltag].(spielpaarung)
        wenn nein, eintragen und aus tabelle spielpaarung entfernen

        } // schleife über die vorhandenen spielpaarungen

        } // schleife über die spieltage

        hoffe, das funzt, mir fehlt leider die zeit zum coden, aber es sind ja nur ein paar zeilen und das bekommst schon hin. poste, wenns bei dir funzt

        bis denne

        megle

        Kommentar


        • #5
          Wie heußt das, drei Ärsche, ein Furz.

          die idee die mir heute noch gekommen ist wäre, dass man alle spiele mal (im falle der zehnerliga) in fünfergruppen ordnet (das wären 9 fünfergruppen) und dann eine schleife solange laufen lässt, die die partien zwischen den spieltagen verschiebt, bis jede mannschaft in jedem spieltag nur mehr genau einmal vorkommt. allerdings habe ich keine ahnung wie und ob sich das realisieren lässt.
          Das ist ja eigentlich ein ähnliches Prinzip wie meins, ich glaube, wenn man das auf Pseudo-code ausweitet kommt man wieder bei meinem aus.

          die idee von meglepetes ist auch sehr ähnlich. nur geht man da andersherum dran. was mich ein bisschen stört, ist dass man ja jedes mal ein select machen muss. (oder muss man das bei mir nicht auch )

          Ich denke das geht in die richtige Richtung.

          mich interessiert eigentlich der komplette code als auch das SQL-Dump. Die Frage ist in letzter Zeit wieder häufier vorgekommen. N bisschen "Fachwissen" kann da nicht schaden.

          Kommentar


          • #6
            Original geschrieben von TobiaZ
            Das ist ja eigentlich ein ähnliches Prinzip wie meins, ich glaube, wenn man das auf Pseudo-code ausweitet kommt man wieder bei meinem aus.
            Wo hast du denn dein Konzept stehen - habs hier nämlich nicht gefunden ...

            Für 8 Spieler hab ich ne realtiv einfache Lösung gefunden:
            Als ersten werden alle Spielpaarungen durch SpielerID +1 solange erstellt bis SpielerID +1 = Spieleranzahl ist.
            Als nächstes wird Spielernummer 1 wird über alle Spieltage verteilt und aus der Paarungstabelle gelöscht
            Danach wird das gleiche mit der nächsten Spielernummer gemacht, jedoch diesmal Spieltagweise. Ist diese schon belegt, wird die nächst
            höhere verwendet. Die so erstellten Spielpaarungen werden aus der Paarungstabelle gelöscht. Logischerweise
            werden die Spielpaarungen in den entsprechenden Spieltag eingefügt. Dadurch kann überprüft werden ob der
            Spieler an diesen Spieltag schon eingesetzt ist. Eine SpielerID die schon an einem Spieltag benutzt wird
            kann erst nächsten Spieltag wieder berücksichtigt werden.


            Das Funktioniert leider nicht für 10 oder 12 Spieler
            Bei 10 Spieler hab ich die Aufteilung so vorgenommen (manuell)
            Spieler 1 gegen den letzten Spieler (10) antreten lassen, danach für jeden Spieltag herunterzählen bis sich 1-5 treffen. Danach ändert man die Vergabe und zählt die restlichen Spielpaarungen hoch 1-2, 1-3 und 1-4

            Zeitgleich vergibt man fest auch die Spiele für Spieler5 5-6 hochlaufend bis 5-10 (sofern möglich). der nächste Spieltag ist dann 5-1 oder 1-5. dann geht das ganze für Spieler 5 rückwärtz weiter 5-4 etc. so wie es sich verteilen lässt. Alle anderen sollten sich dann aufteilen lassen ohne doppelt oder gar nicht berücksichtigt zu werden.


            In diesem Beispiel hab ich mit Spieler 5 angefangen aber das Prinzip ist das gleiche.

            Spieltage 1 2 3 4 5 6 7 8 9
            Paarung 1 5-6 5-7 5-8 5-9 5-10 5-1 5-4 5-3 5-2
            Paarung 2 1-10 1-9 1-7 1-8 1-6 2-9 1-2 1-4 1-3
            Paarung 3 2-3 2-4 2-6 2-7 2-8 3-8 3-9 2-10 4-8
            Paarung 4 4-7 3-6 3-4 3-10 3-7 4-10 6-8 6-9 6-10
            Paarung 5 8-9 8-10 9-10 4-6 4-9 6-7 7-10 7-8 7-9

            Ob sich dieses Prinzip auch auf höhere Spieleranzahlen verwirklichen lässt, weis ich nicht.
            und wech ...

            Artaxerxes

            Kommentar


            • #7
              Wo hast du denn dein Konzept stehen - habs hier nämlich nicht gefunden ...
              Ein Blick in auf das zweite Post reicht aus.

              Kommentar


              • #8
                Peinlich ...

                Glatt übersehen das der von dir war
                und wech ...

                Artaxerxes

                Kommentar

                Lädt...
                X