-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathteam.txt
38 lines (38 loc) · 1.72 KB
/
team.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/* Players who have already selected a team have their uuids stored in here. */
Team[] selected = new Team[4];
/* Players who have not selected teams here */
List<UUID> players = Collections.EMPTY_LIST;
int minTeamCount = 0;
for(Team team : selected) {
if(!team.members().isEmpty()) {
minTeamCount++;
}
}
ArrayList<Distribution> distributions = new ArrayList<>();
for(int teamCount = minTeamCount; teamCount < 4; teamCount++) {
PriorityQueue<Team> teams0 = new PriorityQueue<>((t1, t2) -> {
return Integer.compare(t1.members().size(), t2.members().size());
});
for(Team team : selected) {
if(!team.members().isEmpty()) {
teams0.add(team);
}
}
for(int j = minTeamCount; j < teams0.size(); j++) {
teams0.add(new Team(new ArrayList<>()));
}
final List<UUID> players0 = new ArrayList<>(players);
while(!players0.isEmpty()) {
teams0.peek().members.add(players0.remove(players0.size() - 1));
}
int minTeamPlayers = 4, maxTeamPlayers = 0;
for(Team team : teams0) {
maxTeamPlayers = Math.max(team.members().size(), maxTeamPlayers);
minTeamPlayers = Math.max(team.members().size(), minTeamPlayers);
}
distributions.add(new Distribution(new ArrayList<>(teams0), 1d * minTeamPlayers / maxTeamPlayers));
}
distributions.sort((d1, d2) -> {
return Double.compare(d1.unbalanceIndex(), d2.unbalanceIndex());
});
distributions.get(0);