Готовлю новогоднюю вечеринку с друзьями, решили сыграть в тайного санту. Но до нового года не встречаемся, поэтому жеребьевка удаленно. Захотелось поиграться с кодом, вышел вот такой:
Secret Santa Algorithm
Цель - рандомно раскидать кто кому дарит подарок, так, чтобы не вышло ситуации, что человек дарит самому себе)
Смущает наличие костыля
if (j + 1 == guests.get(j))
Как думаете, что можно улучшить?
Ожидается лаконичный, простой, не зависающий на большом количестве участников, выполняющий свою задачу алгоритм.
import java.util.*;
class Rextester {
public static void main(String args[]) {
int GUESTS_NUMBER = 10;
List
Ответ
А почему бы не сделать так?
Перенумеровать участников, пусть их n
Сгенерировать коллекцию { 1, 2, ..., n } и перетасовать её (Collections.shuffle)
Участник в первым номером в полученной коллекции делает подарок второму участнику в коллекции, второй — третьему, третий — четвёртому, ..., последний — первому.
Алгоритм генерирует просто цикл длины n. Особенность — никогда не будут сгенерированы несколько коротких циклов, всегда только один длинный.
Комментариев нет:
Отправить комментарий