Toon posts:

[Algoritme] Competitieprogramma

Pagina: 1
Acties:
  • 113 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben ff bezig voor iemand om een soort poule systeem te maken voor een tenniscompetitie. Ik zit ff met het probleem dat ik ff niet meer kan bedenken hoe en wat.

Het gaat om het volgende:
Je geeft in een editboxje het aantal spelers aan die meedoen
Volgende boxje geef je de aantal ronden die gespeelt moeten worden.
In principe zijn dat de enige variabelen.

Het gaat om een dubbelspel dus 2x2 mensen spelen per ronde.
Het is nu de bedoeling dat ik een lijstje genereer waarin in staat welke mensen tegen elkaar moeten spelen zodat iedereen zoveel mogelijk wisselt, ook de partner waar ie mee tennist zeg maar.
dus partij zou bv worden:
12 deelnemers
2 rondes

ronde1:
1 - 2 tegen 3 -4
5 - 6 tegen 7 -8
9-10 tegen 11-12

ronde 2:
1-5 tegen 9 -2
3-6 tegen 10-4
7-11 tegen 12-8

Hoe krijg ik het voor elkaar dat de spelers zoveel mogelijk verdeelt worden? Het is niet voor school maar gewoon om iemand te helpen. Kom aub niet met antwoorden van zoek hier en daar en weet ik allemaal wat, reageer dan gewoon aub niet. (Bedoel hiermee rtfm en zoek maar op google, had wat lastig geformuleerd, excuses)

[ Voor 4% gewijzigd door Verwijderd op 05-06-2004 16:08 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Misschien moet je de [Delphi] uit je topic halen, want je zoekt hier een algoritme en niet iets Delphi specifieks. Dan heb je meer kans dat mensen je vraag lezen en dus op een antwoord.

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

O-)

Professionele website nodig?


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-05 23:27

Tomatoman

Fulltime prutser

Wat jij zoekt, lijkt op het equivalent van de zogeheten Zwitserse indeling in de schaakwereld. Alleen maak jij het nog een stukje ingewikkelder door ook nog wisselend twee aan twee in te delen. Dit is een behoorlijk ingewikkeld probleem dat je niet zo maar even kunt oplossen. Je moet immers vooraf al rekening houden met mogelijke toekomstige ontwikkelingen.

Daar je echter niet een 'zoek hier naar' antwoord wilt hebben maar blijkbaar een pasklare oplossing , heb je vette pech. Aangezien ook links naar eventuele oplossingen in de categorie 'kijk hier maar eens' vallen en je die niet apprecieert, mag je het fijn zelf uitzoeken :/.

[ Voor 3% gewijzigd door Tomatoman op 05-06-2004 16:01 ]

Een goede grap mag vrienden kosten.


Verwijderd

Topicstarter
tomatoman schreef op 05 juni 2004 @ 15:59:
Daar je echter niet een 'zoek hier naar' antwoord wilt hebben maar blijkbaar een pasklare oplossing , heb je vette pech. Aangezien ook links naar eventuele oplossingen in de categorie 'kijk hier maar eens' vallen en je die niet apprecieert, mag je het fijn zelf uitzoeken :/.
Had verkeerd geformuleerd, ik bedoelde opmerkingen van zoek maar op google of in de helpfile etc, wordt je altijd mee dood gegooid en vind dat wat overbodig, vandaar.

Oftewel ik was wel op zoek naar enig antwoord wat mij in de richting kan helpen.

BTW curry684 bedankt voor het aanpassen

[ Voor 6% gewijzigd door Verwijderd op 05-06-2004 16:10 ]


  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 14:28
de oplossing voor een schaak-probleem is eenvoudig, misschien dat je door even verder te denken daaruit een mooie oplossing kunt halen.

bij 1-1 waarbij je _alle_ mogelijk partijen wilt spelen doe je dit :

ronde 1

[1]-[5]
[2]-[6]
[3]-[7]
[4]-[8]

om te bepalen hoe de 2e ronde eruitziet doe je het volgende : je houdt speler [1] op zijn plek, en schijft alle andere spelers 1 plek door [2]-> plaats van [3], etc

ronde 2
[1]-[4]
[8]-[5]
[2]-[6]
[3]-[7]

etc, net zolang tot je iedereen hebt gehad.

als je een oneven aantal spelers hebt, voeg je gewoon een extra speler toe [0], als iemand tegen speler [0] moet, speelt hij die ronde simpelweg niet.

ik hoop dat je met deze info iets leuks kunt bedenken :)

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Verwijderd

