Sitter och klurar på en algoritm för att ta fram ett spelschema men behöver lite hjälp så här mitt i natten :)
Alltså X antal lag ska spela gruppspel och ett schema behöver genereras fram.
Givet en array med lag, låt säga lag[1], lag[2], lag[3] ... osv för enkelhetens skull.
Givet är också antal möten mellan två lag. T.ex. 2 (en hemma- och en bortamatch)
Totalt antal omgångar (eller matcher per lag om så vill) blir således (antal lag - 1) * möten
Algoritmen måste försöka pendla mellan hemma- och bortamatch för varje lag så gott det går. Den ska givetvis kunna ta udda antal anmälda lag och det gäller även att om lag[0] spelar mot lag[1] i första omgången så ska lag[1] spela mot lag[0] i sista omgången.
Ett exempel:
Anmälda lag: lag[1], lag[2], lag[3], lag[4]
Möten: Två
Algoritmen ska generera ett spelschema som ser exakt ut som:
lag[1] - lag[2] Omgång 1
lag[4] - lag[3]
lag[3] - lag[1] Omgång 2
lag[2] - lag[4]
lag[1] - lag[3]´ Omgång 3
lag[4] - lag[2]
lag[2] - lag[1] Omgång 4
lag[3] - lag[4]
Vad man kan säga är att vid udda omgångsnummer så är summan av lagindexen också udda. Gäller det även i det generella fallet?
Hjälp mej gärna att klura ut en fungerande algoritm. :)
Heh. Jag satt med precis samma problem en gång i tiden när jag och en polare tänkte lansera den här.
Jag klurade länge men hittade aldrig någon fungerande algoritm, var nära men lyckades aldrig.
Då skickade jag över en mall och lät min medarbetare hårdkoda in alla spelscheman för varje antal lag som är med i serien.
Funkade, men klassas nog inte som en smart algoritm. ;)
<ot>
Heh. Testade logga in. Det var lite coolt att skapa en liga ju.
Fungerade inte hela vägen längre men ändå. ;)
testa logga in med t.ex. "a/a" och skapa en liga, där skriver den ut min lottning. Lät den väl göra så under utvecklingsarbetet.
</ot>
Cyprus: Jag vill helst göra en generell metod så hårdkoda blir en fullösning :p
Fråga Lund gav ju en algoritm som var nära svaret.
Den tar dock ingen hänsyn till mitt krav att lagen ska pendla mellan att spela borta och hemma.
function mod($a, $n)
{
return(($a+$n)%$n);
}
function printmatches($n, $teams)
{
$N=$n+($n&1);
$M=($N>>1);
for ($r=0;$r<$N-1;$r++)
{
for ($s=0;$s<$M-1;$s++)
echo $teams[mod($s+$r,$N-1)]." - ".$teams[mod(-1-$s+$r,$N-1)]." <br />";
if ($n&1)
echo $teams[mod($M-1+$r,$N-1)]." står över\n<br />";
else
if ($r&1)
echo $teams[mod($M-1+$r,$N-1)]." - ".$teams[$N-1]." <br />";
else
echo $teams[$N-1]." - ".$teams[mod($M-1+$r,$N-1)]." <br />";
}
}
Kjell från Lund skrev:
Om antalet lag är udda får du precis vad du önskar. Om antalet lag är jämnt får du nästan vad du önskar. Du behöver då bara justera algoritmen så att lag n - 1 spelar hemma varannan gång och borta varannan gång.
Detta förstår jag dock inte. Har jag ett udda antal lag så blir det inte alls varannan borta varannan hemma.
261 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9