Ұтыс ойынының жеңімпазын анықтау, оқушыны тақтаға шақыру немесе дүкенге кім баратынын шешу қажет пе? Бұл тегін онлайн құрал сіз енгізген кез келген тізімнен әділ әрі кездейсоқ таңдау жасайды. Нұсқаларыңызды «Элементтер» өрісіне — әрқайсысын жаңа жолға немесе үтірмен бөліп — енгізіңіз, «Саны» өрісінде қанша нәтиже керектігін көрсетіңіз де, «Жасау» түймесін басыңыз. Тізім кемінде екі элементтен тұруы керек және оған ұзындығы 200 таңбаға дейінгі 1000 жазба сыяды.
Әрбір таңдау тікелей браузеріңізде, операциялық жүйеңізден криптографиялық қауіпсіз кездейсоқ мәндерді алатын Web Crypto API (crypto.getRandomValues) көмегімен жасалады. Сіздің тізіміңіз ешқашан серверге жіберілмейді, сақталмайды және оны біз ешқашан көрмейміз — бұл басқа генераторларға қарағанда мұнда өте маңызды, өйткені адамдар көбінесе клиенттер тізімін, сынып журналын немесе әріптестерінің есімдерін енгізеді. «Файлдан жүктеңіз» түймесі де осы уәдені орындайды: браузеріңіз файлды өзі оқып, өрісті жергілікті деңгейде толтырады, интернетке ештеңе жүктелмейді.
Баптаулар адамдар нақты қолданатын тізімдерге бейімделген. «Бөлгіш» әдепкі бойынша «Автоматты» режимінде тұрады, ол жаңа жолдар мен үтірлерді өзі ажыратады, сондықтан кестеден, хаттан немесе құжаттан көшірілген тізім қосымша пішімдеусіз жұмыс істейді. Егер деректеріңізде әртүрлі пішімдер аралас болса, оны «Жаңа жол», «Үтір» немесе «Бос орын» етіп бекітіңіз. Сонымен қатар, «Бос орын» әрқашан саналы таңдау болып табылады және ешқашан автоматты түрде қолданылмайды, өйткені толық аты-жөндер сияқты элементтердің өз ішінде бос орындар болады және олар бойынша автоматты бөлу тізімдерді бұзар еді. «Саны» өрісі 1-ден 100-ге дейін қанша элемент таңдалуы керектігін анықтайды. 200 қатысушының ішінен үш жеңімпазды таңдамақсыз ба? Қатысушыларды енгізіңіз, «Саны» мәнін 3-ке қойып, «Жасау» түймесін басыңыз. Екі баптау тек саны 2 немесе одан көп болғанда ғана іске қосылады және оған дейін сұр болып тұрады: бір элементтің екі рет таңдалуын реттейтін «Қайталанбайтын» қосқышы, және нәтижелердің қалай бөлінетінін анықтайтын «Шығыс форматы» («Әрқайсысы жаңа жолда», «Бос орынмен бөлінген» немесе «Үтірмен бөлінген»).
«Элементтер» өрісінің ішіндегі түймелер қатары басқа жерде жасауға тура келетін өңдеу жұмыстарын атқарады. «Файлдан жүктеңіз» түймесі тізімді тікелей мәтіндік немесе CSV файлынан тартады. «Араластыру» өрістегі жазбалардың ретін өзгертеді, «Сұрыптау» оларды әліпби ретімен және табиғи сандық ретпен орналастырады, ал екінші рет басу оны керісінше айналдырады, «Тазалау» болса өрісті толығымен босатады. «Үлгі деректермен толтыру» түймесі құралды бір рет басу арқылы сынап көру үшін қысқа тест тізімін енгізеді, ал «Мазмұнға сәйкестендіру үшін кеңейтіңіз» ұзын тізімді толық көрсету үшін өрісті ашады, «Әдепкі өлшемге жию» оны бастапқы қалпына қайтарады. Нәтиженің астындағы «Барлығын көшіру» әрбір таңдауды алмасу буферіне салады, «Файлға сақтау» оларды құрылғыңызға сақтайды, ал «Тарих» соңғы 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() емес, криптографиялық қауіпсіз
- Модульдік ауытқусыз: rejection sampling әр элементтің мүмкіндігін тең сақтайды
- Кез келген тізім пішімі: жаңа жолда, үтірмен немесе бос орынмен, пішімдеусіз
- «Қайталанбайтын» режимі: ешкім екі рет таңдалмайтын жеңімпаздарды анықтаңыз
- Бір ұтыс ойынында 1000 жазбаға дейін сыяды және 100 таңдауға дейін жасайды
- Кіріктірілген құралдар: файлдан жүктеу, араластыру, сұрыптау, тазалау, үлгі деректер
- Тарих және файлға сақтау: кейін дәлелдеу қажет болуы мүмкін нәтижені сақтап қойыңыз
- Шектеусіз және тегін: тіркелусіз, қолдану шегінсіз, біздің серверлерде ештеңе жоқ
Кездейсоқ таңдау шешімнің әділдігіне сұрақтар туындауы мүмкін кез келген жерде кездеседі. Мұғалімдер оқушыларды ешкімді бөлмей тақтаға шақырады және сыныпты жобалық топтарға бөледі. Стримерлер мен маркетологтар нәтижеге сенуі тиіс аудитория алдында ұтыс ойынының жеңімпаздарын анықтайды. Менеджерлер ешкім өз еркімен алғысы келмейтін тапсырмаларды бөледі, ал командалар презентациялар кезегін немесе кезекшілікті шешеді. Зерттеушілер аудит үшін жазбалардың статистикалық іріктемесін жасайды. Отбасылар не көретіні туралы дауды тоқтатады, ал аш топ дәмхананы таңдайды. Осы жағдайлардың барлығына ортақ нәрсе — кейін кез келген адам түсіндіре алатын таңдау: ұтыс ойыны криптографиялық кездейсоқтықты қолданады, ол толығымен сіздің құрылғыңызда өтеді, ал «Тарих» бөлімі біреу кейінірек сұраса, нәтижені сақтап қалады.
Бұл құралдың бірнеше негізді шектеулері бар екенін білген жөн. Ол тізіміңізде бардан артық әртүрлі элементті таңдай алмайды — үш жеңімпаз үшін кем дегенде үш есім қажет — және ол әрқайсысы 200 таңбадан тұратын 1000 жазбамен, бір ұтыс ойынында 100 таңдаумен шектеледі. «Араластыру» және «Сұрыптау» түймелері жол-жолмен жұмыс істейді, сондықтан бір жолға қойылған үтірмен бөлінген тізім әрбір жолда бір элемент болғанда ғана қайта реттеледі; және екеуі де ұтыс ойынын емес, өрістегі мәтіннің ретін өзгертеді, өйткені ұтыс ойыны жазбаларыңыздың қандай ретпен орналасқанына қарамастан бірдей әділ. Сондай-ақ, әрбір элемент бастапқыда дәл бірдей салмаққа ие, сондықтан бір есімнің екі есе мүмкіндігі болуы керек ұтыс ойынында ол есімді тізімде екі рет жазу қажет. Осы шектеулер аясында кепілдік берік — сіздің тізіміңіздегі әрбір элемент әрбір жеке ұтыс ойынында абсолютті тең мүмкіндікке ие.