এলোমেলো স্ক্রিপ্ট যা আসলে এলোমেলো নয়


106

অফিসে একটি ছোট রসিকতা হিসাবে কেউ একটি স্ক্রিপ্ট চেয়েছিল যা এলোমেলোভাবে একটি নাম রাখে এবং বলেছিল যে ব্যক্তি একটি চক্রের পানীয় তৈরি করবে।

আসুন লোকেদের জন, জেফ, এমা, স্টিভ এবং জুলি বলি।

আমি ভেবেছিলাম তাড়াতাড়ি নজরে এলোমেলো মনে হচ্ছে এমন কোনও স্ক্রিপ্ট তৈরি করা মজার হবে, তবে বাস্তবে সর্বদা আউটপুট হিসাবে একই ব্যক্তিকে দেওয়া হয় (আপনি যাকে বেছে নেন তা আপনার উপর নির্ভরশীল)।

সর্বাধিক ভোট দেওয়া উত্তর এক সপ্তাহ পরে জিতবে

এবং বিজয়ী....

পল আর (বর্তমানে) 158 ভোট নিয়ে।

এখানে উত্তরগুলি দুর্দান্ত, এবং অন্য কারও কাছে যদি এখনও পোস্ট করা হয়নি এমন অন্য কোনও ধারণা থাকে তবে দয়া করে এগুলি যুক্ত করুন, আমি তাদের মাধ্যমে পড়া পছন্দ করি।



6
আমার পছন্দসই একটি @ অস্ট্রোসিবি ঠিক ববির টেবিলের পিছনে।
ক্রંચার

50
দেখে মনে হচ্ছে এটি এলোমেলো হয়ে থাকে যদি কখনও কোনও ব্যক্তিকে বাছাই না করে।
ব্রেন্ডন লং

6
@ এস্ট্রোসিবি এটিও দুর্দান্ত: dilbert.com/strips/comic/2001-10-25
gilbertohasnofb

3
আমি প্রথম পৃষ্ঠায় গিয়েছিলাম: সর্বাধিক উত্তর সর্বদা জনকে বেছে নেয়, দ্বিতীয় সর্বোচ্চটি জুলি, জেফ খুব কমই এবং স্টিভকে ১ দ্বারা নির্বাচিত করা হয়েছিল। এমনকি রায় একজনকে বেছে নিয়েছিলেন তবে কেউ এমা পছন্দ করেন নি। গল্পটির নৈতিকতা: পানীয়গুলি কারা কিনবেন এলোমেলোভাবে সিদ্ধান্ত নেওয়ার জন্য একটি লাইনে দাঁড়িয়ে যখন নিজের নাম রাখুন এমা।
দুর্ভাগ্য পরিবর্তনশীল

উত্তর:


171

সি

এটি তাই যেমন মূল্যবান মদ্যপান সময় নষ্ট করতে না সিদ্ধান্ত নেবেন কে যত দ্রুত সম্ভব কেনা হয়, গুরুত্বপূর্ণ নেই - অত: পর সি সর্বাধিক কর্মক্ষমতা পেতে সুস্পষ্ট পছন্দ:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    const char *buyer;
    int n;

    srand(time(NULL)); // make sure we get a good random seed to make things fair !
    n = rand();
    switch (n % 5)
    {
        case 0: buyer = "John";
        case 1: buyer = "Jeff";
        case 2: buyer = "Emma";
        case 3: buyer = "Steve";
        case 4: buyer = "Julie";
    }
    printf("The person who is buying the drinks today is: %s !!!\n", buyer);
    return 0;
}

ব্যাখ্যা:

যদি break;স্যুইচ বিবৃতিতে প্রতিটি কেস পরে থাকে তবে এটি ঠিক কাজ করবে । এটি যেহেতু দাঁড়ায় তবে প্রতিটি ক্ষেত্রে পরেরটিতে "পড়ে" যায়, তাই দরিদ্র জুলি সবসময় পানীয় কেনা শেষ করে।


17
পারফরম্যান্সের জন্য +1 - একটি শারীরিক ডাই রোলিংয়ের চেয়ে অনেক দ্রুত! ;)
জোস্টি

16
আমি আরও কিছুটা আরও পারফরম্যান্স পেতে সম্ভবত আরও সিমডি বা জিপিজিইউ দিয়ে এটি আরও অনুকূল করার কথা ভাবছি। ;-)
পল আর

7
একেবারে বাস্তব লাইভ প্রযোজ্য। কেউ কখনও জিজ্ঞাসাও করবে না যে এটি খুব সামান্যতম একটি দুর্ঘটনা ছিল।
আইফ্রেইলিচট

5
এটি কি কেবল আমিই বা এটির একটিও স্পষ্টভাবে স্পষ্ট?
অ্যালভিন ওয়াং

3
@ অ্যালভিনওয়ং আমি তাৎক্ষণিকভাবে এটি লক্ষ্য করিনি। তারপরে আবার, আমি নিয়মিত সি ব্যবহার করি না, বা অন্য কোনও ভাষা যা বিসিপিএল থেকে এসেছে।
রাইময়েড

164

পিএইচপি

এটি যেতে দেয়নি, সুতরাং এখানে অন্যটি রয়েছে:

$f = fopen('/dev/random','r');
$s = fread($f, 4);
fclose($f);

$names = ['John', 'Jeff', 'Emma', 'Steve', 'Julie'];

echo $names[$s % count($names)];

এটি আসলে জন উত্পাদন করার গ্যারান্টিযুক্ত নয়, তবে সম্ভাবনা খুব ভাল। পিএইচপি আনন্দের সাথে / দেব / এলোমেলো যা কিছু দেবে তা গ্রহণ করবে এটি দেখুন (সম্ভবত) এটি বিশ্লেষণ করতে পারে না এবং পরিবর্তে খুব যুক্তিসঙ্গত সংখ্যা 0 নিয়ে আসে। সর্বোপরি, প্রোগ্রামারকে একটি সম্ভাব্য ত্রুটি সম্পর্কে সতর্ক করা পিএইচপি-তে একটি মারাত্মক পাপ হিসাবে বিবেচিত হয়।


25
আপনি পিএইচপি পছন্দ করতে পারেন - এবং আরও ভাল, এটি কখনও কখনও খুব কমই অন্য কাউকে চয়ন করবে। সুতরাং আপনি যদি ভাগ্যবান হন তবে প্রথমে কিছুটা পক্ষপাতদুষ্ট মনে হবে
ফ্যালকো