Topicstarter
WVL_KsZeN schreef op 05 juni 2004 @ 16:14:
de oplossing voor een schaak-probleem is eenvoudig, misschien dat je door even verder te denken daaruit een mooie oplossing kunt halen.

bij 1-1 waarbij je _alle_ mogelijk partijen wilt spelen doe je dit :

ronde 1

[1]-[5]
[2]-[6]
[3]-[7]
[4]-[8]

om te bepalen hoe de 2e ronde eruitziet doe je het volgende : je houdt speler [1] op zijn plek, en schijft alle andere spelers 1 plek door [2]-> plaats van [3], etc

ronde 2
[1]-[4]
[8]-[5]
[2]-[6]
[3]-[7]

etc, net zolang tot je iedereen hebt gehad.

als je een oneven aantal spelers hebt, voeg je gewoon een extra speler toe [0], als iemand tegen speler [0] moet, speelt hij die ronde simpelweg niet.

ik hoop dat je met deze info iets leuks kunt bedenken :)
Op zich kom ik er wel een stukje mee vooruit maar in jouw geval komt bijvoorbeeld 2 weer met 6 te spelen en dat kan dus niet.

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 14:28
hey.. idd.. wat doe ik nou fout? ik dacht dat het zo werkte... hmmmm...

oh ja, ik zie het al..

ronde 2 moet zijn :

[1]-[6]
[5]-[7]
[2]-[8]
[3]-[4]

de tegenstanders draaien dus rond, ipv wat ik eerst zei..

de 1e rij schuif je dus naar beneden, behalve speler [1]
de 2e rij schuif je naar boven
de speler die in rij 1 verdwenen is door naar beneden te schuiven stop je onderin rij 2, etc.

[ Voor 71% gewijzigd door WVL_KsZeN op 05-06-2004 16:31 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-05 23:27

Tomatoman

Fulltime prutser

WVL_KsZeN schreef op 05 juni 2004 @ 16:14:
de oplossing voor een schaak-probleem is eenvoudig, misschien dat je door even verder te denken daaruit een mooie oplossing kunt halen.

bij 1-1 waarbij je _alle_ mogelijk partijen wilt spelen doe je dit :

ronde 1

[1]-[5]
[2]-[6]
[3]-[7]
[4]-[8]

om te bepalen hoe de 2e ronde eruitziet doe je het volgende : je houdt speler [1] op zijn plek, en schijft alle andere spelers 1 plek door [2]-> plaats van [3], etc

ronde 2
[1]-[4]
[8]-[5]
[2]-[6]
[3]-[7]

etc, net zolang tot je iedereen hebt gehad.

als je een oneven aantal spelers hebt, voeg je gewoon een extra speler toe [0], als iemand tegen speler [0] moet, speelt hij die ronde simpelweg niet.

ik hoop dat je met deze info iets leuks kunt bedenken :)
Als je dat schema helemaal uitschrijft voor tenminste 8 spelers zul je zien dat het helemaal niet zo eenvoudig is. Aan het eind kom je gegarandeerd in de problemen - je zult spelers tweemaal tegen elkaar moeten laten spelen. Met een optimale indeling is dat niet nodig, maar de optimale oplossing is alleen met veel puzzelen te vinden.

Daarom wordt in de schaakwereld het reeds genoemde Zwitserse systeem gebruikt. Dat biedt nog een tweede voordeel: het laat spelers op hun eigen niveau spelen (sterk tegen sterk, zwak tegen zwak). Het systeem zorgt ervoor dat
• je speelt tegen iemand die ongeveer even hoog staat op de ladder als jij;
• je zo min mogelijk tegen dezelfde tegenstander in actie komt.
Dit systeem werkt voor een willekeurig aantal spelers.

Voordat je verder gaat, zou je eerst de vraag moeten beantwoorden of je per se iedereen tegen iedereen wilt laten spelen (dus ook de zwakste spelers tegen de sterksten). Als je deze eis wat versoepelt, maak je het jezelf al een stuk gemakkelijker.

Een goede grap mag vrienden kosten.


Verwijderd

Topicstarter
WVL_KsZeN schreef op 05 juni 2004 @ 16:29:
hey.. idd.. wat doe ik nou fout? ik dacht dat het zo werkte... hmmmm...

oh ja, ik zie het al..

ronde 2 moet zijn :

[1]-[6]
[5]-[7]
[2]-[8]
[3]-[4]

de tegenstanders draaien dus rond, ipv wat ik eerst zei..

