पुनरावृत्ति के बिना यादृच्छिक सरणी


16

मैं यहां एक चुनौती का जवाब दे रहा था और यह कार्य चुनौती का हिस्सा था। मुझे जावास्क्रिप्ट में 73 बाइट्स का घोल मिला है। लेकिन मुझे लगता है कि यह एक साधारण चीज के लिए बहुत ज्यादा है।

चुनौती

इनपुट के रूप में दो पूर्णांक दिए गए हैं:

  • N अपेक्षित सरणी की लंबाई
  • Rअंतराल की सीमा एक में शुरू होती है: 1..Rनहीं0..R-1

आपके प्रोग्राम के प्रत्येक रन में आउटपुट / फ़ंक्शन की लंबाई के Nसाथ एक अलग प्रकार के बीच मान 1..Rइस तरह से होता है कि कोई भी मान एक से अधिक बार नहीं होता है।

आपको R-valueअपने कोड में उपयोग करना होगा ।

प्रतिबंध

आप मान सकते हैं 2 <= N <= R:।

मैं वास्तव में मेरा 73 बाइट्स की तुलना में एक जावास्क्रिप्ट समाधान को देखना चाहता हूं।

लेकिन निश्चित रूप से, यह सभी भाषाओं के लिए खुला है!

यदि आपकी भाषा एक सरणी नहीं लौटा सकती है, तो आप सभी संख्याओं को प्रिंट कर सकते हैं;)


2
एक और बात: मुझे नहीं लगता कि आप चाहते हैं कि वे हर रन के साथ अलग हों, लेकिन सिर्फ एकरूप यादृच्छिक? (अन्यथा यह काम नहीं करेगा R=N=1) तो मैं पर्वतमाला की अनुमति देने की सलाह देता हूं0..R एक विकल्प के रूप को क्योंकि यह कई भाषाओं में अधिक स्वाभाविक है।
दोष

मैं सिफारिश करूंगा कि प्रत्येक क्रमपरिवर्तन समान रूप से होने की संभावना है (पूर्ण यादृच्छिकता मानकर), अन्यथा मैं कर सकता हूंshuffle(0..N)
नाथन मेरिल

आपके नियम में बदलाव करने से पहले मैंने गैर-समान यादृच्छिक गुणवत्ता के बारे में अपना जवाब पोस्ट किया।
कॉनर ओ'ब्रायन

1
आप समान रूप से यादृच्छिक समाधान कहते हैं, लेकिन new Dateगैर-समान मान प्राप्त करते हैं। इसके अलावा, मेरा मानना ​​है कि आप इसे गोल्फ कर सकते हैं new Date%r+1;)
कॉनर ओ'ब्रायन

क्या आउटपुट ऐरे को पूर्णांक होना चाहिए? स्पष्ट लगता है, लेकिन मुझे यह स्पष्ट रूप से नहीं कहा गया है
चार्ली व्यान

जवाबों:


16

दिल्लोग एपीएल, 1 बाइट

?

सिर्फ एक बिलिन। इसे यहाँ आज़माएँ ।


3
इस तरह एक जवाब के साथ, मैं देखने के लिए अगर आप ओपी थे वापस ऊपर स्क्रॉल करने के लिए किया था
lbstr

2
@lbstr अब जब आप इसका उल्लेख करते हैं, तो मेरा पहचान पत्र ओपी के समान है।
lirtosiast

9

जावास्क्रिप्ट (ईएस 6), 68 66 बाइट्स

n=>r=>G=(s=new Set)=>s.size<n?G(s.add(Math.random()*r+1|0)):[...s]

कहा जाता है F(N)(R)(), जहां Fफ़ंक्शन असाइनमेंट है, और N/ Rमान हैं।

आपने Js में 73 बाइट्स से कम समय मांगा;)

संपादित करें: @ C5H8NNaO4 द्वारा उत्तर इस तथ्य के भीतर काम करता है कि नियम निर्दिष्ट नहीं करते हैं कि मूल्यों को एक समान होना चाहिए 1..R। यह देखते हुए, यहाँ 63 बाइट्स में एक संस्करण काम करता है (जैसा कि कहा जाता है F(R)(N)):

r=>G=(n,s=[])=>n--?G((s[n]=n+1,n),s):s.sort(a=>new Date/a%1-.5)

यार, यह प्रभावशाली है !! +1
हटा दिया गया

@WashingtonGuedes धन्यवाद =) बस एक और 2 बाइट्स मुंडा।
Mwr247

7

ऑक्टेव, 22 19 9 बाइट्स

@randperm

randperm(r,n)जो अनुरोध किया जाता है, वही करता है। ध्यान दें कि यह मतलाब में (कम से कम पुराने संस्करणों में नहीं) काम नहीं करता है।


1
@(n,r)randperm(r,n)
लुइस मेन्डो

1
randpermदो इनपुट के साथ हाल ही में Matlab संस्करणों में काम करता है। वहाँ भी है randsample, लेकिन यह अधिक बाइट्स लेता है, जब तक आप छुटकारा नहीं पा सकते हैं @(...)(मुझे लगता है कि इसकी अनुमति है)
लुइस मेंडो

ओह मैं उपयोग कर सकते हैं @randperm=)
दोष

5

TI-84 बेसिक OS 4.0, 12 बाइट्स

Prompt N,R:randIntNoRep(1,R,N

TI-84 + CSE (2013) और CE (2015) अनिवार्य रूप से TI-84 + के रूप में एक ही सीमित BASIC बोली है, लेकिन कुछ नई सुविधाएँ हैं। उनमें से एक randIntNoRep का तीसरा तर्क है।


1
सच कहूं, तो यह मूर्खतापूर्ण है कि उन्होंने शुरुआत से ही उस सुविधा को शामिल नहीं किया।
सुपरजेडी २२४

मैंने तुरंत टीआई-बेसिक सोचा जब मैंने इस चुनौती को देखा :)
टाइमटेक

5

MATL , 2 बाइट्स

Zr

इनपुट्स हैं: पहले R, फिर N

इसे ऑनलाइन आज़माएं!

व्याख्या

फ़ंक्शन Zrदो इनपुट लेता है (इस मामले में स्पष्ट रूप से) और प्रतिस्थापन के बिना एक यादृच्छिक नमूना करता है। पहला इनपुट, Rनिर्दिष्ट करता है कि जनसंख्या है [1,2,...,R]; और दूसरा इनपुट, Nजनसंख्या से लेने के लिए नमूनों की संख्या को इंगित करता है।


4

जे, 4 3 बाइट्स

एक बाइट ने जर्गब को धन्यवाद दिया! ( चार को पार किया अभी भी एक नियमित चार है: डी )

1+?

जैसे बुलाओ N (1+?) R , जैसे 3 (1+?) 10। यह "रोल" ऑपरेटर का उपयोग करता है, और वास्तव में जो वर्णित है, उसे छोड़कर करता है 0...n-1। यदि हमें ऐसा करने की अनुमति दी गई, तो उत्तर 1 बाइट होगा,

?


@ टाक आह, गेटका
कॉनर ओ'ब्रायन

4

अजगर, 6 बाइट्स

<.SSQE

यहाँ यह कोशिश करो!

रेंज पहली लाइन पर आती है और दूसरी पर लंबाई।

व्याख्या

<.SSQE # Q = रेंज, E = लंबाई

   SQ # रेंज 1 उत्पन्न करता है ... Q
 .S # सूची में फेरबदल करें
<E # पहले E तत्वों को लेते हैं

गैर-प्रतिस्पर्धी 5-बाइट संस्करण

Qयदि आवश्यक हो तो कार्यक्रम के अंत में Pyth का सबसे अंतिम जोड़ निहितार्थ जोड़ता है । हम इसका उपयोग इनपुट प्रारूप को उल्टा करके कर सकते हैं, इसलिए लंबाई पहले और फिर सीमा तक आती है।

<.SSE

यहाँ यह कोशिश करो!

यहां Eवह सीमा है, जिसे हम 1-आधारित सूची में बदल देते हैं S, इसके साथ फेरबदल करते .Sहैं और पहले Qतत्वों को साथ ले जाते हैं <<एक पूर्णांक की अपेक्षा करता है, जिसे एक के साथ जोड़ा जाता है Q


4

रेंग v.2.1, 140 103 98 97 बाइट्स

यह पहले के संस्करणों में भी काम करना चाहिए।

v      v      $/$'l#y0#z>(:)):(ez+#z zt>a$;!
>i#ci#x>cu1+lxetv    j21\!q   yy#-1y($/^
>n?~v
^oW <

आप इसे यहाँ आज़मा सकते हैं! इनपुट है maximum length, जैसे 10 3

मुझे इस पर गर्व है, आप भी नहीं जानते। अगर कोई मुझे जावा उत्तर देता है, तो वह मेरा दिन बना देगा। यदि मैं एक जावा उत्तर को हराता हूं, तो मेरे दिन को भी मानो।

एक बार ठीक होने के बाद मैं इसे और समझाऊंगा। आम तौर पर, हालांकि:

