বাশ স্ক্রিপ্টের একটি ব্যাপ্তি থেকে এলোমেলো নম্বর


195

2000-65000শেল স্ক্রিপ্ট থেকে আমার মধ্যে একটি এলোমেলো পোর্ট নম্বর উত্পন্ন করা দরকার । সমস্যাটি $RANDOMএকটি 15-বিট সংখ্যা, তাই আমি আটকে আছি!

PORT=$(($RANDOM%63000+2001)) এটি আকার সীমাবদ্ধতার জন্য না হলে দুর্দান্তভাবে কাজ করবে।

আমি কীভাবে এটি করতে পারি তার উদাহরণ কারও কাছে রয়েছে, সম্ভবত এ থেকে কিছু বের করে /dev/urandomএবং এটি একটি ব্যাপ্তির মধ্যে পেয়ে?

উত্তর:


397
shuf -i 2000-65000 -n 1

উপভোগ করুন!

সম্পাদনা করুন : পরিসীমা অন্তর্ভুক্ত।


7
আমি মনে করি shufতুলনামূলকভাবে সাম্প্রতিক - আমি গত কয়েক বছরে এটি উবুন্টু সিস্টেমে দেখেছি কিন্তু বর্তমান আরএইচইএল / সেন্টোসগুলিতে নয়।
ক্যাসাবেল

5
এছাড়াও, সম্ভবত এই ব্যবহারের জন্য এটি ঠিক আছে, তবে আমি বিশ্বাস করি shufআসলে পুরো ইনপুটটিকে অনুমতি দেয় না। আপনি যদি খুব ঘন ঘন এলোমেলো সংখ্যা তৈরি করে থাকেন এটি এটি একটি খারাপ পছন্দ করে।
ক্যাসাবেল

3
@Jefromi: আমার সিস্টেমে, এই পরীক্ষাটি ব্যবহার time for i in {1..1000}; do shuf -i 0-$end -n 1000 > /dev/null; doneএবং তুলনা end=1করতে end=65535খাটো পরিসীমা যা একটি মিলিয়ন পুনরাবৃত্তিও সেকেন্ডের বেশি সময় ধরে পার্থক্য 4 সম্পর্কে যাও amounted জন্য 25% উন্নতি দেখিয়েছেন। এবং এটি এক মিলিয়ন বার ওপির বাশ গণনা সম্পাদনের চেয়ে অনেক দ্রুত।
পরবর্তী বিজ্ঞপ্তি না হওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

8
@ ডেনিস উইলিয়ামসন: আপনার পরীক্ষাটি চালিয়ে যাওয়া -n 1ন্যূনতম সময়ের পার্থক্য দেখিয়েছে, এমনকি end=4000000000shufস্মার্ট কাজ করে জানা ভাল , কঠিন নয় :-)
leedm777

