Перейти до вмісту
Обране

Генератор випадкових команд

Оновлено:

Введіть список імен — і цей генератор випадкових команд миттєво розподілить їх на рівні команди. Оберіть кількість команд або осіб у команді, збалансуйте сумарний рівень навичок і скопіюйте результат в один клік.

Поділіть список імен на випадкові команди

Поля введення
Назви команд через кому, напр. «Акули, Вовки». Для команд без власної назви використовуються «Команда 1», «Команда 2»…
Якщо увімкнено, результат оновлюватиметься автоматично після зміни будь-якого значення.

Формула генератора команд

Формула
\[ \text{база} = \left\lfloor \frac{n}{T} \right\rfloor, \quad \text{остача} = n \bmod T, \quad s_i = \text{база} + \begin{cases} 1, & i \le \text{остача} \\ 0, & i > \text{остача} \end{cases} \] \[ T = \left\lceil \frac{n}{P} \right\rceil \quad \text{(якщо ділити за кількістю осіб у команді)}, \qquad \Delta = S_{\max} - S_{\min} \]

Де:

  • \(n\) — кількість людей у списку
  • \(T\) — кількість команд
  • \(s_i\) — розмір команди \(i\) (розміри відрізняються не більше як на одну людину)
  • \(P\) — бажана кількість осіб у команді, якщо поділ іде за розміром команд
  • \(S_{\max}\), \(S_{\min}\) — найбільша й найменша сумарна навичка команд; \(\Delta\) — це розбіжність навичок, яку показує калькулятор

Перший рядок гарантує, що розміри команд максимально однакові: кожна команда отримує \(\text{база}\) учасників, а перші \(\text{остача}\) команд — ще по одному. Розбіжність навичок \(\Delta\) показує, наскільки сильна команда відрізняється від найслабшої; коли балансування за навичками увімкнено, генератор намагається звести \(\Delta\) до 0.

Генератор команд — приклад обчислення

Приклад: шість людей із рейтингами навичок — Alice 9, Bob 7, Carol 8, Dan 5, Eve 6, Frank 4 — розподілені на 3 команди з назвами «Акули», «Вовки», «Орли», з увімкненим параметром «Збалансувати за навичками» (типові налаштування калькулятора).

\[ n = 6, \quad T = 3 \quad \Rightarrow \quad \text{база} = \left\lfloor \tfrac{6}{3} \right\rfloor = 2, \quad \text{остача} = 0 \Rightarrow s_i = 2 \]

\[ \text{сума навичок} = 9 + 7 + 8 + 5 + 6 + 4 = 39, \quad \text{рівна частка} = \tfrac{39}{3} = 13 \]

Якщо відсортувати учасників від найсильнішого до найслабшого і роздавати кожного команді з найменшою поточною сумою, пари виходять такими: \(9+4\), \(8+5\), \(7+6\):

\[ 9 + 4 = 13, \quad 8 + 5 = 13, \quad 7 + 6 = 13 \quad \Rightarrow \quad \Delta = 13 - 13 = 0 \]

Результат: «Акули» — Alice (9), Frank (4); «Вовки» — Carol (8), Dan (5); «Орли» — Bob (7), Eve (6). Кожна команда має по 2 людини і сумарну навичку рівно 13, тож розбіжність навичок дорівнює 0 — ідеально збалансований жереб.

Як користуватися калькулятором

  1. Введіть імена в поле Імена — по одному на рядок. Щоб увімкнути балансування за навичками, додайте після коми або крапки з комою число, наприклад Alice, 9 (для десяткових дробів використовуйте крапку, наприклад Alice, 8.5). Порожні рядки ігноруються.
  2. Оберіть спосіб поділу в полі Поділити за: Кількість команд або Осіб у команді. Нижче з’явиться відповідне поле (Кількість команд або Осіб у команді).
  3. За бажанням введуть назви команд через кому в полі Назви команд (необов’язково), наприклад Акули, Вовки, Орли. Команда без назви отримає автоматичну — «Команда 1», «Команда 2»…
  4. Якщо вашим іменам приписані числа навичок, лишіть увімкненим Збалансувати за навичками, щоб вирівняти сумарний рівень команд; зніміть позначку — і розподіл буде суто випадковим.
  5. Готові команди ви побачите в блоці Ваші команди разом з кількістю команд, осіб у команді та розбіжністю навичок. Натисніть Перетасувати ще раз для нового жеребу або Копіювати як текст, щоб поставити весь список у буфер обміну.

Що таке генератор випадкових команд?

Генератор випадкових команд бере список імен і розподіляє його на команди без жодного упередження — це цифровий аналог жеребу з капелюха, тільки швидше і чесніше. Він зручний, коли треба поділити клас на проєктні групи, сформувати команди для товариського матчу, розсадити учасників за столами на воркшопі або створити випадкові пари для турніру чи «Таємного Санти».

Чесність тут має два аспекти. Перший — жодна людина і жоден розподіл не мають переваги: список перетасовується алгоритмом Фішера–Єйтса на основі криптографічно безпечних випадкових чисел (crypto.getRandomValues), тож кожен можливий поділ на команди однаково ймовірний. Другий — команди рівні за розміром: розміри ніколи не відрізняються більше ніж на одну людину, тож ніхто не залишиться сам-один, поки інші грають повним складом.

Необов’язкове балансування за навичками додає третій рівень чесності. Кожній людині можна приписати число — рейтинг, гандикап, минулотижневий результат, місце в настільному тенісі — і генератор розподілить людей так, щоб суми по командах були якомога ближчими. Спочатку всі сортується від найсильнішого до найслабшого, і кожен приєднується до доступної команди з найменшою поточною сумою. Значення Розбіжність навичок у результатах (різниця між найсильнішою і найслабшою командою) показує, наскільки добре це вдалося: 0 — ідеально рівні суми, малі значення — матч має бути конкурентним.

Зауважте: коли навички увімкнено, жереб лише частково випадковий — розміри і рівність команд гарантовані, суми збалансовані, але про цілковиту непередбачуваність уже не йдеться. Якщо вам потрібен зовсім непередбачуваний жереб — як випадкове колесо чи підкидання монети — зніміть позначку балансування або скористайтеся нашим кидачем кубиків для швидких випадкових рішень.

Обмеження та практичні поради

  • Список приймає від 2 до 200 імен, до 120 символів на рядок. Числа навичок мають бути від 0 до 1000 і можуть містити десяткову крапку.
  • Імена без числа навички в сумах рахуються як 0. Якщо змішувати імена з навичками й просто імена, розбіжність NAVколи не зможе бути зовсім малою — призначте число кожному, щоб отримати найкращий результат.
  • Балансування за навичками — швидкий жадібний метод, а не повний перебір. Для звичайних списків він знаходить збалансований поділ, але за дуже хитрих комбінацій чисел може існувати математично ідеальний поділ, який калькулятор ледь-ледь не дістане.
  • Коли ви обираєте поділ за Осіб у команді і список не ділиться на рівні частини, остання команда просто отримує решту людей — про це прямо повідомляється в результатах.
  • Команди зберігають свій склад, поки щось не зміниться: редагування імені, зміна способу поділу або натискання Перетасувати ще раз створює новий жереб. Тому можна спокійно скопіювати або зробити знімок результату — він не зміниться під руками.
  • Перетасовка іде від криптографічного джерела випадковості браузера, тож жереби неможливо відтворити, а списки імен ніде не зберігаються — усе відбувається локально у вашому браузері.
  • Якщо потрібен один переможець, а не команди — вибрати одне імя з капелюха, визначити, хто ходить першим, — краще пасує підкидання монети або інструмент випадкового вибору, а не поділ на команди.

Часті запитання

Як випадково розподілити список на команди без спеціальних інструментів?

Напишіть кожне імя на окремому папірці, покладіть папірці в капелюх і тягніть їх по одному: перший папірець утворює команду 1, наступний — команду 2 і так далі, а коли команди закінчаться — знову починайте з команди 1. Цей спосіб «роздавати кругами» тримає розміри команд у межах однієї людини. Записуйте порядок жеребу, щоб ніхто не міг дорікнути вам у прихильності, або попросіть нейтральну людину тягнути папірці.

Чи дійсно перетасовка випадкова й чесна?

Так. Генератор використовує перетасовку Фішера–Єйтса на основі криптографічного джерела випадковості вашого браузера (crypto.getRandomValues) — того ж рівня випадковості, що застосовується в завданнях безпеки. Кожен можливий поділ на команди однаково ймовірний — жодне імя, позиція чи команда не має переваги. Зауважте: коли балансування за навичками увімкнено, жереб навмисно лише частково випадковий, бо ціль зсувається з непередбачуваності на рівну силу команд.

Яке значення розбіжності навичок вважати добрим?

Розбіжність навичок — це різниця між сумарними навичками найсильнішої й найслабшої команди. 0 — ідеал, коли суми однакові. А яка розбіжність ще «не рахується», залежить від ваших рейтингів: при навичках близько 5–10 розбіжність 1–2 зазвичай дає конкурентний матч, а при рейтингах близько 100 така сама розбіжність непомітна. Якщо розбіжність здається великою, додайте числа навичок людям, у яких їх немає, адже відсутні числа рахуються як 0.

Що буде, якщо список не ділиться на рівні частини?

Нічого не ламається — решта людей роздається першими. Коли ви ділите на фіксовану кількість команд, розміри ніколи не відрізняються більше ніж на одну людину: з 10 людей і 3 команд ви отримаєте розміри 4, 3, 3. Коли ви ділите за кількістю осіб у команді, остання команда бере все, що лишилося: 10 людей по 3 в команді дає 4 команди, остання — з 1 людиною, і в результатах про це plainly сказано. Якщо хочете уникнути крихітної «залишкової» команди, оберіть поділ за кількістю команд.

Чи можна використати це для «Таємного Санти» або визначення того, хто перший?

Для обміну подарунками підійде, якщо задати по 2 особи в команді — тоді кожна пара імен показує, хто кому дарує. Але майте на увазі: кожна пара «дарує одне одному», що менш таємно, ніж повний ланцюжковий жереб. Для вибору одного переможця, доповідача або того, хто ходить першим, поділ на команди — не той інструмент: вибиралка випадкових імен або підкидання монети швидші і краще пасують.

Чому при балансуванні за навичками щоразу виходять однакові чи дуже схожі команди?

Це очікувано. Коли балансування увімкнено, люди сортуються за навичками, і кожен приєднується до команди з найменшою поточною сумою, тож структура поділу здебільшого визначається самими числами — змінюється лише порядок серед рівних навичок і порядок призначення команд. Якщо хочете, щоб кожен жереб відчувався зовсім іншим, зніміть позначку «Збалансувати за навичками» — тоді розподіл буде суто випадковим.

Чи можна розподілити непарну кількість людей у команди по 2, наприклад турнірні пари?

Так, але передбачте «зайву» людину. З 9 людей по 2 в команді ви отримаєте 4 команди плюс останню команду з 1 людини, бо остання команда забирає все, що лишилося. Якщо самотня «команда з одного» вам ні до чого, приберіть одне імя (класичний «bye» у турнірних сітках — пропуск туру без гри), додайте запізнілого учасника, щоб вирівняти кількість, або знизіть планку, поділивши за кількістю команд, щоб розміри були максимально рівними (наприклад, 9 людей — на 3 команди по 3).

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *