Avatar billede martin1000ben Nybegynder
02. august 2005 - 17:21 Der er 8 kommentarer og
1 løsning

Lave kampe udfra et array med hold

Hejsa...

Sidder lige og bakser med et lille kamp system.
Jeg har i min database smidt alle hold ind med diverse info.

ID'et henter jeg så ud i et array - så det ligner noget ala

$hold = array("1","2","3","4","5","6");
(længden af arrayet er variabelt, så jeg ved ikke hvor mange der er)

Så har jeg en variabel der siger hvor mange gange hvert hold skal møde
hinanden - Denne kan sættes til 1, 2 eller 3 gange.

$antal_gange = 1;

Mit resultat skulle gerne blive noget ala dette.

1. Runde
1 mod 2
3 mod 4
5 mod 6

2. Runde
1 mod 3
2 mod 5
4 mod 6

Eller noget i den stil.

Retningslinjerne for runderne er simple.
Hvert hold skal spille 1 kamp pr uge hverken mere eller mindre
(hvis arrayet selvfølgelig er lige antal hold)

Det ville være dejligt hvis man kunne få et array ud der ligner noget
ala dette her.

$result["rundeNR"]["HjemmeHOLD"]["UdeHOLD"]

Jeg er fuldstændig på bar bund om hvordan det skal laves desværre.
Avatar billede jakobdo Ekspert
02. august 2005 - 21:08 #1
Du kunne vel starte med at tage hold nummer 1.
Det skal i første kamp spille mod hold nummer 2, næste nummer 3, næste nummer 4 osv...
Men jeg tror desværre ikke bare det sådan lige kan laves i en formel.
Inden en kamp bliver lavet, bør der tjekkes om den har været spillet før.
I tilfælde kan man garanteret ende med at 2 hold er tilbage, men har spillet mod hinanden før.
Så jeg tror du må igang manuelt.
Avatar billede nielle Nybegynder
02. august 2005 - 21:11 #2
En almindelig algoritme til at opstille en turnering, hvor alle skal spille mod alle, hedder round-robin:

http://www.prm.nau.edu/prm280/tournament_round_robin.htm
Avatar billede mollevp Nybegynder
02. august 2005 - 21:19 #3
Nej nej ikke manuelt da.. algoritmen for sådan noget er ret simple når man først lige har set den..

Du har fx følgende hold: a b c d e f ..
med index                0 1 2 3 4 5

1) 6 hold giver 3 kampe per runde
2) N = sidste index = 5
3) De første kampe findes som index mod N - index

Dette giver:
0 mod 5
1 mod 4
2 mod 3

4) Holdet på N's plads rykkes til index 1
det giver: a f b c d e

5) trin nr. 3 gentages
Avatar billede mollevp Nybegynder
02. august 2005 - 21:19 #4
Jeg har lavet et lille eksemple det gør det samme:

<?php

    function rearrange(&$hold){
       
        $temp = array();
       
        array_push($temp, $hold[0]);
        array_push($temp, $hold[count($hold)-1]);

        for($j = 1; $j < count($hold)-1; ++$j){   
            array_push($temp, $hold[$j]);       
        }
        $hold = $temp;
    }

   
    $antal_gange = 2;           

    $hold = array( "A", "B", "C", "D", "E", "F");
   
    for($h = 0; $h < $antal_gange; ++$h){

        for($j = 0; $j < (count($hold)-1); ++$j){
   
            for($i = 0; $i < (count($hold)/2); ++$i){
                echo "Runde $j " .$hold[$i]." vs ".$hold[count($hold)-$i-1]."<br>";
            }
            rearrange($hold);
            echo "<br>----------<br>";
        }
        $hold = array_reverse($hold);
    }

?>
Avatar billede mollevp Nybegynder
02. august 2005 - 21:22 #5
Hvis du kun har et ulige antal hold kan du bare sætte et dummy hold ind der hedder "fri uge"
Avatar billede nielle Nybegynder
02. august 2005 - 21:23 #6
Det mollevp beskriver der er netop roundrobin algoritmen :^)
Avatar billede mollevp Nybegynder
02. august 2005 - 21:31 #7
jeps - det er korrekt.
Avatar billede martin1000ben Nybegynder
02. august 2005 - 22:24 #8
Wauv, det må jeg sige - så lige en film - også var der svar :)
Jeg har nu testet dit forslag mollevp - og det virker jo helt kanont

Og det virker også helt perfekt hvis der er ulige hold i arrayet - så er det jo bare hvis hjemmehold == udehold ? ingen kamp

Så mollevp - hvis du smider et svar, så er pointene dine :)
Avatar billede mollevp Nybegynder
02. august 2005 - 22:32 #9
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester