Chagua nasibu

Bandika orodha yoyote — majina, kazi au mawazo — na uache chombo hiki kichague kwa haki. Kila droo hufanyika ndani ya kivinjari kwa kutumia usalama wa kriptografia, hivyo basi orodha yako haiondoki kwenye kifaa chako.

Bofya Tengeneza ili kuchagua
Kikomo kinabainishwa kiotomatiki kwa chaguo-msingi, au unaweza kukichagua hapa chini.
Chaguo za Kina

Je, unahitaji kuendesha droo ili kumpata mshindi, kumwita mwanafunzi, au kuamua nani ataosha vyombo? Chombo hiki cha mtandaoni cha kuchagua nasibu bila malipo kinachagua kwa haki kutoka kwenye orodha yoyote unayobandika. Weka vipengee vyako kwenye kisanduku cha «Vipengee» — kila kimoja kwenye mstari wake, au vikitenganishwa kwa koma — weka idadi unayotaka kwa kutumia «Idadi», kisha ubofye «Tengeneza». Orodha inahitaji angalau vipengee viwili na inaweza kubeba hadi majina 1000, kila moja likiwa na hadi herufi 200.

Kila uchaguzi unafanywa moja kwa moja kwenye kivinjari chako kwa kutumia Web Crypto API (crypto.getRandomValues), ambayo hutoa nambari za nasibu zilizo salama sana za kriptografia kutoka kwenye mfumo wa msingi wa kivinjari chako. Orodha yako haitumwi kamwe kwenye seva yoyote, haihifadhiwi kwenye kumbukumbu, na wala haionekani kwetu — na hili ni muhimu sana hapa kuliko kwenye programu nyingi za kutengeneza nasibu, kwa sababu kile ambacho watu hubandika mara nyingi ni orodha ya wateja, sajili ya darasa, au majina ya wafanyakazi wenzao. Kitufe cha «Pakia kutoka kwa faili» kinadumisha ahadi hiyohiyo: kivinjari chako kinasoma faili lenyewe na kujaza kisanduku hapohapo kwenye kifaa, bila kupakia chochote popote pale.

Chaguo zilizopo zimeundwa kwa ajili ya orodha ambazo watu wanazo kiuhalisia. «Njia ya mgawanyiko wa thamani» imewekwa kwenye «Utambuzi otomatiki», ambayo inasoma mistari mipya na koma na kutambua ni ipi kati ya hizo inatumiwa na orodha yako, hivyo orodha iliyonakiliwa kutoka kwenye lahajedwali, ujumbe wa gumzo, au makala inafanya kazi bila kuhitaji kupangwa upya. Ifunge kwenye «Mstari mpya», «Koma», au «Nafasi» wakati data yako inachanganya miundo tofauti — na kumbuka kuwa «Nafasi» siku zote ni chaguo la kukusudia na kamwe haliwi otomatiki, kwa sababu vipengee kama vile majina kamili vina nafasi zake na kuvigawanya kwa nafasi bila kukusudia kungeharibu orodha nyingi kuliko kuzirekebisha. «Idadi» inabainisha ni vipengee vingapi vya kuchagua kwenye droo, kuanzia 1 hadi 100. Je, unaendesha droo ya washindi watatu kutoka kwa washiriki 200? Bandika washiriki, weka «Idadi» iwe 3, na ubofye «Tengeneza». Vidhibiti viwili vinatumika tu wakati idadi ni 2 au zaidi, na vinabaki vimefifia hadi wakati huo: «Ya kipekee», ambayo inabainisha iwapo kipengee kilekile kinaweza kuchaguliwa mara mbili, na «Muundo wa matokeo», ambayo inaweka jinsi majina yaliyochaguliwa yanatenganishwa — «Mstari mpya», «Imetenganishwa kwa nafasi», au «Imetenganishwa kwa koma».

Mstari wa vitufe ndani ya kisanduku cha «Vipengee» unafanya uhariri ambao ungelazimika kuufanya kwingineko. «Pakia kutoka kwa faili» inavuta orodha moja kwa moja kutoka kwenye faili la maandishi ya kawaida au CSV. «Changanya» inapanga upya vipengee kwenye kisanduku, «Panga» inavipanga kwa kufuata alfabeti huku nambari zikipangwa kwa mtiririko wa asili na kubofya mara ya pili kunageuza mpangilio huo kuwa kinyume, na «Futa» inaondoa kila kitu kwenye kisanduku. «Jaza na data ya sampuli» inaweka orodha fupi ya mfano ili uweze kujaribu chombo hiki kwa mbofyo mmoja, huku «Panua ili kutoshea maudhui» inafungua kisanduku kuonyesha orodha ndefu kwa ukamilifu, na «Kunja kwa saizi chaguomsingi» inakirudisha katika ukubwa wake wa kawaida. Chini ya matokeo, «Nakili Vyote» inaweka kila jina lililochaguliwa kwenye ubao wako wa kunakili, «Hifadhi kwenye faili» inayahifadhi kama faili kwenye kifaa, na «Historia» inaweka droo zako 10 za mwisho kwenye kivinjari chako, hivyo matokeo ya awali yanapatikana kwa mbofyo mmoja tu.

Je, uchaguzi unafanywaje hasa? Unapobofya «Tengeneza», ukurasa unaomba nambari za nasibu kwenye kivinjari kupitia crypto.getRandomValues na unazitumia kuchagua nafasi katika orodha yako, badala ya kupitia kikokotoo dhaifu cha nasibu cha JavaScript kama Math.random(). Kubadilisha thamani ghafi ya biti 32 kuwa nafasi katika orodha ndiko kunasababisha vyombo vingi vya nasibu kufanya makosa kimyakimya: kuchukua thamani hiyo na kuigawanya kwa modulo kulingana na urefu wa orodha ni mbinu rahisi lakini inayoleta upendeleo, kwa sababu isipokuwa 2^32 igawanywe kwa usawa na urefu wa orodha, vipengee vilivyo karibu na mwanzo wa orodha hutokea mara nyingi kidogo zaidi kuliko vingine. Dosari hiyo inaitwa modulo bias, na inaweza kupimika na si dhana tu. Badala yake, chombo hiki kinatupa thamani yoyote inayozidi kigawe kamili kikubwa zaidi cha urefu wa orodha na kufanya droo tena — mbinu inayoitwa rejection sampling. Inagharimu droo chache za ziada na kununua uhakikisho kamili badala ya makadirio. Nafasi katika orodha haibadilishi chochote: kipengee cha kwanza na cha mwisho vinabeba uwezekano sawa kwenye kila droo.

«Ya kipekee» inatenganisha aina mbili tofauti kabisa za droo, na sayansi ya takwimu ina jina kwa kila moja. Ikiwa imewashwa, chombo kinachanganya nakala ya orodha yako kwa kutumia algoriti ya Fisher-Yates na kuchukua vipengee kuanzia juu — sawa kabisa na kuokota kura kutoka kwenye kofia bila kuzirudisha, hivyo hakuna anayechaguliwa mara mbili na kila kikundi cha ukubwa huo kina uwezekano sawa wa kutokea. Hiyo ni sampling without replacement, na ndiyo unayotaka kwa ajili ya kuwapata washindi wa zawadi, timu, na mpangilio wa zamu. Ikiwa imezimwa, kila uchaguzi unafanywa kwa kujitegemea kutoka kwenye orodha nzima, hivyo kipengee kilekile kinaweza kutokea zaidi ya mara moja — sampling with replacement, ambayo ndiyo unayotaka wakati kila mtu anaendelea kuwa na sifa katika kila mzunguko, kama vile kwenye droo zinazojirudia au sampuli ya haraka ya takwimu. Hakuna mfumo ulio wa haki zaidi kuliko mwingine; yanajibu maswali tofauti.

Droo yoyote iliyo ya haki kweli haifai kuonekana kuwa ya haki. Endesha droo ya majina matano kati ya kumi na mara kwa mara utaona majina mawili yaliyokuwa karibiana katika orodha ya asili yamechaguliwa mfululizo, au jina lilelile kutokea mara mbili mfululizo wakati wa kuruhusu majina kujirudia, na kila moja ya haya ni ya kawaida. Kila droo inajitegemea: chaguzi zilizopita hazina ushawishi wowote kwa zile zinazofuata, na hakuna yeyote anayekuwa na «zamu ya kushinda» iliyofika. Silika inayosisitiza kinyume chake ni gambler's fallacy, na ni silika hiyohiyo inayotufanya kuwa dhaifu tunapojaribu kufanya uchaguzi wa nasibu sisi wenyewe — tukitakiwa kuchagua kwa nasibu, tunaepuka kipengee cha kwanza na cha mwisho, tunaepuka kurudia jina, na tunasambaza chaguzi zetu kwa usawa zaidi kuliko jinsi bahati nasibu hufanya. Matokeo yanayoonekana kuwa safi sana kwa kutiliwa shaka ni alama ya vidole ya binadamu; nasibu ya kweli huwa inatengeneza mafungu yasiyotarajiwa.

Kwa nini uchague chombo hiki cha nasibu?

