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.
Annonceindlæg fra Computerworld
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.
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
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); } ?>
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"
02. august 2005 - 21:23
#6
Det mollevp beskriver der er netop roundrobin algoritmen :^)
02. august 2005 - 21:31
#7
jeps - det er korrekt.
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 :)
02. august 2005 - 22:32
#9
Svar
Vi tilbyder markedets bedste kurser inden for webudvikling