6
আমি আমার ম্যাক :( shuf আছে
বীরেন

79

ম্যাক ওএস এক্স এবং ফ্রিবিএসডি-তে আপনি জটও ব্যবহার করতে পারেন:

jot -r 1  2000 65000

5
এই উদাহরণস্বরূপ, jotব্যবধানের সর্বনিম্ন এবং সর্বাধিক (যেমন 2000 এবং 65000) এর জন্য অনুপযুক্ত বিতরণ রয়েছে। অন্য কথায়, ন্যূনতম এবং সর্বাধিক কম ঘন ঘন উত্পন্ন হবে। বিশদ এবং কার্যবিবরণের জন্য আমার জট উত্তর দেখুন ।
ক্লিন্ট পাচল

jotবেশিরভাগ জিএনইউ / লিনাক্স
থোর

42

ব্যাশ ম্যান পৃষ্ঠা অনুসারে, $RANDOM 0 এবং 32767 এর মধ্যে বিতরণ করা হয়; এটি, এটি একটি স্বাক্ষরযুক্ত 15-বিট মান value ধরে $RANDOMনেওয়া সমানভাবে বিতরণ করা হয়েছে, আপনি নিম্নরূপে অভিন্ন-বিতরিত স্বাক্ষরযুক্ত 30-বিট পূর্ণসংখ্যার তৈরি করতে পারেন:

$(((RANDOM<<15)|RANDOM))

যেহেতু আপনার পরিসর 2 এর শক্তি নয়, একটি সাধারণ মডুলো অপারেশন আপনাকে প্রায় একটি অভিন্ন বিতরণ দেয় তবে 30-বিট ইনপুট পরিসর এবং 16-বিট-এর চেয়ে কম আউটপুট পরিসীমা যেমন আপনার ক্ষেত্রে রয়েছে, এটি সত্যই যথেষ্ট কাছাকাছি হওয়া উচিত:

PORT=$(( ((RANDOM<<15)|RANDOM) % 63001 + 2000 ))

1
ভেরিয়েবল $RANDOMসর্বদা সমস্ত শেলগুলিতে পাওয়া যায় না। আরেকটি সমাধান খুঁজছেন
লুকাশ লিসিস

যদি আমি এটি সঠিকভাবে বুঝতে পারি তবে আপনি 1,000,000,000 এর পরিসরের মধ্যে 32,000 সংখ্যা ছড়িয়ে দিচ্ছেন। তবে তারা কেবল 2 ^ 15 multip এর গুণকে আঘাত করবে আপনি 2 ^ 15 দ্বারা স্কিপ-কাউন্টিং ছাড়বেন, 1 এবং 2 ^ 30 এর মধ্যে সমস্ত অঙ্ক সমানভাবে পূরণ করবেন না, যা অভিন্ন বিতরণ।
isomorphismes

@ আইসোমরফিজমস নোট করুন যে কোডটি $RANDOMদু'বার উল্লেখ করেছে । সমর্থনকারী শেলগুলিতে $RANDOM, প্রতিবার রেফারেন্স হওয়ার সাথে সাথে একটি নতুন মান উত্পন্ন হয়। সুতরাং এই কোডটি একটি $RANDOMমান দিয়ে 0 থেকে 14 পর্যন্ত বিটগুলি পূরণ করে এবং 15-এর মাধ্যমে 29 দিয়ে বিটগুলি পূরণ করে। ধরে $RANDOMনেওয়া অভিন্ন এবং স্বতন্ত্র, এটি কোনও মানা ছাড়াই 0 থেকে 2 ** 30-1 পর্যন্ত সমস্ত মানকে কভার করে।
জেসিন

41

পাইথনের সাথে একটি এখানে

randport=$(python -S -c "import random; print random.randrange(2000,63000)")

এবং একটি অবাস্তব সঙ্গে

awk 'BEGIN{srand();print int(rand()*(63000-2000))+2000 }'

6
এই আমার কাছ থেকে একটি upvote পায়। আমি বিভিন্ন সিস্টেমে বাশ স্ক্রিপ্টগুলি লিখি এবং আমি বিশ্বাস করি যে চাকরিটি সম্ভবত কাজের জন্য সবচেয়ে প্রচুর সরঞ্জাম। কোনও সমস্যা ছাড়াই ম্যাক ওএস এক্স এবং সেন্টোতে কাজ করেছেন এবং আমি জানি এটি আমার ডেবিয়ান মেশিনেও সম্ভবত কাজ করবে এবং সম্ভবত অন্য কোনও সাধারণ-ইশ * নিক্স মেশিন।
জন হান্ট

6
তবে, অ্যাডকের র্যান্ডম বীজটি একবার / সেকেন্ডে রিফ্রেশ মনে হয় যাতে আপনি ক) এড়াতে বা খ) বীজটিকে পুনরায় সূচনা করতে পারেন।
জন হান্ট

+1 কারণ এটি সংকলন ব্যতীত একমাত্র পসিক্স সম্ভাবনা বলে মনে হচ্ছে: RANDOM
পসিক্স

-Sবিকল্প ব্যবহার করে ফলাফল ImportError: No module named random। আমি এটি সরিয়ে দিলে কাজ করে। ঘোস্টডগের উদ্দেশ্য কী তা নিশ্চিত তা নিশ্চিত নয়।
ক্রিস জনসন

1
python -S -c "import random; print random.randrange(2000,63000)"মনে হচ্ছে ঠিক আছে। যাইহোক, আমি যখন 1 এবং 2 এর মধ্যে এলোমেলো নম্বর পাওয়ার চেষ্টা করি তখন আমার মনে হয় সর্বদা 1 ... চিন্তাভাবনা পাওয়া যাবে?
হুবার্ট লভিলি গউভিন

17