Uchaguzi wa nasibu unajitokeza kila mahali ambapo uamuzi unahitaji kudumu pindi unapohojiwa. Walimu wanawaita wanafunzi bila upendeleo na kuligawa darasa katika vikundi vya mradi. Watangazaji mubashara (streamers) na wauzaji huendesha droo za zawadi na bahati nasibu mbele ya hadhira ambayo inapaswa kuamini matokeo hayo. Mameneja hutoa majukumu ambayo hakuna anayejitolea kuyafanya, na timu huamua mpangilio wa maonyesho au nani yuko kwenye zamu ya wito (on-call). Watafiti wanavuta sampuli ya nasibu ya rekodi kwa ajili ya ukaguzi. Familia zinamaliza ubishi wa filamu gani ya kutazama, na kikundi chenye njaa kinachagua mkahawa. Jambo linalounganisha yote haya ni uteuzi ambao mtu yeyote anaweza kueleza baadaye: droo inatumia nasibu ya kriptografia, inafanyika kikamilifu kwenye kifaa chako, na «Historia» inaweka matokeo ikiwa mtu atayauuliza baadaye.

Viwango vichache vya ukweli vya chombo hiki vinafaa kujulikana. Chombo hakiwezi kuchagua vipengee vingi tofauti kuliko vile vilivyo kwenye orodha yako — washindi watatu wanahitaji angalau majina matatu — na kinaishia kwenye vipengee 1000 vyenye herufi 200 kila kimoja, kukiwa na hadi chaguzi 100 katika droo moja. «Changanya» na «Panga» zinafanya kazi mstari kwa mstari, hivyo orodha iliyotenganishwa kwa koma iliyobandikwa kwenye mstari mmoja hupangwa upya tu baada ya kuwekwa kwenye muundo wa kipengee kimoja kwa kila mstari; na zote mbili zinapanga upya kisanduku badala ya droo yenyewe, ambayo hubaki kuwa ya haki sawa haijalishi vipengee vyako vimepangwa kwa utaratibu gani. Pia, kila kipengee kinabeba uzito sawa kwa muundo wake, kwa hivyo droo ambapo jina moja linapaswa kuhesabiwa mara mbili linahitaji jina hilo kuorodheshwa mara mbili. Ndani ya mipaka hiyo, uhakikisho huo ni madhubuti — kila kipengee katika orodha yako kina nafasi sawa, katika kila droo.

FAQ

Ninawezaje kuchagua jina nasibu kutoka kwenye orodha?

Bandika majina kwenye kisanduku cha «Vipengee» — kila kimoja kwenye mstari wake, au yakitenganishwa kwa koma au nafasi — acha «Idadi» ikiwa 1 na ubofye «Tengeneza». Jina moja litachaguliwa mara moja. Kwa majina kadhaa kwa wakati mmoja, ongeza «Idadi» kulingana na kiasi unachohitaji.

Je, uchaguzi huu ni wa haki kweli?

Ndiyo. Kila uchaguzi unatumia Web Crypto API ya kivinjari chako (crypto.getRandomValues) pamoja na rejection sampling, ambayo huondoa modulo bias ambayo programu ya kawaida ingeleta. Kila kipengee kina uwezekano uleule sawa bila kujali nafasi yake katika orodha, na kuchagua vipengee kadhaa tofauti hutumia mbinu ya kuchanganya ya Fisher-Yates, hivyo kila kundi la ukubwa huo lina uwezekano sawa wa kutokea.

Je, orodha yangu inapakiliwa kwenye seva yenu?

Hapana. Droo nzima inafanya kazi ndani ya kivinjari chako: orodha, chaguzi, na historia havitoki kwenye kifaa chako kamwe, hivyo ni salama kubandika majina, barua pepe, au orodha yoyote ya siri. «Pakia kutoka kwa faili» pia inafanya kazi ndani ya kifaa — kivinjari chako chenyewe kinasoma faili hilo na hakuna chochote kinachopakiwa.

Je, ninaweza kubandika orodha iliyotenganishwa kwa koma au nafasi badala ya kipengee kimoja kwa kila mstari?

Ndiyo. «Njia ya mgawanyiko wa thamani» imewekwa kwenye «Utambuzi otomatiki», ambayo inatofautisha mistari mipya na koma yenyewe, hivyo orodha iliyonakiliwa kutoka kwenye lahajedwali, ujumbe wa gumzo au makala inafanya kazi jinsi ilivyo. Orodha iliyotenganishwa kwa nafasi inahitaji hatua moja ya ziada — weka «Njia ya mgawanyiko wa thamani» kwenye «Nafasi» — kwa sababu vipengee kama vile majina kamili yana nafasi yenyewe na hayagawanywi kwayo moja kwa moja. Funga «Njia ya mgawanyiko wa thamani» kwenye «Mstari mpya» au «Koma» ikiwa data yako inachanganya miundo hii.

Swichi ya «Ya kipekee» inafanya nini?

