<?php
$array = [
0 => 50,
1 => 200,
2 => 75,
3 => 150,
4 => 100,
5 => 125,
6 => 150,
7 => 300,
8 => 300,
9 => 300,
10 => 300,
11 => 300,
12 => 300,
13 => 300,
14 => 300,
15 => 300,
];
function consolidate(array $array, int $capacity = 500): array
{
arsort($array);
$bins = [[]];
foreach ($array as $value) {
$added = false;
foreach ($bins as &$bin) {
if ($capacity >= (array_sum($bin) + $value)) {
$bin[] = $value;
$added = true;
continue 2;
}
}
if (!$added) {
$bins[] = [$value];
}
}
return array_map('array_sum', array_filter($bins));
}
var_export(consolidate($array));
preferences:
38.97 ms | 402 KiB | 5 Q