3v4l.org

run code in 300+ PHP versions simultaneously
<?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