Skip to content

Instantly share code, notes, and snippets.

@kotoyama
Last active October 5, 2023 04:31
Show Gist options
  • Save kotoyama/3d3e48205cf5f5a1d3fa8a7f579be6a0 to your computer and use it in GitHub Desktop.
Save kotoyama/3d3e48205cf5f5a1d3fa8a7f579be6a0 to your computer and use it in GitHub Desktop.
const players = [
{
nickname: "shinykip82",
displayName: "𝓢𝓱𝓲𝓷𝔂𝓚𝓲𝓹82",
crowns: 545
},
{
nickname: "alan_snowman",
displayName: "alan snowman",
crowns: 6593
},
{
nickname: "marlenii",
displayName: "M-Lenii",
crowns: 3193
},
{
nickname: "golden_socks",
displayName: "Golden_Socks",
crowns: 495
},
{
nickname: "PandaPotter1",
displayName: "PandaPotter1",
crowns: 4814
},
{
nickname: "janarca",
displayName: "Janarca",
crowns: 5653
},
{
nickname: "galaxystar4041",
displayName: "GalaxyStar | Tim",
crowns: 929
},
{
nickname: "boorrna",
displayName: "LAOS MOST WANTED",
crowns: 4694
},
{
nickname: "majestik_ex",
displayName: "Majestik",
crowns: 2636
},
{
nickname: "neonnd12",
displayName: "neonnd12",
crowns: 759
},
{
nickname: "archsine",
displayName: "Archsine",
crowns: 1427
},
{
nickname: "violetti_lohis",
displayName: "violetti_lohis",
crowns: 953
},
{
nickname: "— 𓏲࣪ ٬٬ 🌑 𝓑𝒍𝒖𝒆 𝓜𝒐𝒐𝒏. Ⳋⳋ",
displayName: "Gilbert_Hime / Unique Fraise 🍓",
crowns: 1565
},
{
nickname: "auron956",
displayName: "Auron956",
crowns: 3327
},
{
nickname: "ein_vampi",
displayName: "Vamp",
crowns: 3868
},
{
nickname: "squirrelburrito",
displayName: "squirrelburrito",
crowns: 1916
},
{
nickname: "nohtos",
displayName: "nohtos",
crowns: 1771
},
{
nickname: "harpielad",
displayName: "RenaVenga",
crowns: 2946
},
{
nickname: "buntafujiwara82_longcoyote82",
displayName: "Long Coyote 82",
crowns: 2294
},
{
nickname: "thempxst",
displayName: "thempxst",
crowns: 3800
},
{
nickname: "Kons08",
displayName: "Kons08",
crowns: 1305
},
{
nickname: "icyy",
displayName: "icyy",
crowns: 1725
},
{
nickname: "wassuh_my_ninja",
displayName: "Wassuh_My_Ninja",
crowns: 2805
},
{
nickname: "basosysg",
displayName: "BasosySG",
crowns: 4727
},
{
nickname: "NappyEater",
displayName: "Full Nappy",
crowns: 6197
},
{
nickname: "g.i.janie",
displayName: "G.i.Janie",
crowns: 249
},
{
nickname: "delunali",
displayName: "mimi (electricallz)",
crowns: 1835
},
{
nickname: "duxonline",
displayName: "DuxOnline",
crowns: 1015
},
{
nickname: "gripofdogs",
displayName: "gripofdogs",
crowns: 1470
},
{
nickname: "katdog88",
displayName: "Ƙ@tƊ□g⁸⁸",
crowns: 1955
},
{
nickname: "slickback93",
displayName: "Slickback93",
crowns: 2041
},
{
nickname: "carookemachine",
displayName: "Carookemachine",
crowns: 2682
},
{
nickname: "vlado35bg",
displayName: "vlado35bg",
crowns: 2244
},
{
nickname: "netmania",
displayName: "Net (is Fall Guy)",
crowns: 2252
},
{
nickname: "nickallegri",
displayName: "NickAllegri",
crowns: 2900
},
{
nickname: "ghostofmidville",
displayName: "GhostofMidville",
crowns: 2792
},
{
nickname: "lilacausten",
displayName: "Lilac",
crowns: 803
},
{
nickname: "otto_helmut",
displayName: "OttoHelmut",
crowns: 1275
},
{
nickname: "mfpdeux",
displayName: "mfpdeux",
crowns: 1589
},
{
nickname: "HusseinAhmed",
displayName: "HusseinAhmed",
crowns: 3100
},
{
nickname: "splashyheron",
displayName: "SplashyHeron",
crowns: 5101
},
{
nickname: "mandy",
displayName: "MegastonexMandy",
crowns: 2058
},
{
nickname: "savarez03",
displayName: "air_bobby_",
crowns: 3058
},
{
nickname: "wassey.",
displayName: "wassey.",
crowns: 2844
},
{
nickname: "g.g.guy",
displayName: "G-G-Guy",
crowns: 3569
},
{
nickname: "nightmareofthelabyrinth",
displayName: "Emelie",
crowns: 1394
},
{
nickname: "ameentey",
displayName: "Ameentey",
crowns: 198
},
{
nickname: "helbiggetje",
displayName: "Helbiggetje",
crowns: 3635
},
{
nickname: "saftniki",
displayName: "Saft Niki",
crowns: 4682
},
{
nickname: "perspectivus",
displayName: "perspectivus",
crowns: 3897
},
{
nickname: "pierrotcsr2",
displayName: "Pierrot WestCoast514",
crowns: 2642
},
{
nickname: "jagaroot",
displayName: "Jagaroot",
crowns: 3064
},
{
nickname: "ambs_92",
displayName: "ambs",
crowns: 2311
},
{
nickname: "hotarumalfoy",
displayName: "HotaruMalfoy",
crowns: 3712
},
{
nickname: "wheelindealing",
displayName: "WheelinDealing",
crowns: 1883
},
{
nickname: "trojangirl",
displayName: "TrojanGirl20",
crowns: 2611
}
].map((player, index) => ({ ...player, applicationId: index + 1 }));
const sum = (arr) => arr.reduce((acc, val) => acc + val, 0);
const getUniqueListBy = (arr, key) => [
...new Map(arr.map((item) => [item[key], item])).values()
];
function createBalancedTeams({ players, teamsCount, minPlayersPerTeam }) {
const sortedPlayers = players.sort((a, b) => b.crowns - a.crowns);
const teams = Array.from({ length: teamsCount }, () => []);
for (let i = 0; i < sortedPlayers.length; i++) {
const player = sortedPlayers[i];
let minCrownCount = sum(teams[0].map((player) => player.crowns));
let minCrownCountTeamIndex = 0;
for (let j = 1; j < teamsCount; j++) {
const currentCrownCount = sum(teams[j].map((player) => player.crowns));
if (currentCrownCount < minCrownCount) {
minCrownCount = currentCrownCount;
minCrownCountTeamIndex = j;
}
}
teams[minCrownCountTeamIndex].push(player);
}
for (const team of teams) {
while (team.length < minPlayersPerTeam && sortedPlayers.length > 0) {
team.push(sortedPlayers.pop());
}
}
return teams.map((team, index) => ({
team,
name: `Team ${index + 1}`,
crownsTotal: sum(team.map((player) => player.crowns))
}));
}
const result = createBalancedTeams({
players: [...players],
teamsCount: 8,
minPlayersPerTeam: 6
});
console.log("Length:", players.length);
console.log("Players:", getUniqueListBy(players, "nickname"));
console.log(result);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment