Алгоритм выбора строки по его приоритету

Есть 10 человек и у каждого есть приоритет на получение конфет. У нас есть 10 конфет которые мы в зависимости от приоритета должны поделить.

Пользователь |   приоритет | мест в кармане
user1            40%           2
user2            50%           3
user3            10%           2
user4             0%           2
user5             0%           1
user6             0%           2
user7             0%           3 
user8             0%           4
user9             0%           1 
user10            0%           2
  1. Первые 7 конфет распределяются между user1, user2, user3 так как у них приоритет > 0. Остальные - между остальными.
  2. Остальные 3 конфеты случайно выпадают user4-user10

Так как цифры небольшие, то можно ручками посчитать. Но хотелось бы привести это в алгоритм. Это не просто делёжка конфет. Розыгрыш.


Ответы (2 шт):

Автор решения: Aziz Umarov

Алгоритм простой

  1. Создаем и заполняем map списков key =priority, value = list мест в кармане.
  2. Для каждого элемента map в порядке убывания priority. Раздать случайно конфеты (не имеет значения даже если всем достанется)
  3. Если конфеты остались повторят шаг 2
  4. вывести результат

Если приоритеты равны то случайно выбираете поскольку при одинаковых приоритетах

→ Ссылка
Автор решения: AlekseiGaile

Делаем объект с полями юзер, приоритет, мест в кармане. Заполняем список из этих объектов. Сортируем по приоритету, выдаем конфеты по условию приоритет > 0, выдаем остальным по рандому.

→ Ссылка