v         v      $/$r$
>i#bbi1+#x>:u1+lxet

यह यादृच्छिक संख्या उत्पन्न करता है। अन्य भाग यह जाँचते हैं कि क्या डुप्लिकेट हैं, और, यदि वहाँ हैं, तो प्रक्रिया दोहराई जाती है। एल्स, परिणाम मुद्रित होते हैं, रिक्तियों के साथ परिणाम शामिल होते हैं।

यहाँ कुछ उदाहरण हैं:

लंबा जिफ


3

CJam, 8 बाइट्स

{,:)mr<}

यहाँ यह कोशिश करो!

यह एक अनाम ब्लॉक है जो स्टैक के शीर्ष पर सीमा और नीचे की लंबाई की अपेक्षा करता है और स्टैक पर एक सूची छोड़ता है।

व्याख्या

, ई # 0-आधारित सीमा
:) ई # सूची के प्रत्येक तत्व को इंक्रीमेंट करता है इसलिए इसका 1-आधारित
mr e # सूची में फेरबदल करें
<e # पहले n तत्वों को लें

यह एक खुशहाल कार्यक्रम है :)
कॉनर ओ'ब्रायन

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ मैं अगर CJam 1 आधारित श्रेणियों के लिए अंतर्निहित था खुश होगा, इसलिए मैं इस डैम smileyface की जरूरत नहीं होगी: पी
Denker

2

आम लिस्प, 90

केवल अभिव्यक्ति के लिए 52

(use-package :alexandria)(lambda(R N)(coerce(subseq(shuffle(iota R :start 1))0 N)'vector))

Ungolfed

;; Well known library
(use-package :alexandria)

(lambda(R N)
  (coerce                   ; make a vector from a list 
    (subseq                 ; take the sublist from 0 to N
      (shuffle              ; shuffle a list
        (iota R :start 1))  ; build a list from 1 to R
    0 N)
    'vector))

अन्य उत्तरों की तरह, अगर मेरी गिनती नहीं है उपयोग-पैकेज और लैम्ब्डा की शेष अभिव्यक्ति (coerce(subseq(shuffle(iota R :start 1))0 N)'vector)52 बाइट्स के लिए है।


2

रूबी, 27 23 बाइट्स

अनाम फ़ंक्शन, यथोचित रूप से छोटा और मीठा।

-4 बाइट्स @manatwork से

->n,r{[*1..r].sample n}

->n,r{[*1..r].sample n}कृपया इनलाइन कोड मार्कअप के बजाय कोड ब्लॉक मार्कअप का उपयोग करें, इसलिए कोड गोल्फ यूजरस्क्रिप्ट एन्हांसमेंट पैक जैसी स्क्रिप्ट इसके द्वारा कोड आकार डाल सकते हैं।
मैनेटवर्क

सब ठीक है, यह अब तय हो गया है।
मूल्य इंक


2

बैश + कोरुटिल्स, 16

मुझे लगता है कि यह स्व-व्याख्यात्मक है:

seq $2|shuf -n$1

इनपुट Nऔर Rकमांड-लाइन मापदंडों के रूप में।

या जैसा @rici बताते हैं, उसी स्कोर के लिए:

shuf -n$1 -i1-$2

Ideone।


1
या shuf -n$1 -i1-$2(एक ही लंबाई, हालांकि)।
रिची

@rici बहुत अच्छी। बहुत साफ :)
डिजिटल ट्रामा

1

PowerShell v2 +, 30 बाइट्स

param($n,$r)1..$r|Random -c $n

इनपुट लेता है $nऔर $r, एक सीमा का निर्माण करता है 1..$r, जो कि Get-Randomएक -Count से पाइप करता है $n, जो $nरेंज से अद्वितीय तत्वों का चयन करेगा । आउटपुट को एक निहित सरणी के रूप में पाइपलाइन पर छोड़ दिया जाता है।



1

क्लोजर, 38 बाइट्स

#(take %1(shuffle(map inc(range %2))))

एक अनाम फ़ंक्शन N पहला और R दूसरा ले रहा है।



1

पायथन 3.5 - 54 53 बाइट्स:

from random import*;lambda a,c:sample(range(1,c+1),a)

यह sample()लंबाई के साथ एक सरणी को वापस करने के लिए यादृच्छिक मॉड्यूल के फ़ंक्शन का उपयोग करता है "रेंज में यादृच्छिक, अद्वितीय तत्वों से मिलकर" 1 => c


1

डी, 29 बाइट्स (केवल अभिव्यक्ति)

मान लें कि std.random और std.range को आयात किया गया है और n और r को चर के रूप में परिभाषित किया गया है, इस कार्यक्रम को एकल अभिव्यक्ति में हल किया जा सकता है:

iota(1,r).randomCover.take(n)

1

ईएस 6, 72

r=>n=>[...Array(-~r).keys()].sort(a=>new Date/a%1-.5).filter(a=>a&&n-->0)

में @ Mwr247 की तरह जवाब है, तो आप इसके साथ कॉल कर सकते हैं F(R)(N), Fसमारोह अभिव्यक्ति जा रहा है


0

मथकड, 67 "बाइट्स"

श्रेणी 1 में लगातार पूर्णांक का एक स्तंभ वेक्टर बनाता है। यह लंबाई के आर वेक्टर (समान) यादृच्छिक संख्या के कॉलम वेक्टर में शामिल होता है, यादृच्छिक संख्या स्तंभ पर परिणामी Rx2 मैट्रिक्स को टाइप करता है, और फिर पहले n संख्याओं को अर्क से निकालता है। पूर्णांकों का यादृच्छिक कॉलम।

यहाँ छवि विवरण दर्ज करें


क्या कोई ऐसी जगह है जहाँ हम इसका परीक्षण कर सकते हैं?
कॉनर ओ'ब्रायन

आप Mathcad 15 और Mathcad Prime 3.1 (Mathcad 15 के उत्तराधिकारी) के परीक्षण संस्करण डाउनलोड कर सकते हैं। दोनों परीक्षण 30 दिनों के लिए चलते हैं, जिसके बाद M15 काम करना बंद कर देता है, लेकिन प्रधानमंत्री 3.1 अभी भी चलता है, भले ही कम कार्यक्षमता के साथ चलता है (उदाहरण के लिए, कोई प्रोग्रामिंग नहीं - इसलिए ऊपर काम नहीं करेगा ... लेकिन रेंज चर का उपयोग करने के लिए लूप को फिर से लिखा जा सकता है। वृद्धि कथन के बाहर v बनाने के लिए)
स्टुअर्ट ब्रुफ़

परीक्षण संस्करण इस प्रकार हैं: Matcad 15 - ptc.com/engineering-math-software/mathcad/free-srial ; मठकाड
स्टुअर्ट ब्रुफ़

और आप इन बाइट्स को कैसे गिनते हैं?
R

एक उपयोगकर्ता इनपुट के नजरिए से इसे देखकर और एक चरित्र के लिए एक Mathcad इनपुट ऑपरेशन (कीबोर्ड आमतौर पर, माउस-क्लिक पर अगर कोई kbd शॉर्टकट नहीं है) और इसे बाइट के रूप में व्याख्या करना। CSort = 5 बाइट्स के रूप में यह चार-चार-चार के रूप में टाइप किया गया है क्योंकि अन्य चर / फ़ंक्शन नाम हैं। ऑपरेटर के लिए एक विशेष निर्माण है जो 11 पात्रों (3 रिक्त "प्लेसहोल्डर्स और 3 रिक्त स्थान सहित) पर कब्जा करता है, लेकिन ctl-shft- # द्वारा दर्ज किया जाता है, इसलिए = 1 बाइट (कुछ भाषाओं में टोकन के समान)। टाइपिंग '(उद्धरण) संतुलित कोष्ठक (आमतौर पर) बनाता है इसलिए 1 बाइट के रूप में गिना जाता है। अनुक्रमण v = 3 बाइट्स (प्रकार v [k)।
स्टुअर्ट ब्रुफ़

0

पायथन, 56 (स्पष्ट तरीका)

lambda N,R:__import__('random').sample(range(1,R+1),k=N)

from random import*;lambda N,R:sample(range(1,R+1),k=N)एक बाइट से छोटा है
Mego

हुह, मैंने विचार किया from random import*, मतगणना खत्म कर दी है।
शुकी

0

पर्ल 5, 51 43 बाइट्स

sub{@a=1..pop;map{splice@a,rand@a,1}1..pop}

बहुत ही सीधा-सादा अनाम उप जो 1 से R तक एक सरणी उत्पन्न करता है और फिर इसे वापस करने के लिए इसमें से N यादृच्छिक तत्वों को निकालता है। के साथ बुलाओ ->(N, R)


0

TI-84 बुनियादी, 21 बाइट्स

Prompt R,N:randIntNoRep(1,R→A:N→dim(ʟA:ʟA

कोई भी Ansहाल ही में मेटा पोस्ट के अनुसार इनपुट के रूप में उपयोग नहीं कर सकता है ।
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ ... क्यों नहीं?
SuperJedi224 19

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