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