25.03.2020, 20:27
|
Новичок на форуме
|
|
Регистрация: 18.03.2020
Сообщений: 9
|
|
Оброзование возрастних групп
У меня есть массив людей 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, 25.03.2020 в 21:01.
|
|
25.03.2020, 20:51
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Сообщение от Nicanor13
|
максимальной разницей в их возрасте был 4 года.
|
Сообщение от Nicanor13
|
[30, 36],
|
|
|
25.03.2020, 21:00
|
Новичок на форуме
|
|
Регистрация: 18.03.2020
Сообщений: 9
|
|
Да но несмотря на возрастную разницу группы в любом случае должны оброзаваться.
|
|
25.03.2020, 21:20
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
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>
Последний раз редактировалось рони, 25.03.2020 в 22:12.
|
|
25.03.2020, 21:43
|
Новичок на форуме
|
|
Регистрация: 18.03.2020
Сообщений: 9
|
|
Большое-большое спасибо
Кончено извините но для
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]]
Но и на том спасибо
|
|
25.03.2020, 21:57
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Nicanor13,
что такое максимальная разница в 4 года?
|
|
25.03.2020, 22:00
|
Новичок на форуме
|
|
Регистрация: 18.03.2020
Сообщений: 9
|
|
Нет в каждой группе должен быть по крайней мере 2 человека (минимальное количество людей 2)
|
|
25.03.2020, 22:03
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Сообщение от Nicanor13
|
Нет в каждой группе должен быть по крайней мере 2 человека
|
ок
|
|
25.03.2020, 22:08
|
Новичок на форуме
|
|
Регистрация: 18.03.2020
Сообщений: 9
|
|
То есть Ваш код очень хороший и правильно работает кроме последнего варианта
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]));
|
|
25.03.2020, 22:13
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Nicanor13,
смотрите пост #4 снова.
|
|
|
|