Անհրաժեշտ է վիճակախաղի հաղթող ընտրել, աշակերտի գրատախտակի մոտ կանչել կամ որոշել, թե ով է հացի գնալո՞ւ։ Առանց գրանցման այս առցանց գործիքն արդար և պատահական ընտրություն է կատարում ձեր տեղադրած ցանկացած ցուցակից։ Պարզապես մուտքագրեք ձեր տարբերակները «Տարրեր» դաշտում՝ յուրաքանչյուրը նոր տողում կամ ստորակետով առանձնացված, նշեք անհրաժեշտ արդյունքների թիվը «Քանակ» դաշտում և սեղմեք «Ստեղծել»։ Ցուցակը պետք է պարունակի առնվազն երկու տարր և կարող է տեղավորել մինչև 1000 գրառում, որոնցից յուրաքանչյուրը՝ մինչև 200 նիշ երկարությամբ։
Յուրաքանչյուր ընտրություն կատարվում է անմիջապես ձեր դիտարկիչում՝ Web Crypto API-ի (crypto.getRandomValues) միջոցով, որը գեներացնում է գաղտնագրորեն անվտանգ պատահական արժեքներ՝ վերցված ձեր համակարգչի կամ հեռախոսի օպերացիոն համակարգից։ Ձեր ցուցակը երբեք չի ուղարկվում սերվեր, չի գրանցվում և մենք այն երբեք չենք տեսնում։ Սա այստեղ ավելի կարևոր է, քան գեներատորների մեծամասնության դեպքում, քանի որ մարդիկ սովորաբար տեղադրում են հաճախորդների տվյալներ, դասամատյաններ կամ գործընկերների անուններ։ «Բեռնել ֆայլից» կոճակը նույնպես պահպանում է այս խոստումը. ձեր դիտարկիչը կարդում է ֆայլը և լրացնում դաշտը տեղային մակարդակում՝ առանց ինտերնետում որևէ բան վերբեռնելու։
Կարգավորումները ստեղծված են այնպիսի ցուցակների համար, որոնք մարդիկ իրականում օգտագործում են։ «Բաժանիչ» դաշտը լռելյայն դրված է «Ավտոմատ» տարբերակի վրա, որն ինքնուրույն տարբերակում է նոր տողերն ու ստորակետերը և որոշում, թե որն է օգտագործվում ձեր ցուցակում, ուստի աղյուսակից, նամակագրությունից կամ փաստաթղթից պատճենված ցուցակն աշխատում է առանց ձեր կողմից լրացուցիչ ֆորմատավորման։ Ֆիքսեք այն «Նոր տող», «Ստորակետ» կամ «Բացատ» տարբերակների վրա, երբ ձեր տվյալներում առկա են խառը ձևաչափեր։ Ընդ որում, «Բացատ»-ը միշտ գիտակցված ընտրություն է և երբեք ավտոմատ չի կիրառվում, քանի որ օրինակ լրիվ անուններն իրենք պարունակում են բացատներ, և դրանցով ավտոմատ կիսելը ավելի շատ ցուցակներ կփչացներ, քան կուղղեր։ «Քանակ» դաշտը որոշում է, թե քանի տարր պետք է ընտրվի՝ 1-ից մինչև 100։ Ուզում եք ընտրել երեք հաղթո՞ղ 200 մասնակիցներից. տեղադրեք մասնակիցներին, դրեք «Քանակ»-ը 3-ի վրա և սեղմեք «Ստեղծել»։ Երկու կարգավորում ակտիվանում են միայն այն ժամանակ, երբ քանակը 2 կամ ավելի է, և մինչ այդ մնում են գորշացած. «Առանց կրկնության» փոխանջատիչը որոշում է, թե արդյոք նույն տարրը կարող է ընտրվել երկու անգամ, իսկ «Ելքի ձևաչափ»-ը սահմանում է, թե ինչպես են առանձնացվում արդյունքները՝ «Յուրաքանչյուրը նոր տողում», «Բացատով բաժանված» կամ «Ստորակետով բաժանված»։
«Տարրեր» դաշտի ներսում գտնվող կոճակների շարքը կատարում է խմբագրման այն աշխատանքը, որն այլապես ստիպված կլինեիք անել այլ տեղ։ «Բեռնել ֆայլից» կոճակը ցուցակը քաշում է անմիջապես պարզ տեքստային կամ CSV ֆայլից։ «Խառնել» կոճակը փոխում է դաշտի գրառումների հերթականությունը, «Տեսակավորել»-ը դասավորում է դրանք այբբենական կարգով՝ բնական թվային հաջորդականությամբ, իսկ երկրորդ սեղմումը հակառակն է անում, և «Մաքրել»-ը ամբողջությամբ դատարկում է դաշտը։ «Լրացրեք նմուշի տվյալները» կոճակը տեղադրում է կարճ փորձնական ցուցակ, որպեսզի կարողանաք փորձարկել գործիքը մեկ հպումով, մինչդեռ «Ընդլայնել, որպեսզի համապատասխանի բովանդակությանը»-ն բացում է դաշտը երկար ցուցակն ամբողջությամբ ցուցադրելու համար, իսկ «Ծալել լռելյայն չափի»-ն այն վերադարձնում է սկզբնական վիճակին։ Արդյունքների ներքևում «Պատճենել բոլորը» կոճակը տեղադրում է յուրաքանչյուր ընտրություն ձեր սեղմատախտակի (clipboard) վրա, «Պահպանել ֆայլում»-ը պահպանում է դրանք ձեր սարքում, իսկ «Պատմություն»-ը պահում է ձեր վերջին 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 ընտրություն մեկ խաղարկության ընթացքում։ «Խառնել» և «Տեսակավորել» կոճակներն աշխատում են տող առ տող, ուստի մեկ տողում տեղադրված ստորակետով բաժանված ցուցակը կվերադասավորվի միայն այն ժամանակ, երբ դառնա մեկ տարր յուրաքանչյուր տողում։ Երկուսն էլ վերադասավորում են դաշտի պարունակությունը, այլ ոչ թե բուն վիճակահանությունը, որը հավասարապես արդար է՝ անկախ ձեր մուտքագրումների հերթականությունից։ Յուրաքանչյուր տարր ի սկզբանե ունի ճիշտ նույն կշիռը, ուստի խաղարկությունում, որտեղ մի անունը պետք է ունենա կրկնակի հնարավորություն, անհրաժեշտ է այդ անունը նշել երկու անգամ։ Այս սահմանափակումների շրջանակներում երաշխիքն ամուր է. ձեր ցուցակի յուրաքանչյուր տարր ունի բացարձակապես նույն հնարավորությունը՝ ամեն մի առանձին վիճակահանության ժամանակ։