142
+1000 "এর জন্য ... প্রোগ্রামারকে একটি সম্ভাব্য ত্রুটি সম্পর্কে সতর্ক করা পিএইচপি-তে একটি মারাত্মক পাপ হিসাবে বিবেচিত হয়।"
জেসেডানো


85

Haskell,

এটি খুব স্বচ্ছ যদি এটি সর্বদা একই নামটি দেয় তবে নিম্নলিখিতগুলি চেষ্টা করুন

import Control.Monad
import System.Exit
import Control.Concurrent
import Control.Concurrent.MVar


data Person = John | Jeff | Emma | Steve | Julie deriving (Show, Enum)

next Julie = John
next p = succ p

rotate :: MVar Person -> IO ()
rotate mp = modifyMVar_ mp (return . next) >> rotate mp

main :: IO ()
main = do
    mp <- newMVar John
    forkIO $ rotate mp
    putStrLn "Shuffling"
    readMVar mp >>= print
    exitWith ExitSuccess

যখনই আপনি এলোমেলো হতে চান:

[~]$ runghc prog.hs
Shuffling
Steve

[~]$ runghc prog.hs
Shuffling
Julie

এবং আপনার দুর্ভাগ্য টার্গেটের জন্য:

[~]$ runhugs prog.hs
Shuffling
John

[~]$ runhugs prog.hs
Shuffling
John

আলিঙ্গন কেবল সমবায় মাল্টিটাস্কিং প্রয়োগ করে, তাই rotateথ্রেড কখনই চলবে না


24
এটাই ডায়াবলিকাল!
দেনিথ

8
এমন ডাইস তোলার মতো মনে হচ্ছে যা এখনও চলা থামেনি।
vi।

1
@Vi। এটি একটি দুর্দান্ত উপমা। ভাগ্যক্রমে এমওয়ার্স ব্যবহার গ্যারান্টি দেয় যে ছবিটি অস্পষ্ট হবে না। :)
মনোলোসেল

@ মোমোসেল ভাল, প্রযুক্তিগতভাবে, এমনকি একটি চলমান বস্তুর একটি ছবিও পরিষ্কার হতে পারে।
ভুতগুলি_ইন_কোড

75

বাশ - সর্বাধিক সরলতা

খুব সাধারণ উদাহরণ - আসুন পাঠ্যপুস্তকটি করে কোনও সমস্যা এড়ানো যাক। ভাল ফলাফলের জন্য সিস্টেম ঘড়ি থেকে জেনারেটর বীজ করতে ভুলবেন না!

#!/bin/bash

names=(John Jeff Emma Steve Julie)   # Create an array with the list of names
RANDOM=$SECONDS                      # Seed the random generator with seconds since epoch
number=$((RANDOM % 5))               # Pick a number from 0 to 4
echo ${names[number]}                # Pick a name

এটি ব্যবহারকারী $SECONDSঅন্তর্নির্মিত আসলে কী তা জানে না তার উপর নির্ভর করে; বর্তমান শেলটি শুরু হওয়ার পরে এটি সেকেন্ডের সংখ্যাটি প্রদান করে। এটি কোনও স্ক্রিপ্টে রয়েছে, শেলটি সর্বদা শূন্য সেকেন্ড আগে শুরু হয়েছিল, তাই জেনারেটরটি সর্বদা বীজযুক্ত থাকে 0এবং জুলি সর্বদা বিয়ার কিনে।

বোনাস:

এই এক যথেষ্ট ভাল যাচাইয়ের জন্য দাঁড়িয়ে; আপনি যদি কোনও স্ক্রিপ্টের পরিবর্তে কমান্ডলাইনে একই কোডটি প্রবেশ করেন তবে এটি এলোমেলো ফলাফল দেবে, কারণ $SECONDSব্যবহারকারীর ইন্টারেক্টিভ শেলটি যে সময় চালিয়ে যাচ্ছে তার দৈর্ঘ্য ফিরে আসবে।


9
\ ও / গড় !!! সত্যিই মানে !!! $SECONDSFTW! \ o /
ইয়তি

আপনি যদি sourceএটি না করেন, কেবল এটি কার্যকর করার পরিবর্তে? শিবাং কি এখনও একটি নতুন শেল বা অন্য কিছু ট্রিগার করবে?
jpmc26

1
@ jpmc26: আপনি যদি এটি দিয়ে এটি সম্পাদন করেন sourceতবে ঠিক একই রকম আপনি নিজেরাই কমান্ডলাইনে আদেশগুলি টাইপ করেছেন; #! / বিন / বাশ একটি মন্তব্য তাই এটি উপেক্ষা করা হবে। এটি যে কোনও স্ক্রিপ্টের ক্ষেত্রে সত্য।
দাঙ্গা

57

সি শার্প

using System;
using System.Linq;

namespace PCCG {
    class PCCG31836 {
        public static void Main() {
            var names = new string[]{ "John", "Jeff", "Emma", "Steve", "Julie" };
            var rng = new Random();
            names.OrderBy(name => rng.Next());
            Console.WriteLine(names[0]);
        }
    }
}

এটি নেট এপিআইয়ের সাথে পরিচিত ব্যক্তিদের বোকা বানাতে পারে না, তবে যারা জানেন না এমন লোকেরা বিশ্বাস করতে পারে যে আপনি যে OrderByআইটেমটি কল করেছেন তাকে সংশোধন করে এবং এপিআইতে নবজাতকের পক্ষে এটি করা একটি প্রশংসনীয় ত্রুটি।


1
এমনকি যদি অর্ডারবি হাইপোথেটিকভাবে অবজেক্টটি সংশোধন করে, সেই কলটি কি আসলে তালিকাটি এলোমেলোভাবে বাছাই করবে? নেট সম্পর্কে অপরিচিত কেউ হিসাবে, আমার প্রথম অনুমানটি যেহেতু rng.Next()কেবল একবার বলা হয় তাই অ্যারেটি ধ্রুবক দ্বারা বাছাই করা হবে যার ফলে কোনও পরিবর্তন হবে না (বা এমন পরিবর্তন যা কেবল বাছাইকরণ অ্যালগরিদমের উপর নির্ভর করে)।
ব্রিলিয়ানড