Wakati «Ya kipekee» imewashwa, kila kipengee kinachochaguliwa ni tofauti — kama vile kuokota kura kutoka kwenye kofia bila kuziweka tena, jambo ambalo ndilo unalotaka kwa ajili ya kuamua washindi wa zawadi au timu. Ikiwa imezimwa, kipengee kilekile kinaweza kuchaguliwa zaidi ya mara moja, ambacho wataalamu wa takwimu wanakiita sampling with replacement.

Kwa nini vidhibiti vya «Ya kipekee» na «Muundo wa matokeo» vimefifia (vimezimwa)?

Kwa sababu vyote viwili vinatumika tu unapochagua zaidi ya kipengee kimoja, kama vile kidokezo kilicho kando yao kinavyosema: «Inatumika tu wakati Idadi ni zaidi ya 1». Ongeza «Idadi» iwe 2 au zaidi na vyote viwili vitapatikana; idadi inapokuwa 1 hakuna cha kunakiliwa (kurudiwa) wala hakuna cha kutenganisha.

Chaguo la «Muundo wa matokeo» linafanya nini?

Linaweka jinsi chaguzi kadhaa zinavyoonyeshwa na kunakiliwa: «Mstari mpya», «Imetenganishwa kwa nafasi» kwa ajili ya ujumbe wa haraka wa gumzo, au «Imetenganishwa kwa koma» kwa ajili ya kubandika kwenye lahajedwali au hati. Linapatikana mara tu «Idadi» inapokuwa 2 au zaidi.

Vitufe vya «Changanya» na «Panga» vinafanya nini?

«Changanya» inabadilisha utaratibu wa vipengee ndani ya kisanduku cha «Vipengee», na «Panga» inavipanga kwa kufuata alfabeti huku nambari zikipangwa kwa mtiririko wa asili — kubofya tena kutageuza mpangilio huu kuwa kinyume. Vyote hivi vinabadilisha jinsi orodha yako inavyoandikwa, si jinsi droo yenyewe inavyofanya kazi: chombo cha kuchagua kinabaki kuwa cha haki sawa bila kujali vipengee viko katika utaratibu gani.

Orodha inaweza kuwa na vipengee vingapi, na ninaweza kuchagua vingapi kwa wakati mmoja?

Orodha inachukua kuanzia vipengee 2 hadi 1000, kila kimoja kikiwa na hadi herufi 200, na droo moja hurejesha hadi chaguzi 100. Mistari mitupu na nafasi zinazozunguka zinaachwa (puuzwa), hivyo orodha iliyobandikwa kutoka kwenye lahajedwali au hati inafanya kazi jinsi ilivyo.

Je, inafaa kwa ajili ya kuchagua washindi wa zawadi au bahati nasibu?

Ndiyo, na hiyo ni mojawapo ya matumizi ya kawaida. Bandika washiriki, weka «Idadi» iwe idadi ya zawadi, hakikisha «Ya kipekee» imewashwa ili hakuna mshiriki anayeshinda mara mbili, na ubofye «Tengeneza». Kwa sababu droo inatumia nasibu salama ya kriptografia na inafanyika kikamilifu kwenye kifaa chako, mchakato huu ni rahisi kuuelezea, na «Historia» huweka matokeo iwapo mshiriki atayauuliza baadaye.

Je, ninaweza kukitumia kugawa watu kwenye timu?

Ndiyo. Weka «Idadi» kulingana na ukubwa wa timu ya kwanza kisha ubofye «Tengeneza» — majina yaliyochaguliwa yanaunda timu ya kwanza. Yaondoe kutoka kwenye orodha kisha urudie hatua hiyohiyo kwa timu inayofuata. Washa «Ya kipekee» muda wote ili kuzuia mtu mmoja kuwekwa kwenye timu mbili kwa wakati mmoja.

Kwa nini jina lilelile limetokea mara mbili mfululizo?

Kwa sababu droo zinazojitegemea hujirudia, na hivyo ndivyo nasibu hufanya kazi. Kila droo inaupuuza kila uchaguzi uliopita kabla yake, hivyo basi katika orodha ya majina kumi, jina lilelile kutokea mara mbili mfululizo lina nafasi 1 kati ya 10 kila wakati — hii ni kawaida, si kwamba mfumo una kasoro. Washa «Ya kipekee» ikiwa unahitaji kila uchaguzi ndani ya droo moja uwe tofauti.

Je, chombo cha kuchagua kinakumbuka chaguzi zangu, na je, ni bure?

«Historia» inaweka droo zako 10 za mwisho ndani ya kivinjari chako tu, hivyo unaweza kurejesha, kunakili au kufuta matokeo ya awali, na kusafisha kila kitu wakati wowote unaotaka. Chombo hiki ni bure kabisa bila kujisajili, na kwa sababu hakuna kinachotumwa, hatungeweza kuona au kuhifadhi chaguzi zako hata kama tungetaka.