পরিবর্তনশীল এলোমেলোভাবে তিনটি সংখ্যার (10, 100 এবং 1000) মধ্যে বেছে নেওয়া হয়েছে


19

তিনটি পূর্ব নির্ধারিত নম্বর থেকে এলোমেলো সংখ্যা বেছে নিয়ে এমন পরিবর্তনীয় কি পাওয়া সম্ভব?

নমুনা:

var= 10 or 100 or 1000

1
আমি ইউএনআইএক্স-তে প্রোগ্রাম করি না, তাই আমি কোডটি লিখতে পারি না, তবে এখানে আরও একটি পদ্ধতি রয়েছে: ভাল = বাম ("1000", দৈর্ঘ্য = 2 থেকে 4)। তিনটি সম্পর্কযুক্ত মান থাকতে কোডটি একই রকম হবে।
সেনসিই মিলার

উত্তর:


31

মানগুলি ধরে রাখতে এবং বিল্ট-ইন ভেরিয়েবলটি ব্যবহার করে তাদের মধ্যে চয়ন করতে একটি অ্যারের ব্যবহার করুন $RANDOM। উদাহরণ স্বরূপ,

x[0]=10     # One decade
x[1]=100    # One century
x[2]=1000   # One millennium

for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10

এলোমেলো মানের গুণ সবচেয়ে ভাল সম্ভব হবে না (এর /dev/urandomজন্য বাইট পড়ুন ), তবে এটি কোনও স্ক্রিপ্টের জন্য যথেষ্ট ভাল হওয়া উচিত।

উল্লেখ্য 1: মানুষ পরিবর্তে পৃথকভাবে এক করতে পারেন অ্যারের উপাদান আরম্ভের অবশ্যই একটি অ্যারের litteral ব্যবহার মন্তব্যের পরিলক্ষিত হয়েছে হিসাবে,: x=(10 100 1000)

দ্রষ্টব্য 2: অ্যারেতে উপাদানগুলির সংখ্যা হার্ড-কোডিংয়ের পরিবর্তে একটি রড উপাদান দ্বারা বের করা যেতে পারে ${x[$RANDOM%${#x[@]}]}


5
+1 যদিও জ্যাপেলিনের উত্তর এই বিশেষ ক্ষেত্রে চতুর, অ্যারের পদ্ধতির বিষয়টি আরও সাধারণ।
কামিল ম্যাকিয়েরোভস্কি

4
দেখে মনে হচ্ছে বাশে x=(10 100 1000)আক্ষরিক থেকে একটি অ্যারে তৈরি করা হয়েছে, এটি আরও বেশি পঠনযোগ্য এবং আরও মূio় হবে
বিড়াল

1
@ কেট: পঠনযোগ্যতার বিষয়ে মতামত আলাদা হয়। আমি পৃথক আইটেমগুলিকে পৃথক লাইনে রাখতে চাই, সাধারণত পিছনের মন্তব্যগুলির সাথে মানটি ব্যাখ্যা করে।
অ্যালেক্সপ

@ অ্যালেক্সপি ওহ, আমি মনে করি যদি আমি মনে করি এটি উদ্দেশ্যমূলক ছিল তবে আমি মন্তব্য করব না। যথেষ্ট ফর্সা যদিও
বিড়াল

1
@ অ্যালেক্সপি x[0]=10 # This sets the first value of x to ten. Ten is the number of fingers that humans have (excepting birth defects or mutilation). It is also the sum of 9 and 1, or product of 5 and 2. Ten is not prime. A traditional Christmas gift is ten lords a-leaping.এরকম কিছু?
নিক টি

30

আপনি যদি ব্যাশ ব্যবহার করছেন (বা zsh বা ksh93 ) আপনি ঠিক করতে পারেন:

echo "$((10**($RANDOM%3+1)))"

অথবা

var=$((10**($RANDOM%3+1)))

এটি ভারে বরাদ্দ করা


:)। আপনি যখন এটি দেখতে সহজ, কিন্তু আমি না। ধন্যবাদ !!
এস্পেন লারসেন



5

এখানে কিছুটা রহস্যজনক উপায়:

printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0

এটি $varপ্রয়োজনীয় হিসাবে এলোমেলো মান নির্ধারণ করবে । printfবিন্যাস স্ট্রিং 1%0Nd- এই ঘটায় 0সঙ্গে ছাপা হবে Nনেতৃস্থানীয় শূণ্যসমূহ, যেখানে Nব্যবধান একটি র্যান্ডম পূর্ণসংখ্যা হতে হবে [1,3]

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