Toon posts:

Logica bedenken mbt script om voetbal-fixtures te maken

Pagina: 1
Acties:

Onderwerpen


  • HenkS
  • Registratie: mei 2000
  • Laatst online: 01-09 22:06

HenkS

Da_king alias HenkS

Topicstarter
Hallo,

Ik ben met een script bezig waarbij ik er niet helemaal uitkom met de logica om het te maken (bedenken)
Inleiding:
Ik heb een site waarop mensen met Xbox360 competities kunnen doen voor Fifa10 (nu fifa 11). Hierop kunnen moderators competities aanmaken, teams en spelers toevoegen en vervolgens maken ze handmatig alle fixtures (wedstrijden) aan die gespeeld moeten worden.
Vervolgens kan 1 van de 2 spelers van een wedstrijd de uitslag invullen, die ze online hebben gespeeld, en de stand wordt dan automatisch helemaal bijgewerkt.
Dit werkt allemaal goed, en de site heeft nu ook al 200 leden, dus tijd voor verbetering/uitbreiding.

Wat wil ik maken: een script (PHP/MYSQL , maar dat is verder niet van belang) waarbij het wedstrijdschema automatisch wordt gegenereerd (nu wordt dit per competitie door een admin helemaal handmatig aangemaakt, en dit kunnen nogal wat wedstrijden zijn).

Kort om: een admin maakt een nieuwe competitie aan met bijvoorbeeld 10 teams (aantal is altijd variabel maar dient wel altijd een even getal te zijn).

vaste waarde is dat ieder team altijd 2x tegen elkaar speelt.

Vervolgens vult de admin in, hoeveel wedstrijden per week gespeeld dienen te worden (ook variabel en altijd even getal) bijvoorbeeld het getal 4.

Ik bereken vervolgens dat er dus per team (aantal_teams x 2 (de vaste waarde) ) -2 (je speelt nooit tegen jezelf) gespeeld dient te worden.
Kort om: 10x2-2 = 18 wedstrijden per team.

Dan reken ik uit hoeveel weken er voor desbetreffende competitie gespeeld gaan worden.
aantal_weken = 18/4 = 4,5 (naar boven afronden) dus 5 weken.

met al deze info wil ik de wedstrijden gaan creëren.
Wat lijkt me dan het beste:
  • Ik gooi de 10 teams in een array
  • ik neem het 1e element uit de array (1e team dus), en ik neem het 2e element (2e team)
  • Ik controleer of deze fixture al bestaat, zo nee, dan controleer ik of voor week1 deze teams al 4 fixtures hebben, zo ja, dan doe ik week+1 (dus week2) en controleer ik opnieuw. Zo nee, dan voeg ik de fixture toe in desbetreffende week.
Tot nu toe, lijkt de logica mij te kloppen.
Ik kom er alleen echt niet uit, hoe ik ervoor zorg dat ik de array zo doorloop dat alle mogelijke combinaties doorlopen worden.

  • rewind.
  • Registratie: oktober 2001
  • Laatst online: 14-09 23:06
De KNVB heeft hier een standaard schema voor die wel ergens te vinden is. Ooit heel lang geleden gebruikt om echte competitiewedstrijden te voorspellen (speelvolgorde)

  • HenkS
  • Registratie: mei 2000
  • Laatst online: 01-09 22:06

HenkS

Da_king alias HenkS

Topicstarter
rewind. schreef op woensdag 06 oktober 2010 @ 09:50:
De KNVB heeft hier een standaard schema voor die wel ergens te vinden is. Ooit heel lang geleden gebruikt om echte competitiewedstrijden te voorspellen (speelvolgorde)
T schema krijg ik zelf wel gemaakt
Het is meer de logica van 10 teams in een array, hoe ik daar doorheen loop zodat ik alle mogelijkheden langsloop.

Dus iets van
1-2
3-4
5-6
7-8
9-10
1-3
2-4
(alleen dan zo dat het programmeerbaar is)

  • Caelorum
  • Registratie: april 2005
  • Laatst online: 21:26
HenkS schreef op woensdag 06 oktober 2010 @ 10:17:
[...]

T schema krijg ik zelf wel gemaakt
Het is meer de logica van 10 teams in een array, hoe ik daar doorheen loop zodat ik alle mogelijkheden langsloop.

.............
Schrijf het anders een anders op :)
Met twee for of while loopjes kan je toch het onderstaande resultaat verkrijgen?

bij 5 teams, speelt iedereen 4 keer:
12 13 14 15
23 24 25
34 35
45

  • Sendy
  • Registratie: september 2001
  • Niet online
Er is een zeer eenvoudig algoritme. Zie bijvoorbeeld Wikipedia: Round-robin tournament

  • HenkS
  • Registratie: mei 2000
  • Laatst online: 01-09 22:06

