লটারির বিজয়ী নির্বাচন করা, ক্লাসে একজন শিক্ষার্থীকে ডেকে নেওয়া, বা আজ কে থালাবাসন ধোবে তা স্থির করার প্রয়োজন? এই বিনামূল্যের অনলাইন টুলটি আপনার দেওয়া যেকোনো তালিকা থেকে নিরপেক্ষভাবে এবং এলোমেলোভাবে নাম বেছে নেয়। আপনার অপশনগুলো 'আইটেম' বক্সে পেস্ট করুন — প্রতি লাইনে একটি করে অথবা কমা দিয়ে আলাদা করে — 'সংখ্যা' বিকল্পে আপনার কতগুলো ফলাফল চাই তা সেট করুন এবং 'তৈরি করুন' বোতামে চাপ দিন। একটি তালিকার জন্য কমপক্ষে দুটি এন্ট্রি প্রয়োজন এবং এতে সর্বোচ্চ ১০০০টি নাম রাখা যায়, যার প্রতিটি ২০০ ক্যারেক্টার পর্যন্ত লম্বা হতে পারে।
প্রতিটি বাছাই সরাসরি আপনার ব্রাউজারেই সম্পন্ন হয় Web Crypto API (crypto.getRandomValues) ব্যবহার করে, যা আপনার ডিভাইসের অপারেটিং সিস্টেম থেকে ক্রিপ্টোগ্রাফিক মান অনুযায়ী সুরক্ষিত র্যান্ডম নম্বর প্রদান করে। আপনার তালিকা কখনো কোনো সার্ভারে পাঠানো হয় না, লগ করা হয় না এবং আমাদের দ্বারা কখনো দেখাও হয় না — এবং অন্য জেনারেটরের চেয়ে এখানে এটি বেশি গুরুত্বপূর্ণ, কারণ লোকেরা সাধারণত এখানে গ্রাহকদের তালিকা, ক্লাসের রোল নাম্বার বা সহকর্মীদের নাম পেস্ট করে। 'ফাইল থেকে লোড করুন' বোতামটিও একই প্রতিশ্রুতি দেয়: আপনার ব্রাউজার নিজেই ফাইলটি পড়ে এবং ইন্টারনেটে কোনো কিছু আপলোড না করেই বক্সটি পূরণ করে।
অপশনগুলো এমনভাবে তৈরি করা হয়েছে যাতে মানুষ সাধারণত যে ধরনের তালিকা ব্যবহার করে তার সাথে মানিয়ে নিতে পারে। 'বিভাজক' ডিফল্টভাবে 'স্বয়ংক্রিয়' বিকল্পে থাকে এবং এটি নিজেই লাইন ব্রেক ও কমার মধ্যে পার্থক্য বুঝতে পারে, তাই কোনো স্প্রেডশিট, চ্যাট মেসেজ বা ডকুমেন্ট থেকে কপি করা তালিকা কোনো এডিট ছাড়াই কাজ করে। যদি আপনার ডেটায় একাধিক ফরম্যাট মেশানো থাকে, তবে এটিকে 'নতুন লাইন', 'কমা' বা 'স্পেস' বিকল্পে লক করুন। মনে রাখবেন যে 'স্পেস' বিকল্পটি সর্বদা আপনার নিজের ইচ্ছাকৃত একটি পছন্দ এবং এটি কখনো স্বয়ংক্রিয় নয়, কারণ মানুষের পুরো নামের মাঝখানে এমনিতেই স্পেস থাকে, এবং ডিফল্টভাবে সেগুলোকে ভাগ করলে তালিকাটি নষ্ট হয়ে যাবে। 'সংখ্যা' নির্ধারণ করে যে কতগুলো নাম তোলা হবে (১ থেকে ১০০ এর মধ্যে)। ২০০ জন অংশগ্রহণকারীর মধ্য থেকে তিনজন পুরস্কার বিজয়ী নির্বাচন করছেন? অংশগ্রহণকারীদের নাম পেস্ট করুন, 'সংখ্যা' ৩-এ সেট করুন এবং 'তৈরি করুন' বোতামে চাপ দিন। দুটি কন্ট্রোল শুধুমাত্র তখনই কাজ করে যখন সংখ্যা ২ বা তার বেশি হয় এবং তার আগ পর্যন্ত সেগুলো নিষ্ক্রিয় (ধূসর) থাকে: 'পুনরাবৃত্তি ছাড়া' সুইচ, যা নির্ধারণ করে একই আইটেম দু'বার বাছাই করা যাবে কি না, এবং 'আউটপুট ফরম্যাট', যা নির্ধারণ করে কীভাবে ফলাফলগুলো আলাদা করা হবে ('প্রতি লাইনে একটি', 'স্পেস দিয়ে পৃথক' অথবা 'কমা দ্বারা পৃথক')।
'আইটেম' বক্সের ভেতরের বোতামগুলোর সারিটি এমন সব পরিবর্তনের কাজ করে যার জন্য আপনাকে অন্যথায় অন্য কোথাও যেতে হতো। 'ফাইল থেকে লোড করুন' সরাসরি কোনো প্লেইন-টেক্সট বা CSV ফাইল থেকে তালিকা টেনে আনে। 'এলোমেলো' বোতামটি বক্সের ভেতরের এন্ট্রিগুলোর ক্রম উলটপালট করে দেয়, 'সাজান' বোতাম সেগুলোকে বর্ণনানুক্রমিকভাবে এবং সংখ্যাগুলোকে স্বাভাবিক ক্রমানুসারে সাজায় (দ্বিতীয়বার ক্লিক করলে ক্রমটি উল্টে যায়), এবং 'পরিষ্কার করুন' বক্সটিকে পুরোপুরি খালি করে দেয়। 'নমুনা তথ্য দিয়ে পূরণ করুন' একটি ছোট উদাহরণ তালিকা যুক্ত করে যাতে আপনি এক ক্লিকেই টুলটি পরীক্ষা করে দেখতে পারেন, অপরদিকে 'মানানসই বিষয়বস্তু প্রসারিত করুন' বক্সটিকে এমনভাবে খুলে দেয় যাতে লম্বা তালিকা সম্পূর্ণ দেখা যায় এবং 'ডিফল্ট আকারে সঙ্কুচিত করুন' এটিকে আবার ছোট করে দেয়। ফলাফলের নিচে, 'সব কপি করুন' প্রতিটি বাছাইকে আপনার ক্লিপবোর্ডে কপি করে, 'ফাইলে সংরক্ষণ করুন' সেগুলো ডিভাইসে লিখে রাখে, এবং 'ইতিহাস' আপনার ব্রাউজারে শেষ ১০টি ড্র সংরক্ষণ করে, যাতে আগের ফলাফল এক ক্লিকেই ফিরে পাওয়া যায়।
বাছাই আসলে কীভাবে হয়? যখন আপনি 'তৈরি করুন' চাপেন, তখন পেজটি Math.random()-এর মতো কোনো JavaScript সিউডো-র্যান্ডম ফাংশনের ওপর নির্ভর না করে, crypto.getRandomValues-এর মাধ্যমে ব্রাউজারের কাছে র্যান্ডম মান চায় এবং সেগুলো ব্যবহার করে আপনার তালিকার অবস্থান বেছে নেয়। একটি সাধারণ ৩২-বিট মানকে অবস্থানে রূপান্তর করার পর্যায়েই পিকারগুলো নীরবে ভুল করে: তালিকার দৈর্ঘ্য দিয়ে মানটিকে ভাগ করে ভাগশেষ নেওয়াটা সবচেয়ে সাধারণ এবং পক্ষপাতদুষ্ট পদ্ধতি, কারণ যতক্ষণ না 2^32 সংখ্যাটি তালিকার দৈর্ঘ্য দ্বারা নিঃশেষে বিভাজ্য হয়, তালিকার প্রথম দিকের এন্ট্রিগুলো শেষেরগুলোর তুলনায় সামান্য বেশিবার উঠে আসে। এই ত্রুটিকে modulo bias বলা হয়, এবং এটি কেবল তাত্ত্বিক নয়, বরং পরিমাপযোগ্য। এই পিকারটি এর পরিবর্তে এমন যেকোনো মান বাতিল করে দেয় যা তালিকার দৈর্ঘ্যের সর্বোচ্চ পূর্ণ গুণিতককে ছাড়িয়ে যায় এবং পুনরায় ড্র করে — এই কৌশলটিকে rejection sampling বলা হয়। এর জন্য ব্যাকগ্রাউন্ডে কয়েকটি অতিরিক্ত ড্রয়ের প্রয়োজন হয়, তবে এটি আনুমানিক ফলাফলের পরিবর্তে একটি নির্ভুল গ্যারান্টি দেয়। তালিকায় অবস্থান কিছুই পরিবর্তন করে না: প্রথম এবং শেষ এন্ট্রি প্রতিটি ড্রতেই সমান সম্ভাবনা বহন করে।
'পুনরাবৃত্তি ছাড়া' সুইচটি দুটি সম্পূর্ণ ভিন্ন ধরনের ড্র-কে আলাদা করে এবং পরিসংখ্যানে প্রতিটির জন্য আলাদা নাম রয়েছে। এটি চালু থাকলে, টুলটি Fisher-Yates অ্যালগরিদম ব্যবহার করে আপনার তালিকার একটি কপি এলোমেলো করে দেয় এবং একদম ওপর থেকে এন্ট্রিগুলো তুলে নেয় — ঠিক যেমন একটি টুপি থেকে তুলে নেওয়া কাগজ আর ভেতরে ফেরত না দেওয়া, যাতে কেউ দু'বার নির্বাচিত না হয় এবং সেই আকারের প্রতিটি গ্রুপের সম্ভাবনা সমান থাকে। একে sampling without replacement বলা হয়, এবং পুরস্কারের বিজয়ী, দল গঠন এবং ক্রম নির্ধারণের জন্য এটিই প্রয়োজন। এটি বন্ধ থাকলে, প্রতিটি বাছাই পুরো তালিকা থেকে স্বাধীনভাবে করা হয়, তাই একই এন্ট্রি একাধিকবার উঠতে পারে — একে sampling with replacement বলে, যা তখন প্রয়োজন হয় যখন পুনরাবৃত্তিমূলক ড্র বা দ্রুত পরিসংখ্যানগত নমুনার মতো প্রতিটি রাউন্ডে সবাই যোগ্য থাকে। এর কোনোটিই অন্যটির চেয়ে বেশি নিরপেক্ষ নয়; এগুলো কেবল ভিন্ন ভিন্ন প্রশ্নের উত্তর দেয়।
একটি নিরপেক্ষ ড্র বাইরে থেকে নিরপেক্ষ দেখানোর কথা নয়। দশটি নামের মধ্য থেকে পাঁচটি নাম তুলুন, এবং আপনি নিয়মিতই এমন দুটি নাম দেখতে পাবেন যেগুলো মূল তালিকায় পাশাপাশি ছিল, অথবা পুনরাবৃত্তি অনুমোদিত থাকলে একই নাম পরপর দু'বার উঠতে দেখবেন, এবং এর প্রতিটি ঘটনাই সম্পূর্ণ স্বাভাবিক। প্রতিটি ড্র স্বাধীন: আগের বাছাইগুলোর পরবর্তী বাছাইয়ের ওপর কোনো ধরনের প্রভাব থাকে না, এবং কারও জেতার 'পালা' কখনো আসে না। এর বিপরীত কিছু বিশ্বাস করার প্রবণতাকে gambler's fallacy বলা হয়, এবং এই একই প্রবণতার কারণে আমরা নিজেরা র্যান্ডমভাবে বাছাই করতে গেলে খারাপ ফলাফল করি — যখন আমাদের এলোমেলোভাবে কিছু বেছে নিতে বলা হয়, তখন আমরা প্রথম এবং শেষ এন্ট্রিটি এড়িয়ে চলি, নাম পুনরাবৃত্তি না করার চেষ্টা করি এবং আসল সম্ভাবনার চেয়ে অনেক বেশি সমানভাবে আমাদের পছন্দগুলো ছড়িয়ে দিই। সন্দেহজনকভাবে পরিপাটি দেখায় এমন ফলাফল সব সময়ই কোনো মানুষের হাতের ছোঁয়া; খাঁটি র্যান্ডমনেস বা এলোমেলোতা সর্বদা গুচ্ছ এবং পুনরাবৃত্তি তৈরি করে।
এই র্যান্ডম বাছাই টুলটি কেন বেছে নেবেন?
- শুধুমাত্র ব্রাউজার ভিত্তিক বাছাই: আপনার তালিকা আপনার ডিভাইসেই পড়া হয় এবং কোথাও পাঠানো হয় না
- Web Crypto API-এর র্যান্ডমনেস: ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত, Math.random() নয়
- কোনো modulo bias নেই: rejection sampling প্রতিটি এন্ট্রির সমান সম্ভাবনা বজায় রাখে
- যেকোনো ধরনের তালিকা: প্রতি লাইনে একটি, কমা বা স্পেস দিয়ে, কোনো রিফরম্যাটিং ছাড়াই
- 'পুনরাবৃত্তি ছাড়া' মোড: কাউকে দু'বার বাছাই না করেই বিজয়ী বা দল নির্বাচন করুন
- ১০০০টি পর্যন্ত এন্ট্রি এবং এক ড্রয়ে ১০০টি পর্যন্ত বাছাই সম্ভব
- অন্তর্নির্মিত তালিকা টুলস: ফাইল থেকে লোড করুন, এলোমেলো, সাজান, পরিষ্কার করুন, নমুনা তথ্য
- ইতিহাস এবং ফাইলে সংরক্ষণ করুন: যদি কখনো ড্রয়ের প্রমাণ দেখাতে হয় তার জন্য রেকর্ড রাখুন
- সীমাহীন এবং বিনামূল্যের: কোনো সাইন-আপ নেই, ব্যবহারের সীমা নেই, আমাদের সার্ভারে কিছুই থাকে না
যখনই কোনো সিদ্ধান্তকে পরবর্তীতে প্রশ্নের সম্মুখীন হওয়ার সম্ভাবনা থাকে, তখনই র্যান্ডম বাছাইয়ের প্রয়োজন হয়। শিক্ষকরা কোনো পক্ষপাতিত্ব ছাড়াই ক্লাসে শিক্ষার্থীদের ডাকেন এবং প্রজেক্টের জন্য তাদের বিভিন্ন দলে ভাগ করেন। কন্টেন্ট ক্রিয়েটর এবং মার্কেটাররা এমন দর্শকদের সামনে লটারির বিজয়ী নির্বাচন করেন যাদের ফলাফলের ওপর বিশ্বাস রাখতে হয়। ম্যানেজাররা এমন কাজগুলো বণ্টন করেন যেগুলো কেউ স্বেচ্ছায় করতে চায় না, এবং দলগুলো ঠিক করে কে আগে প্রেজেন্টেশন দেবে বা কে ডিউটিতে থাকবে। অডিট করার জন্য গবেষকরা রেকর্ডগুলোর একটি র্যান্ডম নমুনা তৈরি করেন। পরিবারগুলো কী দেখবে তা নিয়ে তর্কের অবসান ঘটায় এবং ক্ষুধার্ত বন্ধুদের দল রেস্তোরাঁ বেছে নেয়। এই সবকটি পরিস্থিতির সাধারণ দিক হলো এমন একটি বাছাই যা পরে যে কেউ ব্যাখ্যা করতে পারে: এই ড্র ক্রিপ্টোগ্রাফিক র্যান্ডমনেস ব্যবহার করে, এটি পুরোপুরি আপনার ডিভাইসে ঘটে এবং যদি কেউ পরে এ নিয়ে প্রশ্ন তোলে, তবে 'ইতিহাস' ফলাফলটি সংরক্ষণ করে রাখে।
এই টুলটির কয়েকটি বাস্তব সীমাবদ্ধতা জানা থাকা ভালো। আপনার তালিকায় যতগুলো ভিন্ন বা অনন্য এন্ট্রি আছে, পিকার তার চেয়ে বেশি সংখ্যক এন্ট্রি ড্র করতে পারে না — তিন জন বিজয়ীর জন্য কমপক্ষে তিনটি নাম প্রয়োজন — এবং এটি ২০০ ক্যারেক্টারের ১০০০টি এন্ট্রিতে গিয়ে থামে, যেখানে এক ড্রয়ে সর্বোচ্চ ১০০টি বাছাই করা যায়। 'এলোমেলো' এবং 'সাজান' বোতামগুলো লাইন ধরে ধরে কাজ করে, তাই এক লাইনে পেস্ট করা কমা-বিচ্ছিন্ন তালিকাটি তখনই পুনর্গঠিত হয় যখন প্রতি লাইনে একটি করে এন্ট্রি থাকে; তাছাড়া, এই দুটো বোতাম কেবল বক্সের ভেতরের লেখাকে সাজায়, আসল ড্র-কে নয়, কারণ আপনার তালিকার ক্রম যেমনই হোক না কেন ড্র সমানভাবেই নিরপেক্ষ হয়। পাশাপাশি, প্রতিটি এন্ট্রির মান ডিজাইনের দিক থেকে হুবহু একই থাকে, তাই যদি কোনো নাম ড্রয়ে দ্বিগুণ গণনা করার প্রয়োজন হয়, তবে সেই নাম তালিকায় দু'বার লিখতে হবে। এই সীমাবদ্ধতার ভেতরে গ্যারান্টিটি অত্যন্ত জোরালো — প্রতিটি ড্রয়ে আপনার তালিকার প্রতিটি এন্ট্রির হুবহু একই সম্ভাবনা থাকে।