Треба да извучете добитника наградне игре, прозовете ученика пред таблу или да одлучите ко данас баца ђубре? Ова бесплатна онлајн алатка поштено и случајно бира победнике са било које листе коју убаците. Унесите своје опције у поље „Ставке“ — по једну у сваком реду или одвојене зарезима, подесите жељени број резултата у пољу „Број“ и притисните „Генериши“. Листа мора имати најмање два елемента и може да прими до 1000 уноса, сваки дужине до 200 карактера.
Свако извлачење се обавља директно у вашем прегледачу помоћу Web Crypto API (crypto.getRandomValues), који преузима криптографски сигурне случајне вредности из вашег оперативног система. Ваша листа се никада не шаље на сервер, не чува се и ми је никада не видимо — што је овде много важније него код других генератора, јер људи најчешће убацују листе клијената, дневнике одељења или имена колега. Дугме „Учитај из датотеке“ поштује исто обећање: ваш прегледач сам чита датотеку и попуњава поље локално, без отпремања било чега на интернет.
Опције су прилагођене листама које људи заиста користе. Опција „Раздвајач“ је подразумевано постављена на „Аутоматски“ и сама препознаје нове редове и зарезе, тако да листа копирана из табеле, поруке или документа ради без додатног форматирања. Закључајте је на „Нови ред“, „Зарез“ или „Размак“ када се у вашим подацима мешају различити формати. Имајте на уму да је опција „Размак“ увек свестан избор и никада се не примењује аутоматски, јер уноси попут имена и презимена садрже размаке, а аутоматско раздвајање по њима би уништило листу. Поље „Број“ одређује колико ће елемената бити извучено (од 1 до 100). Извлачите три добитника од 200 учесника? Убаците учеснике, поставите „Број“ на 3 и притисните „Генериши“. Две опције постају доступне тек када је број 2 или више, а до тада остају неактивне (сиве): прекидач „Без понављања“, који одлучује да ли исти елемент може бити извучен два пута, и „Формат резултата“, који одређује како се резултати раздвајају („Сваки у новом реду“, „Одвојено размацима“ или „Одвојено зарезима“).
Низ дугмади унутар поља „Ставке“ врши уређивање које бисте иначе морали да радите негде другде. Опција „Учитај из датотеке“ повлачи листу директно из текстуалне или CSV датотеке. Дугме „Схуффле“ мења редослед уноса у пољу, „Сортирај“ их ређа абецедно и по природном редоследу бројева (док други клик обрће редослед), а „Обриши“ потпуно празни поље. Дугме „Убаци пример“ убацује кратку тест листу како бисте могли да испробате алатку једним кликом. Опција „Прошири на целу листу“ отвара поље како би приказала целу дугу листу, док је „Скупи“ враћа на подразумевану величину. Испод резултата, дугме „Копирај све“ пребацује сваки извучени елемент у меморију (clipboard), „Сачувај у датотеку“ их уписује на ваш уређај, а „Историја“ чува ваших последњих 10 извлачења у прегледачу, па вам је претходни резултат доступан једним кликом.
Како се заиста врши случајан избор? Када притиснете „Генериши“, страница уместо ослањања на псеудослучајну JavaScript функцију Math.random() тражи од прегледача случајне вредности преко crypto.getRandomValues и користи их за избор позиција на вашој листи. Претварање сирове 32-битне вредности у позицију је место где већина алатки тихо прави грешку: дељење вредности дужином листе и узимање остатка је очигледан, али пристрасан приступ. То је тако јер, осим уколико се број 2^32 дели дужином листе без остатка, елементи на почетку листе падају нешто чешће од осталих. Овај недостатак се назива modulo bias и он је мерљив, а не теоретски. Ова алатка уместо тога одбацује сваку вредност која премашује највећи тачан садржалац дужине листе и извлачи поново — техника позната као rejection sampling. Ово кошта неколико додатних извлачења у позадини, али даје тачну гаранцију уместо приближне. Позиција на листи не мења ништа: први и последњи елемент имају једнаку вероватноћу при сваком извлачењу.
Прекидач „Без понављања“ одваја две потпуно различите врсте извлачења, а статистика за сваку има своје име. Када је укључен, алатка меша копију ваше листе помоћу алгоритма Fisher-Yates и узима елементе са врха — исто као да извлачите папириће из шешира без враћања назад, тако да нико није изабран два пута и свака група те величине има једнаке шансе. То се зове sampling without replacement (узорковање без понављања), и то је оно што вам треба при избору добитника награда, тимова или редоследа. Када је искључен, сваки избор се прави независно од целе листе, па исти елемент може пасти више од једном. То је sampling with replacement (узорковање са понављањем), што је потребно када сви остају важећи у сваком кругу, као код поновљених извлачења или брзог статистичког узорка. Ниједан од ових режима није поштенији од другог; они једноставно одговарају на различите потребе.
Поштено извлачење споља не треба да изгледа поштено. Ако извлачите пет имена од десет, редовно ћете видети два елемента која су у првобитној листи била један поред другог, или исто име два пута заредом када су понављања дозвољена, и сваки од тих случајева је потпуно нормалан. Свако извлачење је независно: претходни резултати немају никакав утицај на касније, и никада не долази нечији „ред“ за победу. Инстинкт који тврди супротно назива се gambler's fallacy (коцкарска заблуда), и то је исти инстинкт због којег ми сами лоше бирамо случајно — када нас замоле да изаберемо нешто насумично, избегавамо први и последњи елемент, трудимо се да не понављамо имена и своје изборе распоређујемо много равномерније него што то чини права случајност. Резултат који изгледа сумњиво уредно је отисак људског прста; права случајност ствара груписања и понављања.
Зашто изабрати ову алатку за случајан избор?
- Извлачење само у прегледачу: ваша листа се чита на вашем уређају и нигде се не шаље
- Web Crypto API случајност: криптографски сигурно, а не Math.random()
- Без modulo bias: rejection sampling одржава шансе једнаким за све елементе
- Било какав облик листе: по један у реду, са зарезом или размаком, без преформатирања
- Режим „Без понављања“: извлачите победнике или тимове тако да нико не буде изабран два пута
- До 1000 уноса на листи и до 100 резултата при једном извлачењу
- Уграђене алатке за листу: учитај из датотеке, схуффле, сортирај, обриши, пример података
- Историја и Сачувај у датотеку: задржите евиденцију о извлачењу које ћете можда морати да оправдате
- Неограничено и бесплатно: без регистрације, без ограничења за коришћење, ништа на нашим серверима
Случајан избор је користан свуда где одлука мора да преживи преиспитивање. Наставници прозивају ученике пред таблу без издвајања миљеника и деле одељење у пројектне групе. Креатори садржаја и маркетари извлаче добитнике наградних игара и жребова пред публиком која мора да верује у поштеност резултата. Менаџери распоређују задатке које нико не жели добровољно да преузме, а тимови одлучују о редоследу презентација или ко дежура. Истраживачи извлаче случајан узорак записа за ревизију. Породице стављају тачку на расправу о томе шта ће се гледати, а гладно друштво бира кафану. Заједничка карактеристика за све ове ситуације је избор који свако може касније да објасни: извлачење користи криптографску случајност, одвија се искључиво на вашем уређају, а део „Историја“ чува резултат ако неко касније посумња у њега.
Вреди знати и неколико искрених ограничења ове алатке. Алатка не може да извуче више јединствених елемената него што ваша листа садржи — за три победника потребна су најмање три имена — и зауставља се на 1000 уноса (са по 200 карактера сваки) и 100 резултата при једном извлачењу. Дугмад „Схуффле“ и „Сортирај“ функционишу ред по ред, па ће се листа одвојена зарезима и убачена у једном реду прераспоредити тек када се елементи поделе по један у сваком реду; поред тога, оба дугмета мењају редослед текста у пољу, а не самог извлачења, јер је извлачење једнако поштено без обзира на редослед ваших уноса. Такође, сваки елемент подразумевано има исту тежину, па ако желите да једно име има двоструке шансе при извлачењу, то име мора бити унето два пута на листи. Унутар ових граница, гаранција је чврста — сваки унос на вашој листи има потпуно исте шансе при сваком појединачном извлачењу.