de 1e rij schuif je dus naar beneden, behalve speler [1]
de 2e rij schuif je naar boven
de speler die in rij 1 verdwenen is door naar beneden te schuiven stop je onderin rij 2, etc.
Dit kan ik denk ik sowieso wel gebruiken bij het enkelspel, maar nu het dubbelspel. Dat is wat lastiger. Want dan moet ook de partner verwisselen

1-2 tegen 3-4
5-6 tegen 7-8
9-10 tegen 11-12

Bij jou methode kom ik de volgende ronde wel uit maar ronde 3 wordt dan bijna hetzelfde als ronde 1 bij mij.....

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 14:28
@tomatoman : nee hoor, met de 2e versie van de methode die ik beschrijf laat je iedereen tegen iedereen spelen, zonder problemen, ook met 100+ spelers.

ik herinner me deze oplossing van het NK programmeren in 1998 geloof ik ;) toen hebben we er lang over moeten brainstormen, maar het klopt echt!! schrijf anders maar uit!

en natuurlijk werkt het niet zo eenvoudig bij dubbelspelen, maar let op!!! ik denk dat je een dubbelspel al heel snel in de problemen komt met het aantal spellen.

als er bijvoorbeeld 10 spelers zijn, zijn er

(ff snel denken, kan fout zijn) 10*9*8*7/2/4=630 dubbels nodig!!!, ik weet niet hoeveel rondes je daarvoor nodig hebt, maar in de ideale situatie kun je 8 mensen laten spelen -> 230 rondes!!!!

dus filteren moet je sowieso, het probleem wordt dan anders :

je wilt bijvoorbeeld :

-niet meerdere malen dezelfde spelers laten samenspelen
-dat iedere speler iedere keer 2 nieuwe tegenstanders heeft

-verzin maar verder.

iedere optie die je hier tussen gooit verlaagt je aantal rondes dramatisch.

wat je zou kunnen doen is een programmatje schrijven dat alle rondes uitschrijft, en daarna slechte partijen eruit filteren, dat moet dus brute-force en valt heel vaak nog eens slecht uit ook..

tja, probeer er nog eens overna te denken..

[ Voor 60% gewijzigd door WVL_KsZeN op 05-06-2004 16:53 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-05 23:27

Tomatoman

Fulltime prutser

Verwijderd schreef op 05 juni 2004 @ 16:42:
[...]


Dit kan ik denk ik sowieso wel gebruiken bij het enkelspel, maar nu het dubbelspel. Dat is wat lastiger. Want dan moet ook de partner verwisselen

1-2 tegen 3-4
5-6 tegen 7-8
9-10 tegen 11-12

Bij jou methode kom ik de volgende ronde wel uit maar ronde 3 wordt dan bijna hetzelfde als ronde 1 bij mij.....
De oplossing voor enkelspel (helaas geen dubbelspel) kun je hier vinden, zie bijvoorbeeld de Bergertabellen.

@WVL_KsZen: OK, ik geloof je. Kun je niet iets beginnen door steeds twee spelers uit de paringstabellen te paren tot een dubbelteam? Je voert dan een soort dubbele paring uit.

[ Voor 18% gewijzigd door Tomatoman op 05-06-2004 16:54 ]

Een goede grap mag vrienden kosten.


Verwijderd

Topicstarter
WVL_KsZeN schreef op 05 juni 2004 @ 16:47:
@tomatoman : nee hoor, met de 2e versie van de methode die ik beschrijf laat je iedereen tegen iedereen spelen, zonder problemen, ook met 100+ spelers.

ik herinner me deze oplossing van het NK programmeren in 1998 geloof ik ;) toen hebben we er lang over moeten brainstormen, maar het klopt echt!! schrijf anders maar uit!
idd geloof dat ik nu dichter bij een oplossing zit. Ben nu zover dat ik met jou oplossing de partners continu kan verwisselen. Nu de medespelers nog dus :)
Maar dat kan zoals je aangeeft met een soort dubbele toepassing van dit algoritme. Dat moet bijna wel lukken denk ik.

@tomatoman :Iedereen moet gewoon tegen iedereen, dat kan niet anders hier.

[ Voor 9% gewijzigd door Verwijderd op 05-06-2004 16:56 ]


  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 14:28
ik heb misschien nog een aardig idee :

misschien kun je alle spelers indelen in 4 poules (hoe je dat doet mag je zelf weten, misschien de sterksten in poule1, zwaksten in poule4, of gewoon gemixed).

dan stel je een partij samen door uit iedere poule 1 speler te kiezen.

de rest mag je zelf verzinnen, hoewel ik eigenlijk altijd wel een beetje geïnteresseerd ben in dit soort probleempjes ;)

/me heeft eindelijk ook een icoontje.. woef.. boeien..

Pagina: 1