1
@ ব্রিলিয়ান্ড অর্ডারবিকে দেওয়া আর্গুমেন্টটি কোনও স্থিতিশীল মান নয়, প্রতিবার যখন কোনও উপাদান বাছাই করা হয় তখন তা কার্যকর করা হয় এবং এক্ষেত্রে কোনও মানকে তুলনা না করে এলোমেলো মানগুলি ফেরত দেয়। লাইনটি হলে এটি আসলে সঠিকভাবে কাজ করবেnames = names.OrderBy(name => rng.Next());
user3188175

1
=>নির্দেশ করে যে এটি C # এর ল্যামডা অভিব্যক্তি (অবসান) হয়।
স্নোবডি

44

শক্তির উৎস

$names = @{0='John'; 1='Jeff'; 2='Emma'; 3='Steve'; 4='Julie'}
$id = random -maximum $names.Length
$names[$id]

এটি সর্বদা আউটপুট হবে John

$namesএকটি হল System.Collections.Hashtableযা নেই Lengthসম্পত্তি। পাওয়ারশেল v3 দিয়ে শুরু করা, Length(এবং এছাড়াও Count) যেকোন বস্তুর সম্পত্তি হিসাবে ব্যবহার করা যেতে পারে। যদি কোনও বস্তুর সম্পত্তি না থাকে 1তবে বস্তুটি শূন্য না হলে এটি ফিরে আসবে, অন্যথায় এটি ফিরে আসবে 0। সুতরাং আমার উত্তরে, $names.Length1 হিসাবে মূল্যায়ন করে এবং random -maximum 1সর্বদা 0 প্রদান করে যেহেতু সর্বাধিক একচেটিয়া।


42

প্রশ্নঃ

