CodeKitHub
Generátorové nástroje

Generátor losovania mien

Naposledy aktualizované:

Losovanie mien pre Secret Santa alebo výmenu darčekov naráža na skutočný matematický problém: čisto náhodné premiešanie môže niekoho náhodou priradiť samému sebe, a opakované losovanie, kým to "nevyzerá dobre", už nie je skutočne náhodné. Tento nástroj to rieši správne — zadáš mená všetkých a on vypočíta deranžment (premiešanie s matematickou zárukou, že nikto neskončí na svojom vlastnom mene), potom skryje každý výsledok za tlačidlo na odhalenie, aby si každý mohol na spoločnej obrazovke overiť len svoje vlastné priradenie bez toho, aby videl výsledky ostatných.

Čo je tento nástroj?

Deranžment je presný matematický pojem: permutácia (preusporiadanie) množiny, kde žiadny prvok nezostane na svojej pôvodnej pozícii. Aplikované na výmenu darčekov to znamená premiešať mená všetkých tak, aby nikto nebol spárovaný sám so sebou — presne obmedzenie, ktoré potrebuje spravodlivé losovanie Secret Santa, a presne to, čo naivné premiešanie typu `array.sort(() => Math.random() - 0.5)` NEZARUČUJE.

Nástroj vygeneruje deranžment opakovaným premiešaním zoznamu náhodným algoritmom a kontrolou obmedzenia na sebapriradenie, pričom ako zdroj náhodnosti používa `crypto.getRandomValues()` — rovnaký kryptograficky bezpečný zdroj, aký používa Generátor hesiel na tomto webe.

Dizajn s tlačidlom na odhalenie rieši ďalší, veľmi praktický problém skupinového losovania: zobrazenie všetkých priradení na obrazovke naraz pokazí prekvapenie všetkým súčasne. Skrytím výsledku každej osoby za jej vlastné tlačidlo môže jedno zariadenie kolovať (alebo môže byť zdieľaná obrazovka), aby si každý overil len svoje meno.

Prečo ho používať?

  • Je vianočný večierok v práci a niekto si práve spomenul, že nikto nezorganizoval Secret Santa — zadáš 14 mien z tímového chatu a vylosuješ dvojice priamo na porade, kým sa ľudia nerozídu na obed.
  • Rodinná skupina sa nevie zhodnúť, kto komu kupuje darček tento rok, a polovica by si radšej nesťahovala ďalšiu appku len kvôli losovaniu — otvoríš to na jednom telefóne, pošleš okolo stola a každý si klikne svoje tlačidlo na odhalenie.
  • Niekto opustil skupinu dva dni pred výmenou a tabuľka z minulého roka už nesedí — vložíš aktualizovaný zoznam mien a vylosuješ znova za pár sekúnd namiesto ručného opravovania dvojíc.
  • Skúsil si rýchle premiešanie `sort(() => Math.random() - 0.5)` pre pracovnú výmenu a niekto dostal sám seba — tento nástroj existuje presne na to, aby to vylúčil garantovaným deranžmentom namiesto šťastného premiešania.
  • Chceš, aby odhalenie prebehlo naživo na videohovore bez toho, aby sa niekomu na obrazovke mihlo cudzie priradenie — zdieľaš obrazovku a každý ti povie, kedy má kliknúť na svoj riadok, aby to videl len on.

Ako sa používa

  1. Napíš meno každého účastníka na samostatný riadok — aspoň 3 rôzne mená.
  2. Klikni na "Vylosovať dvojice" — nástroj vypočíta platný deranžment, aby nikto nebol spárovaný sám so sebou.
  3. Riadok každého účastníka zobrazí jeho meno so skrytým výsledkom — pošlite zariadenie okolo alebo zdieľajte obrazovku a nech si každý klikne na svoje tlačidlo "Klikni na odhalenie".
  4. Klikni znova na odhalenie, aby si ho skryl, keď si ho niekto overil, a pripravil obrazovku pre ďalšiu osobu.

Príklad

Vstup

Adam, Beáta, Cyril, Dária

Výstup

Adam → Cyril, Beáta → Dária, Cyril → Beáta, Dária → Adam

Každý beh vytvorí iný platný deranžment — toto je len jeden príklad výsledku. Všimni si, že nikto nie je priradený sám sebe, čo je jediná tvrdá podmienka skutočného losovania Secret Santa, ktorú obyčajné premiešanie nezaručuje.

Deranžment vs. obyčajné náhodné premiešanie

Obyčajné premiešanie a deranžment vyzerajú podobne, ale len jedno z nich je skutočne bezpečné pre výmenu darčekov.

MetódaMôže priradiť niekoho sebe samému?Spravodlivé pri opakovanom losovaní, kým to "nevyzerá dobre"?
Obyčajné náhodné premiešanieÁno — reálna možnosť, najmä v malých skupináchNie — ručné zamietanie zlých výsledkov skresľuje výsledok
Deranžment (tento nástroj)Nie — matematicky vylúčené už konštrukciouNeplatí — každý platný výsledok už spĺňa podmienku

Súvisiace nástroje