সবচেয়ে সাধারণ সাধারণ উপায় যা মনে আসে তা হ'ল পার্ল ওয়ান-লাইনার:

perl -e 'print int(rand(65000-2000)) + 2000'

আপনি সর্বদা দুটি সংখ্যা ব্যবহার করতে পারেন:

PORT=$(($RANDOM + ($RANDOM % 2) * 32768))

আপনাকে এখনও আপনার পরিসীমাতে ক্লিপ করতে হবে। এটি কোনও সাধারণ এন-বিট এলোমেলো সংখ্যা পদ্ধতি নয়, তবে এটি আপনার ক্ষেত্রে কাজ করবে এবং এটি সবই বাশের ভিতরে।

আপনি যদি সত্যিই সুন্দর হতে চান এবং / ডেভ / ইউরানডম থেকে পড়তে চান তবে আপনি এটি করতে পারেন:

od -A n -N 2 -t u2 /dev/urandom

এটি দুটি বাইট পড়বে এবং এটিকে স্বাক্ষরযুক্ত স্বাক্ষর হিসাবে মুদ্রণ করবে; আপনি এখনও আপনার ক্লিপিং করতে হবে।


আমি এই কৌশলটি ব্যবহার করেছি এবং লক্ষ্য করেছি যে এখন আর কোনও সংখ্যা উত্পন্ন হবে না, কেবল ফাঁকা জায়গা।
পিডিসি

এটি পার্ল ইনস্টল করা প্রয়োজন। আমি একটি স্ক্রিপ্ট লিখি যা বেশিরভাগটিতে চলতে হবে যদি সমস্ত লিনাক্স মেশিন না থাকে তবে awkঅন্য উত্তর থেকে সংস্করণটি
আঁকিয়ে রাখে

এলোমেলো সংখ্যার যোগ করা কম বা উচ্চ ব্যয়ে মধ্য ফলাফলের পক্ষে যায়। এটি অভিন্নভাবে এলোমেলো নয়।
isomorphismes

@ আইসোমরফিজমস হ্যাঁ, আপনি যদি আক্ষরিকভাবে কেবল দুটি এলোমেলো সংখ্যা যোগ করেন। তবে ধরে নেওয়া, আপনি এখানে দ্বিতীয় প্রকাশটি উল্লেখ করছেন, এটি এটি করছে না। এটি [0,32767] এ এলোমেলো সংখ্যা এবং পরবর্তী বিটের জন্য একটি স্বতন্ত্র এলোমেলো পছন্দ, যেমন 0 বা 32768। এটি অভিন্ন। (মূল প্রশ্নটির জন্য এটি আদর্শ নয় যদিও যেহেতু আপনাকে পুনরায় রোলিংয়ের সাথে পরিসীমাটি ক্লিপ করতে হবে))
ক্যাসাবেল

7

আপনি যদি কোনও বাশ বিশেষজ্ঞ না হন এবং লিনাক্স-ভিত্তিক ব্যাশ স্ক্রিপ্টে এটি পরিবর্তনশীল হিসাবে সন্ধান করতে চান তবে এটি ব্যবহার করে দেখুন:

VAR=$(shuf -i 200-700 -n 1)

এটি আপনাকে অন্তর্ভুক্ত করে 200 থেকে 700 এর পরিসীমা পাবে $VAR


5

এখানে অন্য একটি। আমি ভেবেছিলাম এটি ঠিক যে কোনও বিষয়ে কাজ করবে, তবে সাজানোর র্যান্ডম বিকল্পটি আমার সেন্টো বাক্সে কর্মস্থলে উপলভ্য নয়।

 seq 2000 65000 | sort -R | head -n 1

3
sort -Rওএস এক্সে পাওয়া যায় না।
ল্রি

5

$RANDOM0 এবং 32767 এর মধ্যে একটি সংখ্যা You আপনি 2000 এবং 65000 এর মধ্যে একটি বন্দর চান These এটি 63001 সম্ভাব্য বন্দর। যদি আমরা 2000 এবং 33500 এর $RANDOM + 2000মধ্যে মানগুলিতে লেগে থাকি তবে আমরা 31501 পোর্টের একটি পরিসর আবরণ করি। যদি আমরা একটি মুদ্রা ফ্লিপ করি এবং শর্তসাপেক্ষে ফলাফলটিতে 31501 যোগ করি, আমরা 33501 থেকে 65001 পর্যন্ত আরও বন্দর পেতে পারি । তারপরে যদি আমরা কেবল 65001 বাদ দিই, তবে সমস্ত বন্দরগুলির জন্য অভিন্ন সম্ভাবনা বন্টন সহ আমরা প্রয়োজনীয় সঠিক কভারেজ পাই get

random-port() {
    while [[ not != found ]]; do
        # 2000..33500
        port=$((RANDOM + 2000))
        while [[ $port -gt 33500 ]]; do
            port=$((RANDOM + 2000))
        done

        # 2000..65001
        [[ $((RANDOM % 2)) = 0 ]] && port=$((port + 31501)) 

        # 2000..65000
        [[ $port = 65001 ]] && continue
        echo $port
        break
    done
}

পরীক্ষামূলক

i=0
while true; do
    i=$((i + 1))
    printf "\rIteration $i..."
    printf "%05d\n" $(random-port) >> ports.txt
done

# Then later we check the distribution
sort ports.txt | uniq -c | sort -r

5

তুমি এটি করতে পারো

cat /dev/urandom|od -N2 -An -i|awk -v f=2000 -v r=65000 '{printf "%i\n", f + r * $1 / 65536}'

আপনার আরও বিশদ প্রয়োজন হলে শেল স্ক্রিপ্ট এলোমেলো নম্বর জেনারেটর দেখুন


প্রায়। এটি আপনাকে 2000 থেকে 67000 পরিসীমা দেয়
ওগ্রে গীতসংহিতা 33


3

বাশ ডকুমেন্টেশন বলছে যে প্রত্যেকবার $RANDOMরেফারেন্স করা হয়, 0 এবং 32767 এর মধ্যে একটি এলোমেলো সংখ্যা ফিরে আসে। যদি আমরা পরপর দুটি রেফারেন্স যোগ করি তবে আমরা 0 থেকে 65534 পর্যন্ত মান পাই যা 2000 এবং 65000 এর মধ্যে একটি এলোমেলো সংখ্যার জন্য 63001 সম্ভাবনার কাঙ্ক্ষিত পরিসীমা জুড়ে।

এটিকে সঠিক পরিসরে সামঞ্জস্য করতে আমরা মডুলো o৩০০১ যোগ করি, যা আমাদের 0 থেকে 63000 এর মধ্যে একটি মান দেয় turn পরিবর্তে 2000 থেকে 65000 এর মধ্যে পছন্দসই র্যান্ডম সংখ্যা সরবরাহ করতে কেবল 2000 দ্বারা একটি বৃদ্ধি প্রয়োজন This এটি হতে পারে নিম্নলিখিত হিসাবে সংক্ষিপ্তসার:

port=$((((RANDOM + RANDOM) % 63001) + 2000))

পরীক্ষামূলক

# Generate random numbers and print the lowest and greatest found
test-random-max-min() {
    max=2000
    min=65000
    for i in {1..10000}; do
        port=$((((RANDOM + RANDOM) % 63001) + 2000))
        echo -en "\r$port"
        [[ "$port" -gt "$max" ]] && max="$port"
        [[ "$port" -lt "$min" ]] && min="$port"
    done
    echo -e "\rMax: $max, min: $min"
}

# Sample output
# Max: 64990, min: 2002
# Max: 65000, min: 2004
# Max: 64970, min: 2000

গণনার সঠিকতা

গণনার নির্ভুলতার জন্য এখানে একটি পূর্ণ, নিষ্ঠুর শক্তি পরীক্ষা করা হচ্ছে। এই প্রোগ্রামটি পরীক্ষার অধীনে গণনাটি ব্যবহার করে এলোমেলোভাবে সমস্ত 63001 বিভিন্ন সম্ভাবনা তৈরি করার চেষ্টা করে। --jobsপরামিতি এটা দ্রুত রান করা উচিত, কিন্তু এটা (উত্পন্ন 63001 চেয়ে কম হতে পারে সম্ভাবনার মোট) নির্ণায়ক নয়।

