Spielplan (harte Nuss)

  • Also, ich möchte einen Spielplan für ein Tischfussballturnier erstellen, so dass jeder gegen jeden mit jedem einmal spielt:

    - es gibt 12 Spieler

    - es werden immer 2er Teams gebildet (teams sind nicht fix, d.h. spieler1 ist mit spieler2 ein team später jedoch auch mit spieler3 usw.)

    - jedes 2er Team muss gegen jedes 2er Team spielen

    (
    Es sollte 66 Teams und insgesamt etwa 2145 Spiele geben.

    A(nzahl)=12
    (A-1)*(A/2)=66 Teams

    T(eams)=66
    (T-1)*(T/2)=2145 Spiele
    )

    Nun bräuchte ich den Code um den Spielplan zu erstellen. Ich stell mir das so vor:
    Ich bekomme ein Formular in dem ich die 12 Spieler eingebe. Dann sollten alle möglichen Paarungen erscheinen (inkl. der Namen).

    Kriegt das jemand hin?
    Habe zu wenig Programmiererfahrung um das zu lösen. Echt ne harte Nuss...

    Bin auch schon froh um Lösungsansätze...

    vielen Dank

  • Bau dir zuerst mal eine Liste mit den Teams auf (das sind 2 verschachtelte Schleifen, also trivial).
    Bau dir dann einfach aus der Teamliste den Spielplan auf - das sind auch wieder nur 2 verschachtelte Schleifen, wobei du halt darauf aufpassen musst, das ein spieler zur gleichen Zeit nur in einem Team spielen darf. Nicht trivial, aber leicht.

    Was ist daran jetzt so schwierig?

  • ???

    was daran so schwierig ist? hab keine ahnung von c++. kann ein wenig php aber das ist alles.

    kannst du mir den code aufschreiben wenns ja so einfach ist?
    und wenns geht als .exe an e-mail schicken (hab kein compiler)?

    vielen dank

  • nur weil nicht schwierig ist - heissts nicht dass es nicht arbeit macht.
    Oder ladest du dir auch leute zum rasenmaehen ein ?:devil: du kannst dir uebrigens nen C++ Compiler direkt von der MS runterladen
    oder du verwendest einen der opensource compiler - die asurede das du keinen compiler hast zieht in nem informatiker forum irgendwie nicht :D

    -------------------
    “If you hear hoof beats, you should look for horses, not zebras.”
    --
    "You, Sir, are an Idiot!" - George Hamilton

  • Zitat von pesche

    aber ich hab n angebot....

    du schreibst mir den code... und ich komm bei dir rasenmähen...


    danke fuers angebot - ich wohn aber in den USA (und meinen Rasen macht ein Mexikaner)

    -------------------
    “If you hear hoof beats, you should look for horses, not zebras.”
    --
    "You, Sir, are an Idiot!" - George Hamilton

  • habs mittlerweile selbst etwas versucht (code ist aber sehr hässlich)

    hab zuerst alle spieler in ein array gelesen, dann alle möglichen teams gebildet und die dann in eine SQL datenbank (id, sp1, sp2) geschrieben.

    bis dahin alles bestens...

    aber beim bilden der teams gibts ein problem:



    Dabei gibt es dublikate:

    id team1 team2
    1 Hari-Max Uli-Ste
    432 Uli-Ste Hari-Max

    WIE KANN ICH DAS VERHINDERN?

    hab bereits n selfjoin gebastelt der die duplikate findet, jedoch kommen dann auch wieder alle einträge:

    SELECT m1.id, m1.team1, m1.team2, m2.id, m2.team1, m2.team2 from matches m1, matches m2 where m1.team1=m2.team2 and m1.team2=m2.team1

    id team1 team2 id team1 team2
    1 Hari-Max Uli-Ste 432 Uli-Ste Hari-Max
    ... .... .... ... ... ...
    432 Uli-Ste Hari-Max 1 Hari-Max Uli-Ste

    WIE SCHAFF ICH ES NUR EINEN DER BEIDEN ZU LÖSCHEN?

  • hier der code um teams zu bilden:



    und hier die datenbanken:

    CREATE TABLE `matches` (
    `id` int(20) NOT NULL auto_increment,
    `team1` varchar(30) collate latin1_general_ci NOT NULL,
    `team2` varchar(30) collate latin1_general_ci NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

    CREATE TABLE `teams` (
    `id` int(20) NOT NULL auto_increment,
    `sp1` varchar(20) collate latin1_general_ci NOT NULL,
    `sp2` varchar(20) collate latin1_general_ci NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

  • im prinzip nicht so schlecht. die doppelten kriegst du weg, wenn du die schleifen so designst:
    1 -> 2
    1 -> 3
    ..
    1 -> n
    2 -> 3
    2 -> 4
    ..
    2 -> n

    (d.h. der startindex vom zweiten spieler immer größer ist, als jener vom ersten)

    als code z.b.:

    Code
    for ( $i = 0; $i < $anzahl; $i++ ) {
      for ( $j = $i+1; $j < $anzahl; $j++ ) {
        $team = array( $namen[$i], $namen[$j] );
      }
    }
  • naja, mit deinem SQL ist das ein wenig komplizierter. aber wenn du die teams einfach als array aufbaust $team[0] = array(name1,name2), $team[1]=array(name1,name3), ...
    dann kannst du deine matches auch so wie oben aufbauen (team: 0/1, 0/2, 0/3, .. 0/b, 1/2, 1/3, ... 1/n, ... n-1/n), und dabei überprüfst du noch, ob eh kein spieler in beiden teams drin ist (team[i][0] != team[j][0], team[i][1] != team[j][0], team[i][0] != team[j][1], team[i][1] != team[j][1]), und wenn das der fall ist einfach in die liste einfügen

  • Vielen Dank ComSubVie...

    Das war wirklich nicht so schwer... aber auf die if schleife wär ich nie gekommen...

    hier nochmal den kompletten code für die, dies interessiert:



    stimmt so, oder?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!