У меня есть массив людей A, в котором элемент в позиции i показывает возраст данного человека в этой позиции. Нужно образовать группы в каждом из которых были люди так чтобы максимальной разницей в их возрасте был 4 года. В группе максимальное количество людей должен быть 4 а минимальное 2. Несмотря на возрастную разницу группы в любом случае должны оброзаваться.
Например если
A = [18, 30, 20, 45, 36, 20, 47, 50];
матрица образовавшийся групп будет
[[18, 20, 20], [30, 36], [45, 47, 50]]
Нужно написать функцию которая получит массив людей и вернет матрицу с возрастными группами.
function ageMatrix(arr)
{
let c;
return arr.sort((a, b) => a - b).reduce((a, b) => {
if (!c || c.length == 4 || c.length >= 2 && c[c.length - 1] + 4 < b) {
c = [];
a.push(c)
}
c.push(b);
return a;
}, [])
}
console.log(ageMatrix([18, 30, 20, 45, 36, 20, 47, 50])); // [[18, 20, 20], [30, 36], [45, 47, 50]]
console.log(ageMatrix([20, 20, 20, 20, 40, 40, 40, 40])); // [[20, 20, 20, 20], [40, 40, 40, 40]]
console.log(ageMatrix([18, 20, 22, 24])); // [[18, 20, 22, 24]]
console.log(ageMatrix([20, 22, 20, 22, 20, 23, 24, 25, 24, 24, 24])); // [[20,20,20,22],[22,23,24,24],[24,24,25]]
console.log(ageMatrix([20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20])); // [[20,20,20,20],[20,20,20,20],[20,20,20,20]]
console.log(ageMatrix([18, 20, 22, 24, 26, 28, 30, 18, 18])); // [[18,18,18,20],[22,24,26,28],[30]] но должен виводить [[18,18,18,20],[22,24,26],[28, 30]]
Код верно работает во всех вариантах кроме последнего варианта поможете исправить ошибку?