test-all() {
    start=$(date +%s)
    find_start=$(date +%s)
    total=0; ports=(); i=0
    rm -f ports/ports.* ports.*
    mkdir -p ports
    while [[ "$total" -lt "$2" && "$all_found" != "yes" ]]; do
        port=$((((RANDOM + RANDOM) % 63001) + 2000)); i=$((i+1))
        if [[ -z "${ports[port]}" ]]; then
            ports["$port"]="$port"
            total=$((total + 1))
            if [[ $((total % 1000)) == 0 ]]; then
                echo -en "Elapsed time: $(($(date +%s) - find_start))s \t"
                echo -e "Found: $port \t\t Total: $total\tIteration: $i"
                find_start=$(date +%s)
            fi
        fi
    done
    all_found="yes"
    echo "Job $1 finished after $i iterations in $(($(date +%s) - start))s."
    out="ports.$1.txt"
    [[ "$1" != "0" ]] && out="ports/$out"
    echo "${ports[@]}" > "$out"
}

say-total() {
    generated_ports=$(cat "$@" | tr ' ' '\n' | \sed -E s/'^([0-9]{4})$'/'0\1'/)
    echo "Total generated: $(echo "$generated_ports" | sort | uniq | wc -l)."
}
total-single() { say-total "ports.0.txt"; }
total-jobs() { say-total "ports/"*; }
all_found="no"
[[ "$1" != "--jobs" ]] && test-all 0 63001 && total-single && exit
for i in {1..1000}; do test-all "$i" 40000 & sleep 1; done && wait && total-jobs

p/qসমস্ত 63001 সম্ভাব্য উত্পন্ন হওয়ার সম্ভাব্যতার প্রদত্ত সম্ভাবনা পাওয়ার জন্য কতগুলি পুনরাবৃত্তি প্রয়োজন তা নির্ধারণ করার জন্য, আমি বিশ্বাস করি যে আমরা নীচের প্রকাশটি ব্যবহার করতে পারি। উদাহরণস্বরূপ, এখানে 1/2 এর চেয়ে বেশি সম্ভাবনার জন্য গণনা এবং এখানে 9-10 / 10-রও বেশি

অভিব্যক্তি


1
আপনি ভুল. $RANDOMহয় একটি পূর্ণসংখ্যা । আপনার "কৌতুক" দিয়ে এমন অনেক মান রয়েছে যা কখনই অর্জন করা যায় না। -1
gniourf_gniourf

2
আমি নিশ্চিত না যে আপনি "একটি পূর্ণসংখ্যা" এর অর্থ কী, তবে সঠিক, অ্যালগরিদমটি ভুল ছিল। একটি সীমিত পরিসর থেকে একটি র্যান্ডম মান গুন হবে না পরিসর বৃদ্ধি। $RANDOMপরিবর্তে আমাদের দুটি অ্যাক্সেসের যোগফল প্রয়োজন , এবং $RANDOMপ্রতিটি অ্যাক্সেসের পরিবর্তনের কথা ভাবা হবার কারণে, দুটি সংখ্যার গুণিতক হিসাবে এটি রিফ্যাক্টর না don't উত্তরটি যোগফলটির সাথে আপডেট করেছি।

6
করা RANDOM+RANDOMআপনাকে 0 এবং 65534 এর মধ্যে এলোমেলো সংখ্যার অভিন্ন বিতরণ দেবে না
gniourf_gniourf

3
ঠিক আছে, অন্য কথায় সমস্ত রাশির সমান সম্ভাবনা থাকে না। আসলে, এটি থেকে দূরে, যদি আমরা গ্রাফটি পরীক্ষা করি তবে এটি একটি পিরামিড! আমি মনে করি এই কারণেই আমি উপরের সূত্র দ্বারা প্রত্যাশিত তুলনায় যথেষ্ট বড় গণনার সময় পাচ্ছি। মডিউল অপারেশনেও সমস্যা রয়েছে: বাকি বন্দরগুলির তুলনায় প্রথম 2534 বন্দরগুলির সংখ্যার দ্বিগুণ পরিমাণ 63৩০০১ থেকে (32767 + 32767) দ্বিগুণ হয়। আমি বিকল্পের কথা ভাবছিলাম, তবে আমি মনে করি নতুন উত্তর দিয়ে স্ক্র্যাচ থেকে শুরু করা ভাল, তাই আমি মুছে ফেলার জন্য এটিকে ভোট দিচ্ছি।

