परिवर्तनीय अनियमित रूप से तीन संख्याओं (10, 100 और 1000) के बीच चुना गया


19

क्या परिवर्तनशील होना संभव है जो तीन पूर्व-निर्धारित संख्याओं में से एक यादृच्छिक संख्या चुनता है?

नमूना:

var= 10 or 100 or 1000

1
मैं UNIX में कार्यक्रम नहीं करता, इसलिए मैं कोड नहीं लिख सकता, लेकिन यहां एक और तरीका है: वैल = लेफ्ट ("1000", लंबाई = 4 के माध्यम से यादृच्छिक 2)। तीन असंबंधित मान रखने के लिए, कोड समान होगा।
Sensii मिलर

जवाबों:


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: जैसा कि लोगों ने टिप्पणियों में देखा है, सरणी तत्वों को व्यक्तिगत रूप से शुरू करने के बजाय एक निश्चित रूप से एक सरणी लिटरल का उपयोग कर सकते हैं x=(10 100 1000):।

नोट 2: सरणी में तत्वों की संख्या को हार्ड-कोडिंग के बजाय, एक रेडोम तत्व द्वारा निकाला जा सकता है ${x[$RANDOM%${#x[@]}]}


5
+1 जबकि zeppelin का उत्तर इस विशेष मामले में चतुर है, सरणी दृष्टिकोण बहुत अधिक सामान्य है।
कामिल मैकियोरोस्की

4
लगता है जैसे x=(10 100 1000)बैश में एक शाब्दिक से एक सरणी बनाता है, यह अधिक पठनीय और अधिक मुहावरेदार होगा
बिल्ली

1
@ कोट: पठनीयता पर राय बदलती है। मैं अलग-अलग लाइनों पर अलग-अलग आइटम डालना पसंद करता हूं, आमतौर पर मूल्य समझाने वाली टिप्पणियों के साथ।
एलेक्सपी

@AlexP ओह, मुझे लगता है कि अगर मुझे लगा कि यह उद्देश्य पर था तो मैं टिप्पणी नहीं करूंगा। उचित पर्याप्त
बिल्ली

1
@ AlexP 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)))

यह var को असाइन करने के लिए


:)। आसान है जब आप इसे देखते हैं, लेकिन मैंने नहीं किया। धन्यवाद!!
एस्पेन लार्सन

20

आप GNU कोरुटिल्स shufउपयोगिता का भी उपयोग कर सकते हैं :

a=$(shuf -n1 -e 10 100 1000)

RANDOMअन्य उत्तरों के अनुसार उपयोग करना लगभग निश्चित रूप से तेज है, हालांकि।


यह सबसे अच्छा जवाब है।
ट्यूलेंस कोरडोवा


5

यहाँ थोड़ा गुप्त तरीका है:

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

यह $varआवश्यकतानुसार यादृच्छिक मान निर्दिष्ट करेगा । printfप्रारूप स्ट्रिंग है 1%0Nd- इस का कारण बनता है 0के साथ मुद्रित करने के लिए Nअग्रणी शून्य है, जहां Nअंतराल में एक यादृच्छिक पूर्णांक हो जाएगा [1,3]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.