Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.03.2020, 20:27
Новичок на форуме
Отправить личное сообщение для Nicanor13 Посмотреть профиль Найти все сообщения от Nicanor13
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 25.03.2020, 20:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от Nicanor13
максимальной разницей в их возрасте был 4 года.
Сообщение от Nicanor13
[30, 36],
Ответить с цитированием
  #3 (permalink)  
Старый 25.03.2020, 21:00
Новичок на форуме
Отправить личное сообщение для Nicanor13 Посмотреть профиль Найти все сообщения от Nicanor13
 
Регистрация: 18.03.2020
Сообщений: 9

Да но несмотря на возрастную разницу группы в любом случае должны оброзаваться.
Ответить с цитированием
  #4 (permalink)  
Старый 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.
Ответить с цитированием
  #5 (permalink)  
Старый 25.03.2020, 21:43
Новичок на форуме
Отправить личное сообщение для Nicanor13 Посмотреть профиль Найти все сообщения от Nicanor13
 
Регистрация: 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]]

Но и на том спасибо
Ответить с цитированием
  #6 (permalink)  
Старый 25.03.2020, 21:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Nicanor13,
что такое максимальная разница в 4 года?
Ответить с цитированием
  #7 (permalink)  
Старый 25.03.2020, 22:00
Новичок на форуме
Отправить личное сообщение для Nicanor13 Посмотреть профиль Найти все сообщения от Nicanor13
 
Регистрация: 18.03.2020
Сообщений: 9

Нет в каждой группе должен быть по крайней мере 2 человека (минимальное количество людей 2)
Ответить с цитированием
  #8 (permalink)  
Старый 25.03.2020, 22:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от Nicanor13
Нет в каждой группе должен быть по крайней мере 2 человека
ок
Ответить с цитированием
  #9 (permalink)  
Старый 25.03.2020, 22:08
Новичок на форуме
Отправить личное сообщение для Nicanor13 Посмотреть профиль Найти все сообщения от Nicanor13
 
Регистрация: 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]));
Ответить с цитированием
  #10 (permalink)  
Старый 25.03.2020, 22:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Nicanor13,
смотрите пост #4 снова.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ВК виджет групп bairron Events/DOM/Window 1 27.11.2015 11:26
Суммирование значений отдельных групп атрибутов value отмеченных radio studentPas Общие вопросы Javascript 10 18.06.2015 18:47
Как сделать, чтобы при вводе числа в поле добавлялись разделители групп разрядов? Hurray Элементы интерфейса 13 18.02.2015 14:07
JS калькулятор value c нескольких групп radio Round Events/DOM/Window 7 30.10.2013 21:29
Слайдер bxSlider: несколько групп кнопок управления spo Библиотеки/Тулкиты/Фреймворки 1 17.10.2013 23:16