<?php
$pool = [
1703 => 15916.19738,
5129 => 11799.15419,
33 => 11173.49945,
1914 => 8439.45987,
2291 => 6284.22271,
5134 => 5963.14065,
5509 => 5169.85755,
4355 => 5153.80867,
2078 => 3932.79341,
31 => 3924.09928,
5433 => 2718.7711,
3172 => 2146.1932,
1896 => 2141.36021,
759 => 1453.5501,
2045 => 1320.74681,
5873 => 1222.7448,
2044 => 1194.4903,
6479 => 1074.1714,
5299 => 950.872,
3315 => 878.06602,
6193 => 847.3372,
1874 => 813.816,
1482 => 330.6422,
6395 => 312.1545,
6265 => 165.9224,
6311 => 122.8785,
6288 => 26.5426,
];
function balanceTeams(array $pool, int $maxTrades = 10): array
{
arsort($pool);
$teams = [[], []];
$i = 1;
foreach ($pool as $k => $v) {
$teams[$i = 1 - $i][$k] = $v;
}
$getDiff = fn($a, $b) => array_sum($a) - array_sum($b);
for ($i = 0; $i < $maxTrades; ++$i) {
$diff = $getDiff(...$teams);
//echo "Diff: $diff\n";
if (!$diff) {
break;
}
foreach ($teams[0] as $idA => $valA) {
foreach ($teams[1] as $idB => $valB) {
if (abs($valA - $valB) < abs($diff)) {
$teams[0][$idB] = $valB;
$teams[1][$idA] = $valA;
unset($teams[0][$idA], $teams[1][$idB]);
arsort($teams[0]);
arsort($teams[1]);
//printf("Trade %d: %s for %s\n", $i + 1, $idA, $idB);
continue 3;
}
}
}
break;
}
return $teams;
}
$teams = balanceTeams($pool);
var_export($teams);
printf(
"Summary:\nAverage: %f\nTeam1 Sum: %f\nTeam2 Sum: %f",
array_sum($pool) / 2,
array_sum($teams[0]),
array_sum($teams[1])
);
- Output for 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- array (
0 =>
array (
5129 => 11799.15419,
33 => 11173.49945,
5134 => 5963.14065,
5509 => 5169.85755,
2078 => 3932.79341,
5433 => 2718.7711,
3172 => 2146.1932,
2045 => 1320.74681,
2044 => 1194.4903,
5299 => 950.872,
6193 => 847.3372,
1482 => 330.6422,
6265 => 165.9224,
6288 => 26.5426,
),
1 =>
array (
1703 => 15916.19738,
1914 => 8439.45987,
2291 => 6284.22271,
4355 => 5153.80867,
31 => 3924.09928,
1896 => 2141.36021,
759 => 1453.5501,
5873 => 1222.7448,
6479 => 1074.1714,
3315 => 878.06602,
1874 => 813.816,
6395 => 312.1545,
6311 => 122.8785,
),
)Summary:
Average: 47738.246250
Team1 Sum: 47739.963060
Team2 Sum: 47736.529440
preferences:
48.21 ms | 408 KiB | 5 Q