.
Ok nu tänkte jag förklara hur kvalet kommer gå till inför nästa månads tävling.
Eftersom det förmodligen blir flera på samma poäng efter kvalet så får de som ligger på
gränsen och på samma poäng spela en eller flera utslagsomgångar, eller så lottar vi bland
de som ligger på samma poäng.
Det jag kom fram till var att jag först sorterar in alla anmälda i 5 grupper (B,S,G,P,D) baserat
på bnet-liga. Sedan börjar jag med att placera ut alla D-spelare med jämna mellanrum på
en cirkel (typ ). Efter det placeras P ut på samma sätt, sedan G, sedan S, sedan B.
Efter det spelar varje spelar mot de två framför och de två bakom i cirkeln.
Om allt detta verkar förvirrande så är det lugnt, för spelarna kommer bara få en lista
"du ska spela matcher mot A, B, C, D".
Jag har skrivit exempelkod (i Java) som de berörda kan använda för att implementera systemet på
en websida. Exempelkoden och output från denna finns nedan.
package sc2kval;
import java.util.ArrayList;
/**
*
* @author jkjolhed
*/
public class Main {
public static void main(String[] args) throws Exception {
// MÅSTE VARA JÄMN SIFFRA
final int kvalmatcherPerSpelare = 4;
final Spelare[] anmälda = {
new Spelare("aYoda1", Rank.gold),
new Spelare("bYoda2", Rank.gold),
new Spelare("cBosse3", Rank.diamond),
new Spelare("dYoda7", Rank.gold),
new Spelare("eBosse1", Rank.diamond),
new Spelare("fBosse2", Rank.diamond),
new Spelare("gpelle1", Rank.platinum),
new Spelare("hpelle2", Rank.platinum),
new Spelare("iYoda6", Rank.gold),
new Spelare("jBosse4", Rank.diamond),
new Spelare("k123n", Rank.bronze),
new Spelare("z<k123n", Rank.bronze),
new Spelare("asdk123n", Rank.bronze),
new Spelare("lArnold1", Rank.gold),
new Spelare("mFreddy1", Rank.silver),
new Spelare("nYoda3", Rank.gold),
new Spelare("oYoda4", Rank.gold),
new Spelare("pYoda5", Rank.gold),
new Spelare("qFreddy2", Rank.silver),
new Spelare("rFreddy3", Rank.silver),
new Spelare("sArnold3", Rank.gold),
new Spelare("tArnold2", Rank.gold),
new Spelare("1Freddy5", Rank.silver),
new Spelare("3Freddy4", Rank.silver),
new Spelare("4pelle3", Rank.platinum),
new Spelare("5pelle4", Rank.platinum)
};
// Blanda
final Spelare[] allaSpelare = blanda(anmälda);
// Sortera spelare i 5 fack
final Spelare[] bSpelare = getPlayers(allaSpelare, Rank.bronze),
sSpelare = getPlayers(allaSpelare, Rank.silver),
gSpelare = getPlayers(allaSpelare, Rank.gold),
pSpelare = getPlayers(allaSpelare, Rank.platinum),
dSpelare = getPlayers(allaSpelare, Rank.diamond);
// Lista alla spelare
System.out.println("\nAnmälda spelare:");
printSpelare(anmälda);
System.out.println("\nBlandade spelare:");
printSpelare(allaSpelare);
// lista sorterade spelare
System.out.println("\nSorterade Bronze:");
printSpelare(bSpelare);
System.out.println("\nSorterade Silver:");
printSpelare(sSpelare);
System.out.println("\nSorterade Gold:");
printSpelare(gSpelare);
System.out.println("\nSorterade Platinum:");
printSpelare(pSpelare);
System.out.println("\nSorterade Diamond:");
printSpelare(dSpelare);
// Placera i kvalcirkeln
final Spelare[] kvalCirkel = new Spelare[allaSpelare.length];
place(dSpelare, kvalCirkel);
place(pSpelare, kvalCirkel);
place(gSpelare, kvalCirkel);
place(sSpelare, kvalCirkel);
place(bSpelare, kvalCirkel);
// Skriv ut kvalcirkeln
System.out.println("\nKvalcirkel:");
printSpelare(kvalCirkel);
// Räkna ut vilka matcher som skall spelas
final int mth = kvalmatcherPerSpelare / 2;
final Match[] matcher = new Match[mth * kvalCirkel.length];
for (int i = 0, cur = 0; i < kvalCirkel.length; i++) {
for (int trgOffs = 1; trgOffs <= mth; trgOffs++) {
int trg = i + trgOffs;
if (trg >= kvalCirkel.length) {
trg -= kvalCirkel.length;
}
matcher[cur++] = new Match(kvalCirkel[i], kvalCirkel[trg]);
}
}
// Skriv ut matcherna
System.out.println("\nKvalmatcher att spela:");
for (final Match m : matcher) {
System.out.println(m);
}
// Visa de matcher som spelare "1Freddy5" ska spela
final Match[] minaMatcher = getMatchesFor("1Freddy5", matcher);
System.out.println("\nKvalmatcher att spela för '1Freddy5':");
for (final Match m : minaMatcher) {
System.out.println(m);
}
}
/**
* Placerar denna kategori spelre med så jämna mellanrum som möjligt i kvalcirkeln
* @param spelare: utbud spelare
* @param kvalCirkel: tom eller delvis fylld kvalcirkel (endast lediga platser kan tas)
*/
private final static void place(final Spelare[] spelareAttPlacera, final Spelare[] kvalCirkel) throws Exception {
if (spelareAttPlacera.length == 0) {
return;
}
// Se till att det finns plats
int plats = 0;
for (final Spelare s : kvalCirkel) {
if (s == null) {
plats++;
}
}
if (plats < spelareAttPlacera.length) {
throw new Exception("Kvalcirkeln feldimensionerad");
}
// Hitta optimal spacing
int optSpacing = kvalCirkel.length / spelareAttPlacera.length;
int trg = 0;
for (int i = 0; i < spelareAttPlacera.length; i++) {
while (trg >= kvalCirkel.length || kvalCirkel[trg] != null) {
trg++;
if (trg >= kvalCirkel.length) {
trg = 0;
}
}
kvalCirkel[trg] = spelareAttPlacera[i];
trg += optSpacing;
}
}
private final static Spelare[] getPlayers(final Spelare[] allaSpelare, final Rank r) {
final ArrayList<Spelare> spelare = new ArrayList<Spelare>();
for (final Spelare s : allaSpelare) {
if (s.rank == r) {
spelare.add(s);
}
}
return spelare.toArray(new Spelare[spelare.size()]);
}
private final static void printSpelare(final Spelare[] allaSpelare) {
for (final Spelare s : allaSpelare) {
System.out.println(s);
}
}
private static Spelare[] blanda(final Spelare[] spelareIn) {
final Spelare[] spelare = spelareIn.clone();
for (int i = 0; i < spelare.length; i++) {
final int r = (int) (Math.random() * (i + 1));
final Spelare t = spelare[r];
spelare[r] = spelare[i];
spelare[i] = t;
}
return spelare;
}
private final static Match[] getMatchesFor(final String bnetID, final Match[] allGames) {
final ArrayList<Match> myGames = new ArrayList<Match>();
for (final Match g : allGames) {
if (g.spelare1.namn.equals(bnetID) || g.spelare2.namn.equals(bnetID)) {
myGames.add(g);
}
}
return myGames.toArray(new Match[myGames.size()]);
}
}
Anmälda spelare:
Spelare: aYoda1 , rank: gold
Spelare: bYoda2 , rank: gold
Spelare: cBosse3 , rank: diamond
Spelare: dYoda7 , rank: gold
Spelare: eBosse1 , rank: diamond
Spelare: fBosse2 , rank: diamond
Spelare: gpelle1 , rank: platinum
Spelare: hpelle2 , rank: platinum
Spelare: iYoda6 , rank: gold
Spelare: jBosse4 , rank: diamond
Spelare: k123n , rank: bronze
Spelare: z<k123n , rank: bronze
Spelare: asdk123n , rank: bronze
Spelare: lArnold1 , rank: gold
Spelare: mFreddy1 , rank: silver
Spelare: nYoda3 , rank: gold
Spelare: oYoda4 , rank: gold
Spelare: pYoda5 , rank: gold
Spelare: qFreddy2 , rank: silver
Spelare: rFreddy3 , rank: silver
Spelare: sArnold3 , rank: gold
Spelare: tArnold2 , rank: gold
Spelare: 1Freddy5 , rank: silver
Spelare: 3Freddy4 , rank: silver
Spelare: 4pelle3 , rank: platinum
Spelare: 5pelle4 , rank: platinum
Blandade spelare:
Spelare: mFreddy1 , rank: silver
Spelare: k123n , rank: bronze
Spelare: gpelle1 , rank: platinum
Spelare: lArnold1 , rank: gold
Spelare: tArnold2 , rank: gold
Spelare: aYoda1 , rank: gold
Spelare: asdk123n , rank: bronze
Spelare: rFreddy3 , rank: silver
Spelare: eBosse1 , rank: diamond
Spelare: 5pelle4 , rank: platinum
Spelare: pYoda5 , rank: gold
Spelare: fBosse2 , rank: diamond
Spelare: cBosse3 , rank: diamond
Spelare: iYoda6 , rank: gold
Spelare: sArnold3 , rank: gold
Spelare: dYoda7 , rank: gold
Spelare: 1Freddy5 , rank: silver
Spelare: oYoda4 , rank: gold
Spelare: qFreddy2 , rank: silver
Spelare: hpelle2 , rank: platinum
Spelare: nYoda3 , rank: gold
Spelare: bYoda2 , rank: gold
Spelare: 3Freddy4 , rank: silver
Spelare: z<k123n , rank: bronze
Spelare: 4pelle3 , rank: platinum
Spelare: jBosse4 , rank: diamond
Sorterade Bronze:
Spelare: k123n , rank: bronze
Spelare: asdk123n , rank: bronze
Spelare: z<k123n , rank: bronze
Sorterade Silver:
Spelare: mFreddy1 , rank: silver
Spelare: rFreddy3 , rank: silver
Spelare: 1Freddy5 , rank: silver
Spelare: qFreddy2 , rank: silver
Spelare: 3Freddy4 , rank: silver
Sorterade Gold:
Spelare: lArnold1 , rank: gold
Spelare: tArnold2 , rank: gold
Spelare: aYoda1 , rank: gold
Spelare: pYoda5 , rank: gold
Spelare: iYoda6 , rank: gold
Spelare: sArnold3 , rank: gold
Spelare: dYoda7 , rank: gold
Spelare: oYoda4 , rank: gold
Spelare: nYoda3 , rank: gold
Spelare: bYoda2 , rank: gold
Sorterade Platinum:
Spelare: gpelle1 , rank: platinum
Spelare: 5pelle4 , rank: platinum
Spelare: hpelle2 , rank: platinum
Spelare: 4pelle3 , rank: platinum
Sorterade Diamond:
Spelare: eBosse1 , rank: diamond
Spelare: fBosse2 , rank: diamond
Spelare: cBosse3 , rank: diamond
Spelare: jBosse4 , rank: diamond
Kvalcirkel:
Spelare: eBosse1 , rank: diamond
Spelare: gpelle1 , rank: platinum
Spelare: lArnold1 , rank: gold
Spelare: bYoda2 , rank: gold
Spelare: tArnold2 , rank: gold
Spelare: mFreddy1 , rank: silver
Spelare: fBosse2 , rank: diamond
Spelare: 5pelle4 , rank: platinum
Spelare: aYoda1 , rank: gold
Spelare: 3Freddy4 , rank: silver
Spelare: pYoda5 , rank: gold
Spelare: rFreddy3 , rank: silver
Spelare: cBosse3 , rank: diamond
Spelare: hpelle2 , rank: platinum
Spelare: iYoda6 , rank: gold
Spelare: k123n , rank: bronze
Spelare: sArnold3 , rank: gold
Spelare: 1Freddy5 , rank: silver
Spelare: jBosse4 , rank: diamond
Spelare: 4pelle3 , rank: platinum
Spelare: dYoda7 , rank: gold
Spelare: z<k123n , rank: bronze
Spelare: oYoda4 , rank: gold
Spelare: qFreddy2 , rank: silver
Spelare: nYoda3 , rank: gold
Spelare: asdk123n , rank: bronze
Kvalmatcher att spela:
Match : [Spelare: eBosse1 , rank: diamond] VS [Spelare: gpelle1 , rank: platinum]
Match : [Spelare: eBosse1 , rank: diamond] VS [Spelare: lArnold1 , rank: gold]
Match : [Spelare: gpelle1 , rank: platinum] VS [Spelare: lArnold1 , rank: gold]
Match : [Spelare: gpelle1 , rank: platinum] VS [Spelare: bYoda2 , rank: gold]
Match : [Spelare: lArnold1 , rank: gold] VS [Spelare: bYoda2 , rank: gold]
Match : [Spelare: lArnold1 , rank: gold] VS [Spelare: tArnold2 , rank: gold]
Match : [Spelare: bYoda2 , rank: gold] VS [Spelare: tArnold2 , rank: gold]
Match : [Spelare: bYoda2 , rank: gold] VS [Spelare: mFreddy1 , rank: silver]
Match : [Spelare: tArnold2 , rank: gold] VS [Spelare: mFreddy1 , rank: silver]
Match : [Spelare: tArnold2 , rank: gold] VS [Spelare: fBosse2 , rank: diamond]
Match : [Spelare: mFreddy1 , rank: silver] VS [Spelare: fBosse2 , rank: diamond]
Match : [Spelare: mFreddy1 , rank: silver] VS [Spelare: 5pelle4 , rank: platinum]
Match : [Spelare: fBosse2 , rank: diamond] VS [Spelare: 5pelle4 , rank: platinum]
Match : [Spelare: fBosse2 , rank: diamond] VS [Spelare: aYoda1 , rank: gold]
Match : [Spelare: 5pelle4 , rank: platinum] VS [Spelare: aYoda1 , rank: gold]
Match : [Spelare: 5pelle4 , rank: platinum] VS [Spelare: 3Freddy4 , rank: silver]
Match : [Spelare: aYoda1 , rank: gold] VS [Spelare: 3Freddy4 , rank: silver]
Match : [Spelare: aYoda1 , rank: gold] VS [Spelare: pYoda5 , rank: gold]
Match : [Spelare: 3Freddy4 , rank: silver] VS [Spelare: pYoda5 , rank: gold]
Match : [Spelare: 3Freddy4 , rank: silver] VS [Spelare: rFreddy3 , rank: silver]
Match : [Spelare: pYoda5 , rank: gold] VS [Spelare: rFreddy3 , rank: silver]
Match : [Spelare: pYoda5 , rank: gold] VS [Spelare: cBosse3 , rank: diamond]
Match : [Spelare: rFreddy3 , rank: silver] VS [Spelare: cBosse3 , rank: diamond]
Match : [Spelare: rFreddy3 , rank: silver] VS [Spelare: hpelle2 , rank: platinum]
Match : [Spelare: cBosse3 , rank: diamond] VS [Spelare: hpelle2 , rank: platinum]
Match : [Spelare: cBosse3 , rank: diamond] VS [Spelare: iYoda6 , rank: gold]
Match : [Spelare: hpelle2 , rank: platinum] VS [Spelare: iYoda6 , rank: gold]
Match : [Spelare: hpelle2 , rank: platinum] VS [Spelare: k123n , rank: bronze]
Match : [Spelare: iYoda6 , rank: gold] VS [Spelare: k123n , rank: bronze]
Match : [Spelare: iYoda6 , rank: gold] VS [Spelare: sArnold3 , rank: gold]
Match : [Spelare: k123n , rank: bronze] VS [Spelare: sArnold3 , rank: gold]
Match : [Spelare: k123n , rank: bronze] VS [Spelare: 1Freddy5 , rank: silver]
Match : [Spelare: sArnold3 , rank: gold] VS [Spelare: 1Freddy5 , rank: silver]
Match : [Spelare: sArnold3 , rank: gold] VS [Spelare: jBosse4 , rank: diamond]
Match : [Spelare: 1Freddy5 , rank: silver] VS [Spelare: jBosse4 , rank: diamond]
Match : [Spelare: 1Freddy5 , rank: silver] VS [Spelare: 4pelle3 , rank: platinum]
Match : [Spelare: jBosse4 , rank: diamond] VS [Spelare: 4pelle3 , rank: platinum]
Match : [Spelare: jBosse4 , rank: diamond] VS [Spelare: dYoda7 , rank: gold]
Match : [Spelare: 4pelle3 , rank: platinum] VS [Spelare: dYoda7 , rank: gold]
Match : [Spelare: 4pelle3 , rank: platinum] VS [Spelare: z<k123n , rank: bronze]
Match : [Spelare: dYoda7 , rank: gold] VS [Spelare: z<k123n , rank: bronze]
Match : [Spelare: dYoda7 , rank: gold] VS [Spelare: oYoda4 , rank: gold]
Match : [Spelare: z<k123n , rank: bronze] VS [Spelare: oYoda4 , rank: gold]
Match : [Spelare: z<k123n , rank: bronze] VS [Spelare: qFreddy2 , rank: silver]
Match : [Spelare: oYoda4 , rank: gold] VS [Spelare: qFreddy2 , rank: silver]
Match : [Spelare: oYoda4 , rank: gold] VS [Spelare: nYoda3 , rank: gold]
Match : [Spelare: qFreddy2 , rank: silver] VS [Spelare: nYoda3 , rank: gold]
Match : [Spelare: qFreddy2 , rank: silver] VS [Spelare: asdk123n , rank: bronze]
Match : [Spelare: nYoda3 , rank: gold] VS [Spelare: asdk123n , rank: bronze]
Match : [Spelare: nYoda3 , rank: gold] VS [Spelare: eBosse1 , rank: diamond]
Match : [Spelare: asdk123n , rank: bronze] VS [Spelare: eBosse1 , rank: diamond]
Match : [Spelare: asdk123n , rank: bronze] VS [Spelare: gpelle1 , rank: platinum]
Kvalmatcher att spela för '1Freddy5':
Match : [Spelare: k123n , rank: bronze] VS [Spelare: 1Freddy5 , rank: silver]
Match : [Spelare: sArnold3 , rank: gold] VS [Spelare: 1Freddy5 , rank: silver]
Match : [Spelare: 1Freddy5 , rank: silver] VS [Spelare: jBosse4 , rank: diamond]
Match : [Spelare: 1Freddy5 , rank: silver] VS [Spelare: 4pelle3 , rank: platinum]