Avatar billede fixbabe Nybegynder
25. marts 2011 - 23:36 Der er 7 kommentarer og
1 løsning

Kamp system

Jeg roder med et kamp system og har ramt muren..
Jeg søger en funktion som automatisk kan generere kampene i gruppen.
Der er 6 hold i alt som skal spille mod hinanden, alle skal spille mod alle. Men to hold må kun mødes en gang, 6 hold skal spille 5 kampe hver.

Tabel med hold [id][navn]
Tabel med kampe [id][holda][holdb]

Kampene "bør" se så ledes ud:
A mod B
A mod C
A mod D
A mod E
A mod F
B mod C
B mod D
B mod E
B mod F
C mod D
C mod E
C mod F

Da der er 6 hold skal der tages højde for, at de første 3 kampe der oprettes må et hold ikke være to gange! Dvs. de 3 første kampe skal kunne spilles med det samme så et hold ikke skal vente.
D mod E
D mod F
E mod F
Avatar billede pstidsen Novice
25. marts 2011 - 23:45 #1
Hvad er det lige problemet er??
Avatar billede pstidsen Novice
25. marts 2011 - 23:46 #2
Ups! Min fejl, så ikke lige den kategori hvor spørgsmål var lagt...
Avatar billede Slettet bruger
26. marts 2011 - 01:19 #3
Dén er sgu mere tricky end man sku' tro..
Jeg ku' ikke komme på en egentlig "algoritme" - kun en løsning:

AB AC AD AE AF
CD DF BF BD BC
EF EB EC CF ED

Hold A skal spille med alle de 5 andre, en ny hver uge = 1. linje.
De to andre kampe giver sig selv, - første uge.
Resten har jeg bare "puslet" dem på plads, sudoku-style.

MEN selvom det er lidt primitivt, burde du kunne "hardcode" ovenstående "matrice" - også selvom det er de samme 6 hold der skal spille, turnering efter turnering, de skal bare tildeles et nyt "tilfældigt" bogstav ved start af hver ny turnering - for variationens skyld : )
Avatar billede jakobdo Ekspert
26. marts 2011 - 06:57 #4
Avatar billede Slettet bruger
26. marts 2011 - 16:04 #5
Ahh, så var jeg godt nok tæt på i min egen algoritmejagt - but no cigar.
- har så prøvet at gøre den hjemmebane/udebane retfgærdig..
Ikke 100% perfekt - men det snerper

Prøv selv at tilføje/fjerne hold...

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Kampsystem</title><style type="text/css">
td {text-align:center;font:10pt Trebuchet MS,Arial;}
</style><script>

var hold = new Array(     //"0","1","2","3","4","5","6","7" )

    "Arsenal"
    ,"Leeds"
    ,"Vojens"
    ,"Vejle"
    ,"Inter"
    ,"Roma"
    ,"Nivå"
    ,"OB"
    ,"Lem"

)

if (hold.length / 2 != parseInt(hold.length / 2)) // ulige
    hold[ hold.length ] = "_"           // lige!

var HU = new Array()
for (var i=0;i<hold.length;i++)
    HU[ hold[i] ] = hold[i]+"|"


function roter() // 01234567 > 07123456 > 06712345 > 05671234 ...
    {
    var tmp = hold[ hold.length-1 ]
    for (var i=hold.length-1; i>1; i--)    hold[ i ] = hold[ i-1 ]
    hold[ 1 ] = tmp
    }
function huttelihut( s ) // holdnavn:HUUHHUHUHUHHHU
    {
    var t = s.substring(0,s.indexOf("|")+1)
    var s = s.substring(s.indexOf("|")+1)
    var tmp=s
    var h=0;var u=0
    for (var i=0;i<s.length;i++)
        if (s.substring(i,i+1) == "H")
            h++
        else
            u++
    t += h+" hjemme, "+u+" ude"

    if (h>u)
        t += "   "+(h-u)
    else if (h<u)
        t += "  "+(h-u)

    return t
    }
function roundRobin()     // 0 1 2 3  kamp=lodret par
    {        // 7 6 5 4
    var tabel = "<table border='1' cellpadding='4' cellspacing='10'><tr>"

    var prik = "v"

    udeBane = true
    for (var i=1; i<hold.length; i++)
        {
        tabel += "<td><table border='0'><tr><td colspan='3'>Kamp "+(i)+"<hr></td></tr>";
        sidderOver = ""
        for (var n=0; n<hold.length/2; n++)
            {

            if (hold[n] == "_" || hold[hold.length-1-n] == "_")
                if (hold[n] == "_")
                    sidderOver = hold[hold.length-1-n]
                else
                    sidderOver = hold[n]
                   
            else
                {
                if (udeBane)
                    {
                    udeBane = !udeBane
                    tabel += "<tr><td style='text-align:right;'>" + hold[n] + "</td>"+
                        "<td style='padding:0 6px;color:red;'>"+prik+"</td>" +
                        "<td style='text-align:left;'>" + hold[hold.length-1-n] +"</td></tr>"

                    HU[ hold[n] ] += "H"
                    HU[ hold[hold.length-1-n] ] += "U"
                    }
                else
                    {
                    tabel += "<tr><td style='text-align:right;'>" + hold[hold.length-1-n] + "</td>"+
                        "<td style='padding:0 6px;color:red;'>"+prik+"</td>" +
                        "<td style='text-align:left;'>" + hold[n] +"</td></tr>"

                    HU[ hold[n] ] += "U"
                    HU[ hold[hold.length-1-n] ] += "H"
                    }
                }
            }
               
        if (i/2 == parseInt(i/2))
            udeBane = !udeBane

        if (sidderOver != "")
            tabel += "<tr><td colspan='3'><hr><b>"+sidderOver+"</b></td></tr>"

        tabel += "</table></td>"
        roter()
        }

    tabel += "</tr></table><p>"

    roter() // tilbage til start

    tabel += "<table cellpadding='4'>"
    for (i=0;i<hold.length;i++)
        if (hold[i] != "_")
            tabel += "<td style='text-align:right;'>"+huttelihut(HU[ hold[i] ]).replace("|",":</td><td style='text-align:left;'>")+"<tr>"
    tabel += "</table>"

    document.getElementById("show").innerHTML = tabel
    }

</script></head><body onload="roundRobin()">

<div id="show"></div>
   
</body>
Avatar billede fixbabe Nybegynder
27. marts 2011 - 11:10 #6
jakobdo: det indlæg du linkede til var perfekt, gider du smide et svar?
TOM: Tråden er oprettet under "PHP" ;)
Avatar billede jakobdo Ekspert
27. marts 2011 - 14:24 #7
Svar!
Avatar billede jakobdo Ekspert
27. marts 2011 - 14:32 #8
Takker for point.
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