Tədbirdə hədiyyə qazananı müəyyən etmək, şagirdi lövhəyə çağırmaq və ya zibili kimin atacağını həll etmək lazımdır? Bu pulsuz onlayn alət daxil etdiyiniz istənilən siyahıdan ədalətli şəkildə təsadüfi seçim edir. Bütün məlumatları “Elementlər” xanasına daxil edin — hər sətirə biri olmaqla və ya vergüllə ayırmaqla — “Say” xanasında neçə nəticə istədiyinizi seçin və “Yarat” düyməsini sıxın. Siyahıda ən azı iki bənd olmalıdır və uzunluğu hər biri 200 simvola qədər olan 1000 elementi ehtiva edə bilər.
Hər bir seçim brauzerinizin sistemində olan təsadüfilikdən istifadə edərək kriptoqrafik olaraq güclü təsadüfi dəyərlər təmin edən Web Crypto API (crypto.getRandomValues) vasitəsilə birbaşa brauzerinizdə həyata keçirilir. Siyahınız heç vaxt serverə göndərilmir, qeydə alınmır və bizim tərəfimizdən görülmür. Bu məqam xüsusilə əhəmiyyətlidir, çünki insanlar adətən müştəri siyahılarını, sinif jurnallarını və ya həmkarlarının adlarını kopyalayırlar. “Fayldan yükləyin” düyməsi də bu vədi qoruyur: brauzeriniz faylı birbaşa oxuyur və siyahını xanada tamamilə lokal olaraq doldurur, yəni heç nə internetə yüklənmir.
Seçimlər insanların real olaraq istifadə etdikləri siyahılar üçün nəzərdə tutulub. “Ayırıcı” funksiyası “Avtomatik” olaraq təyin edilib. O, sətir sonlarını və vergülləri sərbəst şəkildə tanıyaraq məlumatınızın hansı formatda olduğuna qərar verir; beləliklə elektron cədvəldən, mesajdan və ya sənəddən kopyalanan siyahı heç bir redaktə tələb etmədən işləyir. Formatlar qarışıq olduqda onu “Yeni sətir”, “Vergül” və ya “Boşluq” üzərində kilidləyə bilərsiniz. Nəzərə alın ki, “Boşluq” həmişə şüurlu bir seçimdir və heç vaxt avtomatik işə düşmür, çünki tam adlar kimi məlumatların özündə onsuz da boşluqlar var və onları boşluqlara görə bölmək nəticəni tamamilə korlaya bilər. “Say” 1-dən 100-ə qədər neçə elementin seçiləcəyinə qərar verir. 200 iştirakçı arasından üç qalib seçirsiniz? İştirakçıların adlarını daxil edin, “Say” funksiyasını 3 olaraq təyin edin və “Yarat” düyməsini sıxın. İki nəzarət elementi yalnız seçiləcək miqdar 2 və ya daha çox olduqda tətbiq olunur və o vaxta qədər passiv qalır: bir elementin eyni vaxtda iki dəfə çıxıb-çıxmayacağını müəyyən edən “Təkrarsız” funksiyası və seçilmiş nəticələrin bir-birindən necə ayrılacağını tənzimləyən “Çıxış formatı” — yəni nəticələr “Hər biri yeni sətirdə”, “Boşluqla ayrılmış” və ya “Vergüllə ayrılmış” şəklində göstərilir.
“Elementlər” xanasının daxilində yerləşən düymələr sırası redaktə işlərini yerinə yetirir. “Fayldan yükləyin” siyahını sadə mətn və ya CSV faylından birbaşa xanaya əlavə edir. “Qarışıq” xanadakı elementlərin sırasını qarışdırır, “Sort” onları rəqəmlərin təbii ardıcıllığı nəzərə alınmaqla əlifba sırası ilə düzür (və yenidən klikləmək sıranı tərsinə çevirir), “Təmizlə” isə siyahını tamamilə silir. “Nümunə məlumatları ilə doldurun” düyməsi bir kliklə aləti sınaqdan keçirmək üçün qısa bir nümunə siyahı əlavə edir, “Məzmuna uyğunlaşdırmaq üçün genişləndirin” isə uzun siyahını tam göstərmək üçün pəncərəni böyüdür və “Defolt ölçüyə yığışdırın” onu yenidən əvvəlki halına qaytarır. Nəticələrin altındakı “Hamısını kopyala” düyməsi hər bir seçimi kopyalayır, “Faylda saxla” isə onları cihazınıza yazır, “Tarixçə” isə əvvəlki nəticəyə bir kliklə qayıtmaq üçün son 10 püşkatmanı brauzerinizin yaddaşında saxlayır.
Seçim əslində necə edilir? Siz “Yarat” düyməsini sıxdığınız zaman səhifə crypto.getRandomValues vasitəsilə brauzerdən təsadüfi dəyərlər tələb edir və siyahınızdakı mövqeləri seçmək üçün onlardan istifadə edir; Math.random() kimi yalançı təsadüfi (pseudo-random) JavaScript funksiyasına etibar edilmir. Sadə bir 32 bitlik dəyərin mövqeyə çevrilməsi prosesi, bir çox digər alətlərin səssizcə səhvə yol verdiyi yerdir: bu dəyəri siyahının uzunluğuna (modul) bölmək ən asan və ən qərəzli yanaşmadır, çünki əgər uzunluq 2^32-ni tam bölmürsə, siyahının əvvəlindəki elementlər digərlərinə nisbətən daha tez-tez çıxır. Bu qüsur modulo bias (modul qərəzliliyi) adlanır və nəzəri deyil, tamamilə ölçülə biləndir. Bizim alətimiz isə bunun əvəzinə siyahı uzunluğunun tam vurulmuş ən böyük dəyərini aşan istənilən dəyəri rədd edir və püşkü yenidən çəkir — bu üsul rejection sampling (rədd etməklə seçim) adlanır. Bu bir neçə əlavə dövrə bahasına başa gəlsə də, təxmini deyil, dəqiq və ədalətli zəmanət verir. Siyahıdakı mövqe heç nəyi dəyişmir: birinci və sonuncu elementlərin hər bir püşkatmada seçilmə ehtimalı tamamilə eynidir.
“Təkrarsız” açarı statistika elminin ayrıca adlandırdığı iki tam fərqli püşkatma növünü ayırır. Bu funksiya aktiv olduqda alət Fisher-Yates alqoritmi ilə siyahınızın surətini qarışdırır və seçimləri ən üstdən götürür — yəni şlyapadan bilet çıxarıb onları geri qaytarmamaqla eyni şeydir; heç kim iki dəfə seçilmir və bu ölçüdəki hər bir qrupun şansı bərabərdir. Bu, əvəzetmə olmadan seçim (sampling without replacement) adlanır və məhz bu funksiya sizə qalibləri, komandaları və çıxış ardıcıllığını təyin etmək üçün lazımdır. Funksiya söndürüldükdə isə, hər bir seçim bütün siyahıdan asılı olmayaraq edilir, ona görə də eyni element birdən çox qarşınıza çıxa bilər — bu, əvəzetmə ilə seçimdir (sampling with replacement); təkrar püşkatmalar və ya sürətli statistik nümunələr kimi bütün iştirakçıların hər raundda iştirak edə bildiyi hallarda istifadə olunur. Heç bir rejim digərindən daha ədalətli deyil; onlar sadəcə fərqli məqsədlərə xidmət edir.
Ədalətli püşkatma qətiyyən ədalətli görünməməlidir. On nəfərdən beşini təsadüfi olaraq seçin, və siz asanlıqla orijinal siyahıda bir-birinin ardınca olan iki nəticəni və ya təkrarlanmaya icazə verdiyiniz təqdirdə eyni adı ard-arda iki dəfə görəcəksiniz; bunların hamısı tamamilə normaldır. Hər bir püşk müstəqildir: əvvəlki seçimlər sonrakı seçimlərə zərrə qədər də təsir etmir və heç bir ad çıxmağa “növbəti” və ya məcbur deyil. Əksini iddia edən hiss oyunçu xətasıdır (gambler's fallacy) və bizi təsadüfi seçim etməkdə belə bacarıqsız edən də məhz elə bu hissdir — insandan təsadüfi olaraq seçim etməsini xahiş etdikdə, o, birinci və sonuncu elementləri seçməkdən qaçır, adı təkrarlamamağa çalışır və seçimlərini təsadüfiliyin heç vaxt etmədiyi qədər bərabər şəkildə yayır. Şübhə doğuracaq dərəcədə səliqəli nəticə yalnız insan əlinin işi ola bilər; həqiqi təsadüfilik isə daha xaotik və topalaşmış şəkildə olur.
Niyə məhz bu təsadüfi seçim alətini seçməlisiniz?
- Sırf brauzer əsaslı seçim: siyahınız yalnız öz cihazınızda oxunur və heç yerə göndərilmir
- Web Crypto API ilə təsadüfilik: Math.random() deyil, kriptoqrafik cəhətdən təhlükəsizdir
- Modul qərəzliliyi yoxdur: rejection sampling hər bir bənd üçün eyni ehtimalı təmin edir
- İstənilən siyahı formatı: sətir, vergül və ya boşluqla; formatlaşdırma tələb edilmir
- “Təkrarsız” rejimi: qalibləri və ya komandaları heç kəs iki dəfə seçilmədən təyin edin
- Geniş imkanlar: 1000 elementə qədər siyahı tutumu və bir püşkdə 100-ə qədər seçim
- Daxili alətlər: fayldan yükləmə, qarışdırma, çeşidləmə, təmizləmə, nümunə məlumatları
- Tarixçə və faylda saxlama: əsaslandırmalı ola biləcəyiniz püşkatmanın qeydini saxlayın
- Limitsiz və pulsuz: qeydiyyat, istifadə məhdudiyyəti və serverlərdə heç bir saxlanma yoxdur
Təsadüfi seçimlər hər hansı bir qərarın şübhələrdən uzaq olması lazım gələn hallarda öz sözünü deyir. Azərbaycanda müəllimlər şagirdləri lövhəyə çağırır və sinfi layihə qruplarına ayırırlar. Yayımçılar və marketoloqlar nəticəyə inanmalı olan auditoriya qarşısında hədiyyə və püşk qaliblərini seçirlər. Menecerlər heç kimin könüllü olmadığı tapşırıqları təqdim edir, komandalar isə nümayişin ardıcıllığını müəyyənləşdirirlər. Tədqiqatçılar yoxlama üçün qeydlərdən təsadüfi nümunələr çıxarırlar. Ailələr nəyə baxmaq barədə mübahisələrə son qoyur, ac qrup isə yemək üçün məkan seçir. Bütün bunların ortaq cəhəti sonradan hər kəsin izah edə biləcəyi bir seçimdir: püşkatma kriptoqrafik təsadüfilikdən istifadə edir, yalnız sizin cihazınızda baş verir və kimsə soruşduqda “Tarixçə” nəticəni yadda saxlayır.
Alətimizin bilməyə dəyər olan bəzi məhdudiyyətləri də mövcuddur. Alət siyahınızda olduğundan daha çox fərqli elementi seçə bilməz — üç qalib seçmək üçün siyahıda ən azı üç ad olmalıdır — həmçinin alət maksimum 100 seçimə icazə verməklə yanaşı, hər biri 200 simvoldan ibarət olmaqla 1000 elementi özündə saxlaya bilər. “Qarışıq” və “Sort” funksiyaları sətir-sətir işləyir; belə ki, eyni sətirdə daxil edilən və vergüllə ayrılan siyahı yalnız hər bir element yeni sətirə keçirildiyi zaman yenidən sıralanır; bundan başqa həmin düymələr püşkatmanı deyil siyahını dəyişdirir və püşkatma prosesi elementlərin sırasından asılı olmayaraq həmişə ədalətlidir. Hər bir element eyni zamanda müvafiq qaydada bir xalda qiymətləndirilir, buna görə də bir adın iki xalla sayılmasını istədiyiniz püşkatmada, həmin adın siyahıya iki dəfə yazılması mütləqdir. Bu limitlər çərçivəsində isə verilən zəmanət çox güclüdür — hər bir püşkatma prosesində siyahınızdakı bütün elementlərin şansı tamamilə bərabərdir.