Pre ďalšie náhodné losovania a generátory vyskúšaj tieto nástroje.

→ Generátor mien drakov · Generátor mien nápojov · Generátor mien fantasy futbalu

Ako viesť skupinové losovanie bez toho, aby si si pokazil vlastné prekvapenie

Najzložitejšia časť losovania Secret Santa nie je náhodnosť — je to zabezpečiť, aby organizátor losovania náhodou nevidel priradenia všetkých pri jeho nastavovaní. Niekoľko zvykov to uľahčí.

  • Zadaj zoznam mien a klikni na "Vylosovať dvojice" bez toho, aby si si sám prezeral výsledky — podaj zariadenie priamo prvému účastníkovi namiesto toho, aby si si pozrel, kto komu pripadol.
  • Ak si organizátor a zároveň účastník, popros niekoho iného, nech drží zariadenie pri tvojom odhalení, alebo počkaj až na koniec, aby sa nikto necítil uponáhľane pri tvojom sledovaní.
  • Pri vzdialenej skupine zdieľaj obrazovku, ale drž kurzor mimo tlačidiel na odhalenie — nahlas oznamuj, kto je na rade, a nech si každý klikne na svoj riadok cez hlas alebo chat.
  • Ak je skupina veľká, postupuj podľa rovnakého poriadku ako zasadací plán alebo zoznam účastníkov, aby nikto nebol náhodou vynechaný alebo skontrolovaný dvakrát.

Časté otázky

Čo sa stane, ak sa meno zadá dvakrát?

Nástroj vyžaduje, aby bolo každé meno jedinečné, inak nespustí losovanie — ak zistí duplicitný riadok, požiada ťa o opravu zoznamu, keďže dvaja účastníci s identickým menom by znemožnili rozlíšiť ich výsledky.

Môže si niekto vylosovať sám seba?

Nie — nástroj špecificky počíta deranžment, premiešanie s matematickou vlastnosťou, že žiadny prvok (osoba) neskončí na svojej pôvodnej pozícii. Táto záruka je vynútená algoritmom, nie ponechaná na náhodu ako pri obyčajnom premiešaní.

Aký je minimálny potrebný počet ľudí?

Traja. S iba dvomi ľuďmi je deranžment nemožný bez toho, aby boli jednoducho vždy priradení jeden druhému, čo nie je zmysluplne náhodné, takže nástroj vyžaduje aspoň troch účastníkov.

Ako si udržíme súkromie výsledkov, ak sa všetci pozeráme na tú istú obrazovku?

Výsledok každého účastníka je skrytý za vlastným tlačidlom "Klikni na odhalenie" namiesto toho, aby sa zobrazil naraz. Pošlite zariadenie (alebo zdieľajte obrazovku) postupne každej osobe, nech si odhalí a poznačí len svoj riadok, a potom ho znova skryte pred odovzdaním ďalšej osobe.

Posielajú sa mená alebo výsledok losovania na server?

Nie. Všetko — čítanie mien, výpočet deranžmentu aj zobrazenie tlačidiel na odhalenie — prebieha úplne v tvojom prehliadači. Nič sa neposiela nikam a zatvorenie karty všetko vymaže, takže nezostane žiadna história, ktorá by mohla neskôr pokaziť prekvapenie.

Môžem vylúčiť konkrétne dvojice, napríklad partnerov, ktorí by si nemali kupovať darčeky navzájom?

Momentálne nie — deranžment garantuje len to, že nikto nie je priradený sám sebe, nevylučuje iné konkrétne dvojice ako manželov či súrodencov. Ak je to pre tvoju skupinu dôležité, skontroluj výsledok a manuálne vylosuj znova, ak sa objaví dvojica, ktorej si sa chcel vyhnúť.

Čo sa stane, ak obnovím alebo zavriem kartu počas odhaľovania výsledkov?

Losovanie sa stratí — medzi načítaniami stránky sa zámerne nič neukladá, takže nezostane záznam, ktorý by mohol neskôr pokaziť prekvapenie. V takom prípade jednoducho znova zadaj mená a vylosuj — dostaneš nový (iný) platný deranžment.

Môžu dvaja ľudia spustiť samostatné losovania a dostať rôzne výsledky pre rovnaké mená?

Áno — každé losovanie je nanovo náhodné pomocou `crypto.getRandomValues()`, takže zadanie rovnakého zoznamu mien dvakrát veľmi pravdepodobne vytvorí dva rôzne platné deranžmenty, nie opakovanie tej istej dvojice.

Existuje maximálny počet účastníkov?

Nie je nastavený žiadny pevný limit — algoritmus deranžmentu funguje rovnako, či zadáš 3 alebo 30 mien. Veľmi veľké skupiny môžu výpočet trvať o čosi dlhšie, no v praxi je to nepostrehnuteľné aj pri niekoľkých stovkách mien.

Ovplyvňuje poradie, v akom zadávam mená, kto komu bude priradený?

Nie — premiešanie je náhodné nezávisle od poradia zadania, takže zadanie mien abecedne, podľa zasadacieho poriadku alebo náhodne nemá vplyv na spravodlivosť ani výsledok losovania.

Súvisiace nástroje