HenkS

Da_king alias HenkS

Topicstarter
Sendy schreef op woensdag 06 oktober 2010 @ 10:45:
Er is een zeer eenvoudig algoritme. Zie bijvoorbeeld Wikipedia: Round-robin tournament
Tnx!
Alleen het algoritme vind ik vrij duidelijk.
Als je dit bekijkt, zou je feitelijk met 2 arrays gaan werken. Dan het 1e element uit array 1 , tegen 1e element uit array 2 enz.

Echter, als je kijkt naar het voorbeeld bij Round2 op deze pagina. Dan hebben ze array 1 zo opgebouwd:
1, 14,2,3,4,5,6
Kort om: 1e element uit de 2e array komt op de 2e plek in de 1e array. en het laatste element uit array 1, wordt het laatste element uit array 2.
Deze logica lijkt me erg lastig te programmeren (of is dat mijn beperkte capaciteit...)

  • HenkS
  • Registratie: mei 2000
  • Laatst online: 01-09 22:06

HenkS

Da_king alias HenkS

Topicstarter
Even een toevoeging

Het moet me wel lukken dit te maken.
Enige wat ik even niet weet (ben geen programmeerheld) hoe ik die 14 in round 2 op de 2e plek in de array krijg en de rest doorschuift 1 plek.
Als iemand me daar beetje mee kan helpen, lukt de rest zeker

  • moozzuzz
  • Registratie: januari 2005
  • Laatst online: 10-01 23:26
Quick and dirty, I know:

Je hebt een (mysql) "koppel"tabel met teamA en teamB als kollommen en je zet daar gewoon een unique key op (of een primary). Daarna maakt je logica alle combinaties aan (dus ook de dubbele) zonder logica. Je database filtert alle dubbele eruit want een primary key kan maar eenmaal voorkomen. Dit vermijdt de tussenvorm/tussenlogica gezien die al in het database ontwerp zit.

[Voor 0% gewijzigd door moozzuzz op 06-10-2010 11:39. Reden: nutteloze toevoeging van mijnentwege]


  • HenkS
  • Registratie: mei 2000
  • Laatst online: 01-09 22:06

HenkS

Da_king alias HenkS

Topicstarter
moozzuzz schreef op woensdag 06 oktober 2010 @ 11:05:
Quick and dirty, I know:

Je hebt een (mysql) "koppel"tabel met teamA en teamB als kollommen en je zet daar gewoon een unique key op (of een primary). Daarna maakt je logica alle combinaties aan (dus ook de dubbele) zonder logica. Je database filtert alle dubbele eruit want een primary key kan maar eenmaal voorkomen. Dit vermijdt de tussenvorm/tussenlogica gezien die al in het database ontwerp zit.
Ik wil t toch graag netjes doen :)
denk wel dat ik eruit ga komen!
met de wiki link en met array php functies zoals array_pop en array_splice krijg ik die logica wel voor elkaar zie ik.
Dus ik ga s aan de gang
tnx voor de goede links van de wiki!

  • Sendy
  • Registratie: september 2001
  • Niet online
Het is zo eenvoudig, daar kan je bijna geen hulp voor krijgen ;)

Stel het aantal wedstrijden in een ronde is n.
Bewaar arr1[n-1] (de laatste entry in array 1) in v1
Bewaar arr2[0] (de eerste entry in array 2) in v2

Het algortime voor een nieuwe ronde kan dan worden:

code:
1
2
3
4
5
6
7
8
9
10
11
12
v1 = arr1[n-1]
v2 = arr2[0]

for k = n-1 to 2
    arr1[k] = arr1[k-1]
end
arr1[1] = v2

for k = 0 to n-2
    arr2[k] = arr2[k+1]
end
arr2[n-1] = v1


Het nadeel van "probeer alle mogelijkheden en gooi de dubbelen eruit" is dat er niet per sé mooie rondes onstaan, en het maken van de rondes alsnog veel werk is. Dit algoritme doet alles voor je :)

[Voor 18% gewijzigd door Sendy op 06-10-2010 11:32]


  • moozzuzz
  • Registratie: januari 2005
  • Laatst online: 10-01 23:26
Sendy, Ik heb inderdaad even het doel uit het oog verloren, zijnde een competitie creeeren. Mijn post mag dus gewoon genegeerd worden :F

  • HenkS
  • Registratie: mei 2000
  • Laatst online: 01-09 22:06

HenkS

Da_king alias HenkS

Topicstarter
zo ik ben klaar met mijn script.
heb de wiki aangehouden en daar het script voor geschreven.

Helemaal top!

bedankt allen
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee