किसी सरणी के स्केल को रैंडमाइज़ करें


14

आपको 0-nसमावेश से प्रत्येक संख्या के साथ एक सरणी भरना होगा । कोई संख्या नहीं दोहरानी चाहिए। हालांकि वे एक यादृच्छिक क्रम में होना चाहिए।

नियम

सभी मानक नियम और मानक कमियां प्रतिबंधित हैं

सरणी को छद्म-यादृच्छिक रूप से उत्पन्न किया जाना चाहिए। हर संभव क्रमचय में एक समान संभावना होनी चाहिए।

इनपुट

n मेटा पर I / O पोस्ट में किसी भी तरह से अनुमति दी गई है।

उत्पादन

0-nसमावेशी से संख्‍या की संख्‍या ।


आउटपुट को न्यूलाइन द्वारा अलग किया जा सकता है?
DrnglVrgs

@ रिले ऑप्स जो खेद व्यक्त करने के लिए था।
क्रिस्टोफर

@DrnglVrgs हां यह कर सकते हैं
क्रिस्टोफर

"संख्याओं" से मेरा मानना ​​है कि आप "पूर्णांक" हैं?
Zacharý

1
@ केविनक्रूजसेन IMO सूची = सरणी लेकिन खोज समर्थन के साथ। इसलिए
क्रिस्टोफर

जवाबों:




8

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

.Sh

प्रदर्शन

.Sफेरबदल है। यह एक इनपुट पूर्णांक nको श्रेणी में निहित करता है [0, 1, ..., n-1]hहै +1, और इनपुट अंतर्निहित रूप से लिया गया है।




5

पायथन 2 , 51 बाइट्स

lambda n:sample(range(n+1),n+1)
from random import*

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

वहाँ है, random.shuffle()लेकिन यह इसे वापस करने के बजाय तर्क को संशोधित करता है ...


आप उपयोग कर सकते हैंrandom.shuffle
caird coinheringaahing

@cairdcoinheringaahing हाँ, लेकिन यह काम नहीं करेगा। उदाहरण के लिए, lambda n:shuffle(range(n+1))कहीं भी आउटपुट नहीं लिखेंगे।
अशुभ






3

जाप , 4 बाइट्स

ò öx

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


    :Implicit input of integer U
ò   :Generate array of 0 to U.
öx  :Generate random permutation of array.
    :Implicit output of result.

öxजब तक मैंने "समावेशी" भाग पर ध्यान नहीं दिया, तब तक यह समझ में नहीं आया। (आप xलगभग कुछ और के साथ बदल सकते हैं , btw)
ETHproductions

@ETHproductions, यही मेरा पहला विचार भी था।
झबरा

3

सी #, 76 बाइट्स

using System.Linq;i=>new int[i+1].Select(x=>i--).OrderBy(x=>Guid.NewGuid());

यह एक IOrderedEnumerable देता है, मुझे आशा है कि यह ठीक है, या फिर मुझे .ToArray () के लिए कुछ और बाइट्स की आवश्यकता होगी।


3

सीजाम , 7 6 बाइट्स

1 बाइट ने एग्री द आउटग्राफर को धन्यवाद दिया ।

{),mr}

यह एक अनाम ब्लॉक (फ़ंक्शन) है जो स्टैक से पूर्णांक लेता है और परिणाम के साथ बदल देता है। इसे ऑनलाइन आज़माएं!

व्याख्या

{     e# Begin block
)     e# Increment: n+1
,     e# Range: [0 1 ... n]
mr    e# Shuffle
}     e# End block

नहीं है {),mr}1 बाइट कम?
द एग्रीकल्चर आउटरीक

@EriktheOutgolfer वास्तव में! धन्यवाद
लुइस मेंडो

3

जावा 8, 114 111 97 बाइट्स

import java.util.*;n->{List l=new Stack();for(;n>=0;l.add(n--));Collections.shuffle(l);return l;}

-3 बाइट्स और बग-फिक्स्ड धन्यवाद @ ओलिवियरग्रेगायर
-4 बाइट्स @ जेकॉब को धन्यवाद ।
-10 बाइट निकालकर .toArray()

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

import java.util.*;        // Required import for List, Stack and Collections
n->{                       // Method with integer parameter and Object-array return-type
  List l=new Stack();      //  Initialize a List
  for(;n>=0;l.add(n--));   //  Loop to fill the list with 0 through `n`
  Collections.shuffle(l);  //  Randomly shuffle the List
  return l;                //  Convert the List to an Object-array and return it
}                          // End of method