4
এটি 2 ছয় পার্শ্বযুক্ত পাশা ঘূর্ণায়মান মত। পরিসংখ্যানগতভাবে এটি আপনাকে একটি ঘন্টার বক্ররেখা দেয়: মাঝখানে "7" পাওয়ার সর্বোচ্চ সম্ভাবনা সহ "2" বা "12" রোল করার কম সম্ভাবনা।
ওগ্রে গীতসংহিতা 33


2

PORT=$(($RANDOM%63000+2001)) আপনি যা চান তা কাছেই আমি মনে করি।

PORT=$(($RANDOM$RANDOM$RANDOM%63000+2001))আপনাকে আকার দেয় এমন আকারের সীমাবদ্ধতার চারপাশে। যেহেতু বাশ একটি সংখ্যা ভেরিয়েবল এবং স্ট্রিং ভেরিয়েবলের মধ্যে কোনও পার্থক্য রাখে না, এটি পুরোপুরি ভালভাবে কাজ করে। "সংখ্যা" $RANDOMস্ট্রিংয়ের মতো সংমিশ্রণ করা যায় এবং তারপরে একটি গণনায় একটি সংখ্যা হিসাবে ব্যবহৃত হয়। অ্যামেজিং!


1
আমি দেখছি আপনি কি বলছেন। আমি সম্মত হই যে বিতরণটি আলাদা হবে, তবে আপনি যেভাবেই বাস্তব এলোমেলোতা পেতে পারেন না। আরও বেশি বিতরণ পেতে কখনও কখনও $ র্যান্ডম, কখনও কখনও $ র্যান্ডম $ র্যান্ডোম এবং কখনও কখনও $ র্যান্ডম $ র্যান্ডম OM র্যান্ডম ব্যবহার করা ভাল to আমি যতদূর বলতে পারি আরও বেশি $ র‌্যান্ডমগুলি উচ্চতর বন্দর সংখ্যাগুলির পক্ষে।
ওয়াস্টারেল

(আমি আমার মূল মন্তব্যটি মুছলাম, কারণ আমি কিছু ভুল সংখ্যাসূচক মান ব্যবহার করেছি এবং মন্তব্যটি সম্পাদনা করতে খুব দেরি হয়েছিল)। ঠিক। x=$(( $n%63000 )প্রায় অনুরূপ x=$(( $n % 65535 )); if [ $x -gt 63000 ]; then x=63000
চিপনার

আমি গণিতের সমালোচনা (বা এমনকি) করতে যাচ্ছিলাম না। আমি কেবল এটি গ্রহণ করেছি। আমি যা বোঝাতে চেয়েছিলাম এটি হল: num = (ND RANDOM $ RANDOM $ RANDOM $ RANDOM $ RANDOM $ RNDOM); বাছাই = $ (($ র্যান্ডম% 3)); পোর্ট = $ (($ {নাম [$ পিক]}% 63000 + 2001)) --- যা অনেকটা ঝামেলার মতো মনে হচ্ছে ...
ওয়াস্টারেল

1

এর মাধ্যমে আপনি এলোমেলো নম্বর পেতে পারেন urandom

head -200 /dev/urandom | cksum

আউটপুট:

3310670062 52870

উপরের সংখ্যাটির একটি অংশ পুনরুদ্ধার করতে।

head -200 /dev/urandom | cksum | cut -f1 -d " "

তারপরে আউটপুট হয়

3310670062

আপনার প্রয়োজন মেটাতে,

head -200 /dev/urandom |cksum | cut -f1 -d " " | awk '{print $1%63000+2001}'


0

আমি সাধারণত এলোমেলো সংখ্যা উত্পন্ন করি। তারপরে আমি পোর্ট নম্বরটি ব্যবহার করি ভেরিয়েবল হিসাবে "NUM_1" ব্যবহার করি। এখানে একটি সংক্ষিপ্ত উদাহরণ স্ক্রিপ্ট।

#!/bin/bash

clear
echo 'Choose how many digits you want for port# (1-5)'
read PORT

NUM_1="$(tr -dc '0-9' </dev/urandom | head -c $PORT)"

echo "$NUM_1"

if [ "$PORT" -gt "5" ]
then
clear
echo -e "\x1b[31m Choose a number between 1 and 5! \x1b[0m"
sleep 3
clear
exit 0
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.