Оброзование возрастних групп
У меня есть массив людей A, в котором элемент в позиции i показывает возраст данного человека в этой позиции. Нужно образовать группы в каждом из которых были люди так чтобы максимальной разницей в их возрасте был 4 года. В группе максимальное количество людей должен быть 4 а минимальное 2. Несмотря на возрастную разницу группы в любом случае должны оброзаваться.
Например если A = [18, 30, 20, 45, 36, 20, 47, 50]; матрица образовавшийся групп будет [[18, 20, 20], [30, 36], [45, 47, 50]] Нужно написать функцию которая получит массив людей и вернет матрицу с возрастными группами.
function ageMatrix {}
console.log([18, 30, 20, 45, 36, 20, 47, 50]); // [[18, 20, 20], [30, 36], [45, 47, 50]]
console.log([20, 20, 20, 20, 40, 40, 40, 40]); // [[20, 20, 20, 20], [40, 40, 40, 40]]
console.log([18, 20, 22, 24]); // [[18, 20, 22, 24]]
console.log([20, 22, 20, 22, 20, 23, 24, 25, 24, 24, 24]); // [[20, 20, 20, 22], [22, 23, 24, 24], [24, 24, 25]]
Поможете решить задачу? |
Цитата:
Цитата:
|
Да но несмотря на возрастную разницу группы в любом случае должны оброзаваться.
|
Nicanor13,
<script>
function ageMatrix (arr)
{ let c;
return arr.sort((a, b) => a - b).reduce((a, b, i) => {
if(!c || c.length == 4|| c.length >= 2 && (c[c.length - 1] + 4 < b || arr.slice(i).length == 2)) {
c = []; a.push(c)
}
c.push(b);
return a
}, [])
}
document.write(JSON.stringify(ageMatrix ([18, 30, 20, 45, 36, 20, 47, 50]), "", 1) + "<br>")
document.write(JSON.stringify(ageMatrix ([20, 22, 20, 22, 20, 23, 24, 25, 24, 24, 24]), "", 1) + "<br>")
document.write(JSON.stringify(ageMatrix ([18, 20, 22, 24, 26, 28, 30, 18, 18]), "", 1) + "<br>")
</script>
|
Большое-большое спасибо
Кончено извините но для 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]] Но и на том спасибо |
Nicanor13,
что такое максимальная разница в 4 года? |
Нет в каждой группе должен быть по крайней мере 2 человека (минимальное количество людей 2)
|
Цитата:
|
То есть Ваш код очень хороший и правильно работает кроме последнего варианта
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])); |
Nicanor13,
смотрите пост #4 снова. |
| Часовой пояс GMT +3, время: 07:50. |