1
बग: शामिल नहीं है n। फिक्स और गोल्फ for(n++;--n>=0;l.add(n));:। इसके अलावा, मैं कहता हूं कि आपको एक सरणी वापस करने की आवश्यकता नहीं है। अधिकांश भाषा में सरणी और सूची समान हैं, इसलिए बस सूची वापस करें।
ओलिवियर ग्रेगोइरे

@ OlivierGrégoire Woops .. यही कि आपको ठीक से जाँच नहीं करने और सिर्फ पोस्ट करने के लिए मिलता है .. बग-फिक्स के लिए धन्यवाद (और 4 बाइट्स प्रक्रिया में सहेजे गए)।
केविन क्रूज़सेन

1
खैर, तीन वास्तव में, क्योंकि मैंने फिर से संपादित किया, खुद को एक और बग पेश किया: >होना चाहिए >=
ओलिवियर ग्रेगोइरे

1
-4 बाइट्स: एक के Stackबजाय का उपयोग करें Vectorऔर अपने लूप को बदल दें for(;n>=0;l.add(n--));। और वापसी java.util.Listकरना निश्चित रूप से ठीक है।
जेकब


2

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

.S}0

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


आप 3 बाइट्स में गोल्फ कर सकते हैं। .Sपूर्णांक तर्क के रूप में ही है .SU, और के [0..n]रूप में कोडित किया जा सकता है Uh, तो आप उपयोग कर सकते हैं .SUh, जो तब बन जाता है .Sh
द एग्रीकल्चर आउटरीक

@EriktheOutgolfer संकेत के लिए धन्यवाद, लेकिन जैसा कि किसी ने आप को इस प्रस्ताव का समाधान दिया है कि मैं आपको इस तरह छोड़ दूंगा।
कार्लकास्टर

खैर, यह सीमा रेखा है कि क्या इसका कोई अलग उत्तर होना चाहिए या नहीं, लेकिन मेरा मानना ​​है कि यह एक डुबकी के रूप में गिना जाता है, इसलिए यहां तक ​​कि इसकी अनुमति दी जा रही है, मैं इसे सिर्फ बिलिन प्रतिस्थापन कहूंगा, इसलिए नाह, मैं पोस्ट नहीं करना चाहता था अलग, लेकिन isaacg किया था।
आउटगोल्फ

2

सी, 75 बाइट्स

a[99],z,y;f(n){if(n){a[n]=--n;f(n);z=a[n];a[n]=a[y=rand()%(n+1)];a[y]=z;}}

रिकर्सिव फ़ंक्शन जो कि रास्ते में सरणी के अंत से शुरू होता है, और बाहर जाने से पहले एक यादृच्छिक तत्व के साथ स्वैप होता है।


क्या होगा अगर n > 98?
लीजनमोनमल 978

यह निश्चित रूप से विफल होगा, लेकिन इनपुट रेंज समस्या में निर्दिष्ट नहीं थी। कृपया मुझे मॉलोक न करें :)
कम्प्यूट्रोनियम

aनियम को और अधिक फिट करने के लिए एक पैरा में बदलें ?
l4m2 16


2

चारकोल , 33 बाइट्स

A…·⁰NβFβ«AβδA‽δθPIθ↓A⟦⟧βFδ¿⁻θκ⊞βκ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है।

जाहिर तौर पर चारकोल में एक सूची से एक तत्व को हटाने के लिए 17 बाइट्स लगते हैं।

संपादित करें: इन दिनों यह केवल तीन बाइट्स लेता है, यह मानते हुए कि आप सूची से आइटम की सभी घटनाओं को निकालना चाहते हैं। इस प्लस अन्य चारकोल परिवर्तनों ने उत्तर को 21 बाइट्स तक काट दिया: इसे ऑनलाइन आज़माएं!


Yikes कि एक बहुत
क्रिस्टोफर

2

एपीएल (डायलॉग) , 5 बाइट्स

?⍨1+⊢

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

मानता है ⎕IO←0, जो कई मशीनों पर डिफ़ॉल्ट है।

व्याख्या

सही तर्क

1+ इसमें 1 जोड़ें

?⍨नंबर 0 .. 1+⊢-1 जेनरेट करें और बेतरतीब ढंग से उन्हें एक एरे में डील करें ताकि कोई दो नंबर रिपीट न हो


2

क्यू / केडीबी +, ११ बाइट्स

समाधान:

{(0-x)?1+x}

उदाहरण:

q){(0-x)?1+x}10
5 9 7 1 2 4 8 0 3 10
q){(0-x)?1+x}10
6 10 2 8 4 5 9 0 7 3
q){(0-x)?1+x}10
9 6 4 1 10 8 2 7 0 5

स्पष्टीकरण:

