MATLAB, 30 बाइट्स
@(a)datasample(repelem(n,n),1)
यह MATLAB R2015A या नए और सांख्यिकी और मशीन लर्निंग टूलबॉक्स स्थापित के साथ मानता है।
repelem
उपयोग कैसे किया जाता है, इसके लिए नीचे दिया गया विवरण देखें । इस छोटे से एक के बीच का अंतर यह है कि एस एंड एमएल टूलबॉक्स में फ़ंक्शन शामिल होता है datasample
जिसका उपयोग यादृच्छिक पर एक समान या एक से अधिक तत्वों को लेने के लिए किया जा सकता है (एक समान संभावना के साथ) जो एक अनाम फ़ंक्शन का उपयोग करने की अनुमति देता है, जिससे अलग हो जाता है। input/disp
कहता है।
MATLAB, 49 बाइट्स
n=input('');a=repelem(n,n);disp(a(randi(nnz(a))))
यह कोड मानता है कि MATLAB R2015a या नए का उपयोग तब किया जाता है जब repelem
फ़ंक्शन शुरू किया गया था। repelem
एक ऐसा फंक्शन है जो दो मापदंडों को लेता है, पहला है रिप्ले किए जाने वाले नंबरों की एक सरणी, और दूसरा एक एरे का एक सरणी है जो संबंधित एलिमेंट को कितनी बार दोहराया जाना चाहिए। अनिवार्य रूप से फ़ंक्शन संख्या और रन-लंबाई प्रदान करके रन-लंबाई डिकोडिंग करता है।
repelem
हम दोनों इनपुटों को एक ही इनपुट प्रदान करके एक एरे के साथ समाप्त होते हैं, जो कि तत्व n की तुलना में n गुणा अधिक होता है। यदि आप प्रदान [1 2 3]
करते हैं तो आपको मिलेगा [1 2 2 3 3 3]
। यदि आप प्रदान [1 2 4 2]
करते हैं तो आपको मिलेगा [1 2 2 4 4 4 4 2 2]
। ऐसा करने का अर्थ है कि यदि हम एक समान संभावना वाले तत्व का चयन करते हैं (समान संभावना के साथ randi(m)
1 से m तक एक यादृच्छिक पूर्णांक देता है), तो प्रत्येक तत्व n में चयनित होने की n उच्च संभावना है। के पहले उदाहरण में [1 2 3]
, 1
1/6 मौका 2
होगा , 2/6 मौका 3
होगा और 3/6 मौका होगा।
साइड नोट के रूप में, क्योंकि repelem
अभी तक ओक्टेव के लिए उपलब्ध नहीं है, मैं एक टीआईओ लिंक नहीं दे सकता। इसके अतिरिक्त, क्योंकि ऑक्टेव का उपयोग नहीं किया जा सकता है क्योंकि इसमें एक बड़ा चरित्र दंड है input()
और disp()
अनाम फ़ंक्शन के रूप में उपयोग किए जाने की आवश्यकता नहीं है। यदि ओक्टेव समर्थित है repelem
, तो निम्नलिखित का उपयोग किया जा सकता है:
@(n)a(randi(nnz(a=repelem(n,n))))
इससे 16 बाइट बच गई होंगी, लेकिन ऐसा नहीं होना था।