show rand `John`Jeff`Emma`Steve`Julie;
exit 0;

কিউ সর্বদা একই মান সহ এর এলোমেলো সংখ্যা বীজ সূচনা করে।


8
সুতরাং মূলত এটি মোটেও এলোমেলো নয়
স্যাম ক্রিমার

3
@ স্যামক্রিমার আউটপুটটিকে এলোমেলো করে তুলতে প্রশ্নের উদ্দেশ্য খুব বেশি। তবে এটি এলোমেলো দেখায় তাই এটি অবশ্যই বিলে ফিট করে
ক্রাঙ্কার

4
দুঃখিত, আমি বোঝাতে চেয়েছিলাম কিউ এর এলোমেলো সংখ্যাগুলি এলোমেলো নয়, এই প্রশ্নটি অবশ্যই মানদণ্ডগুলি পূরণ করে। এই পথ পেরিয়ে আসার অর্থ ছিল না!
স্যাম ক্রিমার

হ্যাঁ, তাই প্রতিবার আপনি র‌্যান্ড ব্যবহার করতে চাইলে এলোমেলো বীজ উত্পন্ন করার জন্য আপনার নিজের উপায়টি খুঁজতে হবে? শব্দ ... দরকারী।
ডিএলহ

1
খুব সহজেই এলোমেলো বীজ সেট করতে পারেন ... -S 1234বিকল্প দিয়ে দোভাষী শুরু করুন বা \S 1234দোভাষী থেকে করুন
স্কিভি

34

পার্ল

use strict;

my @people = qw/John Jeff Emma Steve Julie/;
my @index = int(rand() * 5);

print "Person @index is buying: $people[@index]\n";

প্রিন্টস: Person X is buying: Jeff(যেখানে এক্স ০-৪ থেকে রয়েছে)

স্কেলারের প্রসঙ্গে কিছুটা আপত্তিজনক। তালিকার @index = int(rand() * 5)0 তম স্থানে 0 - 4 থেকে একটি এলোমেলো পূর্ণসংখ্যা স্থাপন করে @index। অ্যারে প্রিন্ট করার সময় এটি যথাযথভাবে @index এ র্যান্ডম পূর্ণসংখ্যাটি মুদ্রণ করে, তবে একটি অ্যারে সূচক হিসাবে ব্যবহার করার সময় $people[@index], @index তালিকা আকারের মান প্রদান করে, স্কেলার প্রসঙ্গটি ব্যবহার করে 1

আকর্ষণীয় যথেষ্ট, @people[@index]এটি সঠিকভাবে সূচি তৈরি করে।

আকর্ষণীয়ভাবে @people[@index]পার্লের হ্যাশ টুকরো যথেষ্ট , তাই @indexতালিকা প্রসঙ্গে মূল্যায়ন করা হয়; এক্ষেত্রে এটি একক প্রবেশের তালিকা এবং সে কারণেই এটি সঠিকভাবে কাজ করে


সুতরাং সি (++) পদে, তালিকা থেকে স্কেলারের ক্ষেত্রে অন্তর্নিহিত রূপান্তর ঘটছে কারণ সূচীকরণের সময়, কোনও স্কেলারের আশা করা যায়?
আইফ্রেইলিচট

@iFreilicht সঠিক পার্লে, এক্সপ্রেশনগুলি কোথায় প্রদর্শিত হবে তার উপর নির্ভর করে একটি তালিকা হিসাবে বা স্কেলারের হিসাবে মূল্যায়ন করা যেতে পারে। ফলস্বরূপ, একই অভিব্যক্তিটি প্রসঙ্গের উপর নির্ভর করে বিভিন্ন জিনিস বোঝাতে পারে। @"তালিকার প্রসঙ্গে" তালিকার একটি পরিবর্তনশীল (যেমন উপসর্গের সাথে একটি পরিবর্তনশীল ) এর সমস্ত উপাদান হিসাবে ব্যাখ্যা করা হয়, তবে "স্কেলার প্রসঙ্গে" তালিকার মোট উপাদানগুলির সংখ্যার সমান একটি স্কেলার। সুতরাং, স্ট্রিংয়ের ভিতরে তালিকার ভেরিয়েবলের তালিকা প্রসঙ্গ থাকে এবং ইন্টারপোলটেড হয় এবং আমরা পাই Person X is buying। তবে একটি অ্যারে সূচক হিসাবে, এটি স্কেলার প্রসঙ্গটি পেয়ে যায় এবং এটি 1 হিসাবে ব্যাখ্যা করা হয়
অ্যালেন জি

3
এর সাথে সমস্যাটি হ'ল কোনও পার্ল প্রোগ্রামার যখন দেখেন my @index = ..., তিনি তত্ক্ষণাত "WTF ?!" অবাক করে দেন।
ডারোবার্ট

@ডারবার্ট, আপনি কেন অবাক হবেন? আপনি প্রায়শই এর মতো কোড দেখতে পান ... my @letters = 'a' .. 'z'; my @squares = map $_**2, 1..20; my @sorted = sort { lc $a cmp lc $b } @words;ইত্যাদি
ম্যাথিয়াস

@ মাথিয়াস কারণ লাইনটি একটি একক মান বাছাই করে সংরক্ষণ করবে এবং একটি স্কেলারের পরিবর্তে এটি অ্যারেতে সংরক্ষণ করা হচ্ছে।
ডারোবার্ট

23

এর নাম ECMAScript

// Randomly pick a person on only one line!
var people = [('John', 'Jeff', 'Emma', 'Steve', 'Julie')];

console.log(people[new Date() % people.length | 0]);

এটি সবসময় জুলিকে বাছাই করে।

স্কোয়ার বন্ধনীগুলির ভিতরে এটি বন্ধনী রয়েছে, এবং কমা অপারেটর তার ডান অপারেণ্ডের মান প্রদান করে।
এটি মিস করাও খুব সহজ। আমি বাস্তব কোড আগে এটি মিস করেছি ।


এটি আনন্দদায়ক। অবশেষে, সেই ভয়ঙ্কর, ভয়ানক অপারেটরের জন্য একটি ব্যবহার।
কেনে

5
সেই প্রসঙ্গে কমা প্রযুক্তিগতভাবে একটি অপারেটর, বরং বিভাজক। ecma-international.org/ecma-262/5.1/#sec-11.14 এবং এটা ভয়ানক। আপনি না চাইলে আপনার কোডটি পড়া শক্ত হবে। আপনি যেমন এখানে। সুতরাং, কুডোস।
কিউন

2
@ কোরি হ্যাঁ, আমি একমত - যদিও আমি কোড গল্ফের জন্য ফাংশন এক্সপ্রেশন (উদাঃ (a,b)=>(a=b[0],b)) সহ সমস্ত সময় এটি ব্যবহার করি । আমি আমার উত্তর পরিষ্কার করে দিয়েছি।
টুথব্রাশ

21

সি শার্প

using System;

namespace LetsTroll {
    class Program {
        static void Main() {
            var names = new string[]{ "John", "Jeff", "Emma", "Steve", "Julie" };
            var random = new Random(5).NextDouble();
            var id = (int)Math.Floor(random);
            Console.WriteLine(names[id]);
        }
    }
}

কৌশলটি হল, পদ্ধতিটি new Random().NextDouble()0 এবং 1 এর মধ্যে একটি ডাবল ফেরত Math.Floor()দেয় এই মানটি প্রয়োগ করে এটি সর্বদা 0 হবে।


24
এটি আমার তাত্ক্ষণিক দৃষ্টিকে সহ্য করে না ;)
মার্টিন ইন্ডার

1
@TimS। সে রকমই? : পি
কেনার্ড

2
+1, আরও ভাল - আমি জানি আপনি আসলে কী করছেন তবে এটি API এর সাথে খুব পরিচিত না এমন কাউকে বোকা বানাতে পারে।
টিম এস

1
আমি এই সম্পর্কে জানি না। আপনি যদি একটি বীজ নির্দিষ্ট করতে চলেছেন তবে কেন কেবল "এলোমেলো" var random = new Random(5); var id = random.NextInt(5);
ইন্টিগ্রেশন

2
@ ক্ল্যাক্টো আমার মতে এটির দ্বিগুণ সহ কারও দ্বিগুণ গ্রহণ করা, কেন তা জিজ্ঞাসা করা এবং সমস্যাটি দেখার সম্ভাবনা বেশি। এটি একবার সহ এবং তারপরে অপ্রয়োজনীয় কোডটি অন্তর্ভুক্ত করে কিছুটা পুনর্নির্দেশ / আন্ডারহেনডনেস দেয়। বোনাস: যদি কেউ বাগগুলির মধ্যে একটি ঠিক করে দেয় তবে অন্যটির উপস্থিতি রয়েছে।
টিম এস

18

সি শার্প

var names = new string[] {"John", "Jeff", "Emma", "Steve", "Julie"};
var guidBasedSeed = BitConverter.ToInt32(new Guid().ToByteArray(), 0);
var prng = new Random(guidBasedSeed);
var rn = (int)prng.Next(0, names.Length);
Console.WriteLine(names[rn]);

ইঙ্গিত:

জিইউইডি থেকে বীজ উত্পাদন করুন। গাইডগুলির সংঘর্ষের 4 × 10-10 সম্ভাবনা রয়েছে। সুপার এলোমেলো।

উত্তর:

কমপক্ষে আপনি যখন ব্যবহার করবেন Guid.NewGuid(), উফ! (বীজ সর্বদা 0 বানানোর স্নিগ্ধ উপায়)) ভুল দিকনির্দেশের জন্য অর্থহীন (ইন্ট)


আমি এটি করতে পারি এমন অন্য AddRangeউপায়টি হ'ল একটিতে Concatনাম যুক্ত করার সাথে মিশ্রিত হওয়া List<string>। আমার কাছে একটি লুক্কায়িত আইকোয়ালিটি কম্পিউটারের সাথে একটি হ্যাশেট থাকার ঘটনা ঘটেছে, তবে এটি কেবল খুব অস্বাভাবিক হবে। আমার ক্রেডিটটিতে আমি পোস্ট করার সময় অনেকগুলি (যদি থাকে) বীজভিত্তিক উত্তর ছিল না।
নাথান কুপার

আমি অনুমান করব আপনার মত আমার মত ধারণাটিও ছিল তবে আপনি কিছুটা দ্রুত হয়েছিলেন এবং দেখতে এটি কিছুটা শক্ত করেছেন। +1 টি!
tsavinho

7
এলোমেলো সংখ্যা জেনারেটর বপন করা একটি সুস্পষ্ট কৌশল, তবে আপনি এখানে দুর্দান্তভাবে লুকিয়ে রেখেছেন। মনোরম কাজ।
ট্রিগ

18

বাশ / কোর্টিল

এটি আমি একই স্ক্রিপ্টের জন্য লিখেছি এমন একটি স্ক্রিপ্ট থেকে প্রায় ভারব্যাটিম নেওয়া হয়েছে।

#!/bin/bash
# Sort names in random order and print the first
printf '%s\n' John Jeff Emma Steve Julie | sort -r | head -1

এমনকি উপরের কেস আর ব্যবহার করতে ভুলে যাওয়া ভুল ঘটনা আমি মাঝে মাঝে বাস্তব জীবনের স্ক্রিপ্টগুলিতে করেছি।


3
আপনি আরও ভাল ব্যাখ্যা দিতে পারেন? আপনার বর্তমানটি সত্যই সংক্ষিপ্ত এবং এমন কারও পক্ষে সহায়ক নয় যিনি বাশের সাথে সত্যই পরিচিত নন।
আইফ্রেইলিচট

6
-rবিপরীত (লেসিকোগ্রাফিক) সাজান নির্দিষ্ট করে, তাই স্টিভ সর্বদা বাছাই করা হবে। -Rএলোমেলো বাছাইয়ের জন্য এটি একটি নির্দোষ টাইপ হিসাবে দেখা যেতে পারে
সর্বাধিক

3
মন্তব্যগুলিতে বিশ্বাস না করা, তবে কোডটি মনোযোগ সহকারে পড়ার জন্য এটি একটি ভাল অনুস্মারক!
টেকব্র্যাট

16

চুনি

names = ["John", "Jeff", "Emma", "Steve", "Julie"]

puts names.sort{|x| rand()}.first

এটি এর সাথে সঠিকভাবে কাজ করবে sort_by, তবে sortএমন তুলনা ফাংশনটি প্রত্যাশা করে যা কাজ করে <=>। র্যান্ড () এর ফলাফল সর্বদা ইতিবাচক হবে, সুতরাং আপনার রুবি বাস্তবায়নের sortঅ্যালগরিদম যদি নির্বিচারে হয় তবে এটি সর্বদা সমতুল্য ফলাফল আনবে । আমার রুবি 1.9.3 সর্বদা জুলিকে আউটপুট করে।


12

চুনি

names = ["John", "Jeff", "Emma", "Steve", "Julie"]

puts names[rand() % 5]

rand() কোনও যুক্তি ছাড়াই 0 এবং 1 এর মধ্যে একটি এলোমেলোভাবে ভাসমান উত্পাদন করে So সুতরাং 5 মডিউল কিছুই করে না, এবং একটি ভাসমান যুক্তি দিয়ে একটি অ্যারেতে টুকরো টুকরো করার সময় রুবি কেবল এটিকে গোল করে দেয়, তাই এটি সর্বদা জনকে ফিরিয়ে দেয়।


11

পার্ল

থ্রি srandএস এটিকে তিনগুণ বেশি এলোমেলো করে তুলবে!

#!perl
use feature 'say';

sub random_person {
    my ($aref_people) = @_;
    srand; srand; srand;
    return $aref_people->[$RANDOM % scalar @$aref_people];
}

my @people = qw/John Jeff Emma Steve Julie/;
my $person = random_person(\@people);

say "$person makes next round of drinks!";

ব্যাখ্যা

পার্লে কোনও ND র্যান্ডোম নেই, এটি একটি অপরিবর্তিত ভেরিয়েবল। কোডটি সর্বদা তালিকা থেকে প্রথম উপাদানটি ফিরিয়ে দেবে - জনকে পান করুন :)

সম্পাদনা:

কোডটি দেখার পরে, পাঁচটি ছেলের মধ্যে একজন নীচের প্রোগ্রামটি তৈরি করে সুস্পষ্ট ত্রুটিটি ঠিক করার সিদ্ধান্ত নিয়েছে:

#!perl
use feature 'say';

sub random_person {
    my ($aref_people) = @_;
    return $aref_people->[rand $#$aref_people];
}

my @people = qw/John Jeff Emma Steve Julie/;
my $person = random_person(\@people);

say "$person buys next round of drinks!";

আপনি কি কেবল কোডটি দেখে এটি করতে পারেন?

ব্যাখ্যা:

পার্লে, $#arrayশেষ উপাদানটির সূচক ফেরত দেয়; যেহেতু অ্যারেগুলি শূন্য-ভিত্তিক, পাঁচটি উপাদান সহ একটি অ্যারের রেফারেন্স দেওয়া $#$aref_peopleহবে 4
randশূন্যের চেয়ে বৃহত্তর বা সমান এবং এর পরামিতরের চেয়ে কম এলোমেলো সংখ্যা প্রদান করে, তাই এটি কখনই ফিরে আসবে না 4, এর কার্যকর অর্থ জুলি কখনই পানীয় পান করবে না :)


1
$RANDOMবাশ, ksh এবং zsh (তবে পার্ল নয়) এর একটি আসল বৈশিষ্ট্য।
কর্নিগ

10

পাইথন

সকলেই জানেন যে আপনি এত ছোট নমুনা স্থানে এলোমেলোভাবে বিশ্বাস করতে পারবেন না; এটিকে সত্যই এলোমেলো করে তুলতে, আমি তালিকা থেকে নাম বাছাইয়ের পুরানো পদ্ধতিটি ত্যাগ করেছি এবং এর পরিবর্তে আমার প্রোগ্রামটি সম্পূর্ণ র্যান্ডম নামটি বানান করবে। যেহেতু অফিসে বেশিরভাগ নামের 4 টি চিঠি ছিল, আমরা এটির জন্য নিষ্পত্তি করব।

import random

def CHR (n):
    # Just easily convert a number between 0 and 25 into a corresponding letter
    return chr(n+ord('A'))

# Seed the RNG with a large prime number. And multiply it by 2 for good measure.
random.seed (86117*2)

# Now, let's see what COMPLETELY RANDOM name will be spelled out!
totallyRandomName = ''
for i in range(4) :
    totallyRandomName += CHR(int(random.random()*26))

print (totallyRandomName)

স্বাভাবিকভাবেই, আমি সঠিক বীজটি বেছে নেওয়ার বিষয়টি নিশ্চিত করার জন্য কিছু প্রস্তুতিমূলক কাজ করেছি।


15
একটি ধ্রুবক দিয়ে এলোমেলো সংখ্যার উত্পন্ন সিডিং ঠিক খুব সুস্পষ্ট ..
ব্রেন্ডন লং

@ ব্রেন্ডনলং এটি অবশ্যই ভ্রু বাড়াবে। লোকেরা এটির এলোমেলোতা নিশ্চিত করতে এটি পরীক্ষা করতে চাইবে। এবং যখন এটি না হয়, অনুমান করুন যে কে পানীয় কিনছে।
জেএফএ

10

সি

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
char *name[]={"John", "Jeff", "Emma", "Steeve", "Julie"};

int i;
int n=rand()%10000;
int r=3;

for (i=0; i<10000+n; i++) // random number of iteration
    {
    r=(r*r)%10000; // my own PRNG (square and mod)
    }

printf("%s", name[r%5] );
}

দুঃখিত, জেফ!

কয়েকটি পুনরাবৃত্তির পরে r == 1 Mod 5, গণির কারণে। নৈতিকতা: আপনি যদি গণিতে খারাপ হন তবে নিজের PRNG লিখবেন না। :)


10

সি ++ X11

#include <vector>
#include <iostream>

int main () {
  std::srand(time(NULL));
  std::vector<std::string> choice{("jen","moss","roy")};
  std::cout << choice[rand()%choice.size()] << std::endl;
}

প্রারম্ভকালের তালিকায় ব্যবহৃত প্রথম বন্ধকের কারণে ভেক্টরের আকার আসলে 1 টি। কমা অপারেটর সমস্ত নাম বাতিল করে সর্বশেষ নামটি ফিরিয়ে দেবে, তাই ক্রেতা সর্বদা রায় Roy


10

scala

আমি জানি যে আমার ব্যবহারকারীরা সংশয়ী হবেন, তাই আমি একটি প্রমাণ অন্তর্ভুক্ত করেছি যে আমার এলোমেলো সত্যই ন্যায্য!

object DrinkChooser {

  def main(args: Array[String]): Unit = {
    proveRandomness()
    val names = List("John","Jeff","Emma","Steve","Julie")
    val buyer = names(randomChoice(names.size))
    println(s"$buyer will buy the drinks this time!")
  }

  def proveRandomness(): Unit = {
    val trials = 10000
    val n = 4
    val choices = for (_ <- 1 to 10000) yield randomChoice(n)
    (choices groupBy(identity)).toList.sortBy(_._1) foreach { case (a, x) =>
      println(a + " chosen " + (x.size * 100.0 / trials) + "%")
    }
  }

  def randomChoice(n: Int): Int = {
    var x = 1
    for (i <- 1 to 1000) { // don't trust random, add in more randomness!
      x = (x * randomInt(1, n)) % (n + 1)
    }
    x
  }

  // random int between min and max inclusive
  def randomInt(min: Int, max: Int) = {
    new scala.util.Random().nextInt(max - min + 1) + min
  }

}

একটি উদাহরণ চালান:

1 chosen 25.31%
2 chosen 24.46%
3 chosen 24.83%
4 chosen 25.4%
John will buy the drinks this time!

অন্য কেউ চূড়ান্ত ভাগ্যবান না হলে জন সর্বদা পানীয়গুলি কিনে রাখবেন।

এলোমেলোতার "প্রমাণ" নির্ভর করে যে rand(1, 4) * rand(1, 4) % 5এখনও সমানভাবে 1 এবং 4 এর মধ্যে সমানভাবে বিতরণ করা হয়। কিন্তু rand(1, 5) * rand(1, 5) % 6অবক্ষয় হয়। আপনার "0" পাওয়ার সম্ভাবনা রয়েছে যা বাকী "এলোমেলোতা" নির্বিশেষে চূড়ান্ত ফলাফলটি 0 করে দেবে।


10

জাভাস্ক্রিপ্ট ( অ্যান্ডস্কোর.জেএস সহ )

যেহেতু জাভাস্ক্রিপ্টে কোনও অন্তর্নির্মিত রূপান্তর নেই, আমরা অ্যান্ডোরসোর.জে ব্যবহার করব

var people = ['John', 'Jeff', 'Emma', 'Steve', 'Julie'];
_.shuffle(people); // Shuffle the people array
console.log("Next round is on", people[0]);

_.স্যাফেল বদলানো অ্যারেটি ফিরিয়ে দেয়, এটি অ্যারে.প্রোটোটাইপ.সোর্ট () হিসাবে জায়গায় পরিবর্তিত হয় না , দুঃখিত জন


9

জাভাস্ক্রিপ্ট

দ্বিতীয়বার চেষ্টা করুন, এটি একটি সামান্য কৌশলযুক্ত:

var getRandomEntry = function(args){
    return args[Math.floor(Math.random() * arguments.length)]; 
}

alert(getRandomEntry(["peter","julie","samantha","eddie","mark"]));

argumentsপরিবর্তনশীল কাজকর্মের জন্য স্থানীয়ভাবে প্রবেশযোগ্য এবং সব আর্গুমেন্ট ফাংশন গৃহীত একটি অ্যারে। সাধারণ নামকরণ ব্যবহার করে এবং ফাংশনে নিজেই একটি অ্যারে পেরিয়ে, আপনি ছলছল করতে পারেন যে আমরা অ্যারের দৈর্ঘ্য নিচ্ছি না, তবে আসলে আর্গুমেন্ট তালিকার দৈর্ঘ্য (যা 1)। এটি বিশেষ চর বা ফন্টের ধরণ ব্যবহার করে আরও কার্যকর করা যেতে পারে।


এটি খুঁজে পাওয়া সবচেয়ে কঠিন ছিল না। যে কেউ Nজাভাস্ক্রিপ্টে একটি স্বেচ্ছাচারিতা -ফাংশন নির্মাণ করেছেন argumentsভেরিয়েবল সম্পর্কে জানেন ।
কনর ও'ব্রায়ান

8

সি ++

সুষ্ঠু হওয়ার জন্য আমাদের অনেকগুলি, অনেকগুলি ট্রায়াল চালানো উচিত এবং যাকে সবচেয়ে বেশিবার নির্বাচিত করা উচিত তা বেছে নেওয়া উচিত।

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <map>

static const char *names[] = { "John", "Jeff", "Emma", "Steve", "Julie" };

int main() {
    srand(time(NULL));
    std::map<int, int> counts;

    // run 2^31 trials to ensure we eliminate any biases in rand()
    for (int i = 0; i < (1<<31); i++) {
        counts[rand() % (sizeof(names)/sizeof(*names))]++;
    }

    // pick the winner by whomever has the most random votes
    int winner = 0;
    for (std::map<int, int>::const_iterator iter = counts.begin(); iter != counts.end(); ++iter) {
        if (iter->second > counts[winner]) {
            winner = iter->first;
        }
    }

    printf("%s\n", names[winner % (sizeof(names)/sizeof(*names))]);
}

এর মান কী 1<<31? দুঃখিত, জন


আপনার স্পয়লার প্রশ্নের উত্তর হ'ল ইউবি। যদি তা আরও ভাল হয় বা খারাপ হয় তবে আমি নির্বিঘ্ন।
nwp

@nwp ঠিক আছে, নিশ্চিত, তবে এটি কোথাও ধরে রেখেছে যে ইনটি 32-বিট 2 এর পরিপূরক, এটি এমনকি -৪-বিটের ক্ষেত্রে (জিসিসি সহ) মনে হচ্ছে। যদিও আমি ক্ল্যাংয়ের পরীক্ষা করিনি।
ফ্লফি

না এটি কোথাও ধরে রাখে না যেখানে কোনও ইনটি 32-কিন্তু 2 এর পরিপূরক হয়। 1 << 31 এর মান নির্ধারিত। আপনি যদিও ভাগ্যবান, অপরিজ্ঞাত আচরণটি সংকলকটিকে যা কিছু মনে হয় তা চয়ন করে এবং যেহেতু এটি গতির জন্য তৈরি করা হয় কেবল কোনও কিছুই করার সিদ্ধান্ত নেবে না, যা আপনি চান তা ঘটে।
nwp

@nwp 1<<31 == 0x80000000যাই হোক না কেন, খুব সংজ্ঞা দিয়ে <<এবং 32-বিট 2 এর পরিপূরক দ্বারা, এটি INT_MIN। আপনি সম্ভবত 1<<32যা বা না পারে সম্পর্কে চিন্তা করছেন == 0? (কারণ x86-এ, 1<<32সাধারণত 1 ... এ মূল্যায়ন করে)
ফ্লাফি

@nwp এটি বাস্তবায়ন-সংজ্ঞায়িত। এখন যদি আমরা সি সম্পর্কে কথা বলি, তবে এটি অপরিজ্ঞাত হবে।
স্টুয়ার্ট ওলসেন

7

টি-এসকিউএল (২০০৮+)

SELECT TOP 1 name
FROM
 (VALUES('John'),('Jeff'),('Emma'),('Steve'),('Julie')) tbl(name)
ORDER BY RAND()

ব্যাখ্যা:

এম এস এসকিউএল সার্ভারে RAND()কেবল একবার কার্যকর করা হয় তার জন্য মূল্যায়ন করে। আসল ক্রমটি রেখে প্রতিটি নাম সর্বদা একই সংখ্যা নির্ধারিত হয়। জন প্রথম। জনের পক্ষে চুষে।

প্রস্তাবিত উন্নতি:

টি-এসকিউএল সম্মত শালীন মানের, প্রতি-সারি র্যান্ডম সংখ্যার সাথে উত্পাদন করতে পারে RAND(CHECKSUM(NEWID()))


আমি মনে করি নাভিডের অর্ডার যথেষ্ট হবে (চেকসুম করার দরকার নেই)
জ্যাকব

7

অ্যাপ্লিকেশন Lua

buyer={'John', 'Jeff', 'Emma', 'Steve', 'Julie'}
   -- use clock to set random seed
math.randomseed(os.clock())
   -- pick a random number between 1 and 5
i=math.random(5)
io.write("Today's buyer is ",buyer[i],".\n")

os.clock()সময়সই উদ্দেশ্যে, ভাল আরএনজির জন্য os.time()যা ব্যবহার করা উচিত math.randomseed। দুঃখের বিষয়, জুলি সবসময় কিনে নেয় (কমপক্ষে আমার কম্পিউটারে)।


math.random()কোনও যুক্তি ছাড়াই পরিসীমাটিতে একটি সংখ্যাও দেয় [0,1)। - এটি ধরার জন্য না।
এমনিআইপ

@ এমনিপ: সত্যিই প্রাপ্য! আমি এখন এটি স্থির করেছি।
কাইল কানোজ

6

আইডোমেটিক সি ++ 11

পানীয়গুলি যখন জড়িত থাকে, সর্বশেষ মানগুলি এবং কোডিং শৈলীর সাথে আপ টু ডেট হওয়া বিশেষভাবে গুরুত্বপূর্ণ; এটি অত্যন্ত দক্ষ এবং আইডিয়োম-কমপ্লায়েন্ট সি ++ 11 নাম চয়নকারীর একটি দুর্দান্ত উদাহরণ।

এটি সিস্টেম ঘড়ি থেকে বীজযুক্ত হয় এবং প্রতিবার যাচাইকরণের জন্য নামের সাথে বীজকে আউটপুট দেয়।

#include <vector>
#include <chrono>
#include <random>
#include <iostream>

auto main()->int {
  std::vector<std::string> names;           // storage for the names
  names.reserve(5);                         // always reserve ahead, for top performance
  names.emplace_back("John");               // emplace instead of push to avoid copies
  names.emplace_back("Jeff");
  names.emplace_back("Emma");
  names.emplace_back("Steve");
  names.emplace_back("Julie");

  std::mt19937_64 engine;                   // make sure we use a high quality RNG engine
  auto seed((engine, std::chrono::system_clock::now().time_since_epoch().count()));  // seed from clock
  std::uniform_int_distribution<unsigned> dist(0, names.size() - 1);     // distribute linearly
  auto number(dist(engine));                // pick a number corresponding to a name
  std::string name(names.at(number));       // look up the name by number
  std::cout << "Seed: " << seed << ", name: " << name << std::endl;  // output the name & seed
  return EXIT_SUCCESS;                      // don't forget to exit politely
}

এটি সরাসরি চেষ্টা করুন: http://ideone.com/KOet5H

ঠিক আছে সুতরাং এটি আসলে সামগ্রিকভাবে বেশ ভাল কোড; স্পষ্টভাবে লক্ষ্য করার জন্য কোডটিতে আপনার খুব বেশি ঘনিষ্ঠভাবে নজরদারি করার জন্য প্রচুর লাল হেরিংস রয়েছে - যে আরএনজি আসলে কখনই বীজযুক্ত হয় না: এই ক্ষেত্রে seedকেবল একটি পূর্ণসংখ্যা হয় এবং দেখায় যে engineএটি একটি পরামিতি হিসাবে পাস হয়েছে বীজ ফাংশন, এটি আসলে ঠিক উপেক্ষা করা হয়। বীজের পরিবর্তনশীলটি সত্যই ঘড়ি থেকে সেট করা থাকে, তাই আঘাতের সাথে অপমান করার জন্য এটি নামের সাথে শেষ পর্যন্ত আউটপুট হতে পারে, তবে এটি এখনও সর্বদা স্টিভই হবে যা পানীয়গুলি কিনে।


1
এটি আমাকে হত্যা করে যে এটি নামের জন্য কোনও প্রাথমিক তালিকা ব্যবহার করে না। খুব কমপক্ষে, আপনি অবশ্যই এমন কোড সরবরাহ করতে সফল হয়েছেন যা কেবলমাত্র ইঞ্জিনিয়ারিং মনে করে । আমি এটি বলতে পারি না এটি "সম্মতি" বা সমস্ত গোলমাল মন্তব্যগুলির কারণে: P
vmrob

6

জাভাস্ক্রিপ্ট

console.log(["Jeff", "Emma", "Steve", "Julie"][Math.floor(Math.random(5))]);

ঠিক আছে, দুঃখিত, Math.randomএকটি প্যারামিটার নেয় না এবং সর্বদা [0, 1) থেকে একটি নম্বর ফেরত দেবে। তবুও, এটি একটি সুখী বৈচিত্র্যময় ফাংশন এবং যুক্তি সম্পর্কে অভিযোগ করে না!


5

পাইথন

names=["John", "Jeff", "Emma", "Steve", "Julie"]
import random # Import random module
random.seed(str(random)) # Choose strictly random seed
print(random.choice(names)) # Print random choice

str (এলোমেলো) একটি ধ্রুব স্ট্রিং দেয়; একটি এলোমেলো মান নয়


6
কিছুটা অপ্রাসঙ্গিক নোট: আপনি যদি পাইথন ৩.২ বা তার বেশি ব্যবহার করেন তবে দ্বিতীয় যুক্তিটি random.seed()অবশ্যই 2(ডিফল্ট) হওয়া উচিত । আপনি যদি পাস version=1করেন hash()তবে স্ট্রিংটির পুরো স্ট্রিংয়ের পরিবর্তে বীজ হিসাবে ব্যবহৃত হবে এবং পাইথন এলোমেলোভাবে স্ট্রিংয়ের হ্যাশ মানগুলি ৩.২ থেকে শুরু করে, আপনি একটি আসল-এলোমেলো নাম পাবেন।
ব্ল্যাকলাইট শাইনিং

5

পার্ল

এমা তার পার্স ভুলে যাওয়ার চেয়ে ভাল ছিল! অধীনে চালায় strictএবং warnings

use strict;
use warnings;

# Use a hash to store names since they're more extendible

my %people;
$people{$_}++ for qw/John Jeff Emma Steve Julie/;

print +(@_=%people)[rand@_];  # 'cos (keys %people)[rand( keys %people )]
                              # is just too long-winded.

এখানে ব্যাখ্যা ।


পার্ল 5.18 হ্যাশ কী র্যান্ডমাইজেশন (হ্যাশের সংঘর্ষ জটিলতার আক্রমণ এড়াতে) প্রবর্তন করে এটি কিছুটা পরিবর্তন করেছে।
কনরাড বোরোস্কি

4

জাভাস্ক্রিপ্ট

function getDrinksBuyer(){ 
    var people = ["Jeff", "Emma", "Steve", "Julie"];
    var rand = Math.random(0,4)|0;
    return people[rand];
}

|0সর্বদা 0 এর ফলাফল কিন্তু দেখে মনে হয় এটি অন্য কোনও গোল করে চলেছে।


আমি এটা পছন্দ করি. যদিও আমি করব parseInt(Math.random(0, 4))এবং সম্ভবত মত মন্তব্যগুলি যুক্ত করব - Math.randomএকটি ডাবল ফেরত দেয়, তাই এটি প্রথমে একটি পূর্ণসংখ্যায় রূপান্তর করুন
ক্লাদিউ

5
কৌতুকটি হ'ল Math.randomআমাদের ক্ষুদ্র পরামিতিগুলির জন্য কিছুই যত্নশীল নয়। এটি সংখ্যাকে তার নিজস্ব উপায়ে পছন্দ করে। The |0সঠিকভাবে অপ্রত্যাশিত ফলাফলের rounding করা হয়, এবং তাই কোনো কপট একটি উৎস নয়।
কীন

|0কিছু (খুব সম্ভবত আমাদের সকলের) কাছে খুব স্পষ্ট, তবে আমি বাজি ধরব যে এমন অনেক কিছুই আছে যাঁর কোনও ধারণা নেই যে এটি কী করে। এই যে গ্রুপটি আমি ট্রিকিংয়ের উপর নির্ভর করছিলাম।
ম্যাট

3
@Matt আমি বলতে চাচ্ছি যে |0আপনি কি এটা জানেন না, দেখায়, মত এটি ডাউন rounding, এবং এটি করা হয় নিচে rounding, তাই এটি একটি প্রতারণা নয়। (এবং যদি কারও কোনও ধারণা না |0থাকে তবে কী করে তা বিভ্রান্তিকর কোডের কোনও ব্যবহার নয়; আপনি যা কিছু বিশ্বাস করতে চান তা কেবল তাদেরই বলতে পারেন)) এর পরিবর্তে, আপনার উত্তরে অপ্রত্যাশিত আচরণটি Math.random(0,4)কার্যকরীভাবে সাদৃশ্যযুক্ত সত্যের উপর ভিত্তি করে Math.random(), কারণ Math.randomপরামিতি ব্যবহার করে না।
কিউন

4

জে

;(?.5) { 'John'; 'Jeff'; 'Emma'; 'Steve'; 'Julie'

দরিদ্র জুলি ... ট্রিভিয়া: এটি সম্ভবত সবচেয়ে পরিষ্কার জে আমি লিখেছি ...

এই কোডটি আসলে একটি জিনিস বাদে সঠিক। ?.এটি ইউনিফর্মটি আরএনজি: ?.5সর্বদা ফিরে আসবে 4 ?5.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.