डुप्लिकेट के बिना पूरी सूची देने के लिए एक नकारात्मक इनपुट वाले ? ऑपरेटर का उपयोग करें 0->n:

{(0-x)?1+x} / solution
{         } / lambda expression
         x  / implicit input
       1+   / add one
      ?     / rand
 (0-x)      / negate x, 'dont put item back in the bag'

2

TI-83 बुनियादी, 5 बाइट्स (उबाऊ)

randIntNoRep(0,Ans

हां, एक बिलिन। randIntNoRep(एक टू-बाइट टोकन है, और Ansएक बाइट है।

अधिक मजेदार, 34 बाइट्स:

Ans→N
seq(X,X,0,N→L₁
rand(N+1→L₂
SortA(L₂,L₁
L₁

सीधे तबासीदेव से । शायद गोल्फ है, लेकिन मुझे अभी तक कुछ भी नहीं मिला है।

यह क्या करता है: एक यादृच्छिक सरणी को सॉर्ट करता है, दूसरे आरजी ( L₁यहां) के तत्वों को उसी तरह से स्थानांतरित करता है जैसे कि उनके संबंधित तत्व।


1

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

n=>[...Array(n+1).keys()].sort(_=>.5-Math.random())

2
मुझे नहीं लगता कि यह एक समान है; मैंने f(5)10 बार कोशिश की है और 5हर बार अंतिम दो वस्तुओं में से एक रहा है।
ETHproductions

बस इसे फिर से एक दो बार अपने आप को भाग गया और मिल गया 1,5,4,0,2,3और 1,0,2,5,3,4। संपादित करें: और कुछ और prnt.sc/fe0goe
झबरा

3
बस एक त्वरित परीक्षण चला जो f(5)1e5 बार चलता है और परिणामों में प्रत्येक संख्या की औसत स्थिति का पता लगाता है। परिणामी सरणी थी [ 1.42791, 1.43701, 2.00557, 2.6979, 3.3993, 4.03231 ], इसलिए मुझे नहीं लगता कि यह एक समान है। ( कोड )
ETHproductions

मुझे लगता है कि मेरे पास एक 93 बाइट समाधान है जो काम कर सकता है। n=>(a=[...Array(n).keys(),n++]).reduce((a,v,i)=>([a[i],a[j]]=[a[j=n*Math.random()|0],v],a),a)?
kamoroso94

random()एक समान नहीं होने के परिणाम पर छंटनी । देखें (उदाहरण के लिए) en.wikipedia.org/wiki/BrowserChoice.eu#Criticism
नील

1

एसीटो , 15 14 16 बाइट्स

@lXp
Y!`n
zi&
0r

स्टैक पर शून्य दबाएं, एक पूर्णांक पढ़ें, एक सीमा का निर्माण करें और इसे फेरबदल करें:

Y
zi
0r

कैच मार्क सेट करें, 0 की लंबाई परीक्षण करें, और (उस स्थिति में) बाहर निकलें:

@lX
 !`

मूल्य प्रिंट, एक नई रेखा, और लंबाई परीक्षण पर वापस जाएं:

   p
   n
  &

(मुझे कोड बदलना पड़ा क्योंकि मुझे एहसास हुआ कि मैंने सवाल को गलत बताया था और 1-एन से एक सीमा का निर्माण किया था, न कि 0-एन से।)





1

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

n=>[...Array(n+1)].map((n,i)=>[Math.random(),i]).sort().map(n=>n[1])

प्रपत्र की एक सरणी बनाता है

[[Math.random(), 0],
 [Math.random(), 1],
 [Math.random(), 2],...]

फिर इसे क्रमबद्ध करें और अंतिम तत्वों को नए क्रम में लौटाएं


1

जे, 11 बाइट्स

(?@!A.i.)>:

स्पष्टीकरण:

         >:   | Increment
(?@!A.i.)     | Fork, (f g h) n is evaluated as (f n) g (h n)
      i.      | Integers in range [0,n) inclusive
 ?@!          | Random integer in the range [0, n!)
    A.        | Permute right argument according to left

उदाहरण:

    0 A. i.>:5
0 1 2 3 4 5
    1 A. i.>:5
0 1 2 3 5 4
    (?@!A.i.)>: 5
2 3 5 1 0 4
    (?@!A.i.)>: 5
0 3 5 1 2 4

1

Tcl , 90 बाइट्स

proc R n {lsort -c {try expr\ rand()>.5 on 9} [if [incr n -1]+2 {concat [R $n] [incr n]}]}

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

Tcl , 96 बाइट्स

proc R n {proc f a\ b {expr rand()>.5}
set i -1
while \$i<$n {lappend L [incr i]}
lsort -c f $L}

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


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