Randomisieren Sie die Skalare eines Arrays


14

Sie müssen ein Array mit jeder Zahl von 0-ninklusive füllen . Es sollten keine Nummern wiederholt werden. Sie müssen jedoch in zufälliger Reihenfolge sein.

Regeln

Alle Standard- und Standard-Lücken sind verboten

Das Array muss pseudozufällig generiert werden. Jede mögliche Permutation sollte die gleiche Wahrscheinlichkeit haben.

Eingang

n in irgendeiner Weise in der I / O-Post auf Meta erlaubt.

Ausgabe

Die Reihe von Zahlen, die von 0-ninclusive verwürfelt wurden .


die Ausgabe kann durch Zeilenumbrüche getrennt werden?
DrnglVrgs

@Riley opps das sollte leider weg sein.
Christopher

@DrnglVrgs ja, es kann
Christopher

Mit "Zahlen" meine ich vermutlich "ganze Zahlen"?
Zacharý

1
@ KevinCruijssen IMO-Listen = Array, aber mit Suchunterstützung. Verwenden Sie also unbedingt eine Liste
Christopher

Antworten:


9

Perl 6 , 14 Bytes

{pick *,0..$_}

Versuch es

Erweitert:

{           # bare block lambda with implicit parameter 「$_」

  pick      # choose randomly without repeats
    *,      # Whatever (all)
    0 .. $_ # Range from 0, to the input (inclusive)
}


8

Pyth, 3 Bytes

.Sh

Demonstration

.Sist mischen. Implizit wird eine Ganzzahl nin den Bereich umgewandelt [0, 1, ..., n-1]. hist +1, und die Eingabe wird implizit übernommen.










3

Japt , 4 Bytes

ò öx

Probieren Sie es online aus


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

Meine Güte, ich dachte, es öxwäre genug, bis ich den "inklusive" Teil bemerkte. (Sie könnten die xübrigens durch fast alles andere ersetzen)
ETHproductions

@ETHproductions, das war auch mein erster Gedanke.
Shaggy

3

76 Bytes

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

Dies gibt eine IOrderedEnumerable zurück, ich hoffe, das ist in Ordnung, oder ich brauche noch ein paar Bytes für eine .ToArray ()



3

Java 8, 114 111 97 Bytes

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

-3 Bytes und Bugfix dank @ OlivierGrégoire .
-4 Bytes dank @Jakob .
-10 Bytes durch Entfernen.toArray() .

Erläuterung:

Probieren Sie es hier aus.

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
Bug: nicht enthalten n. Fix und Golf: for(n++;--n>=0;l.add(n));. Außerdem muss kein Array zurückgegeben werden. Array und Liste sind in den meisten Sprachen gleich. Geben Sie die Liste zurück.
Olivier Grégoire

@ OlivierGrégoire Woops .. Das bekommst du dafür, dass du nicht richtig überprüfst und nur postest .. Danke für die Fehlerbehebung (und 4 Bytes, die dabei gespart wurden).
Kevin Cruijssen

1
Naja, drei eigentlich, weil ich nochmal redigiert habe, wobei ich mir einen anderen Bug vorgestellt habe: >soll sein >=.
Olivier Grégoire

1
-4 Bytes: Benutze a Stackanstelle von a Vectorund ändere deine Schleife auf for(;n>=0;l.add(n--));. Und die Rückgabe von a java.util.Listist definitiv in Ordnung.
Jakob


2

Pyth, 4 Bytes

.S}0

Probieren Sie es hier aus!


Sie können bis zu 3 Bytes Golf spielen. .Smit einem ganzzahligen Argument ist das gleiche wie .SU, und [0..n]kann als codiert werden Uh, so dass Sie verwenden können .SUh, was dann wird .Sh.
Erik der Outgolfer

@EriktheOutgolfer danke für den Hinweis, aber da jemand bereits die von Ihnen vorgeschlagene Lösung gepostet hat, werde ich dies so belassen.
Karl Kastor

Nun, es ist grenzwertig, ob das eine separate Antwort sein sollte oder nicht, aber ich glaube, es zählt als Betrug. Selbst wenn es erlaubt ist, würde ich es als eingebauten Ersatz betrachten, also na ja, ich wollte nicht posten getrennt, aber Isaacg tat.
Erik der Outgolfer

2

C 75 Bytes

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;}}

Rekursive Funktion, die vom Ende des Arrays beim Eingang initialisiert und beim Ausgang mit einem zufälligen Element vor diesem ausgetauscht wird.


Was wäre , wenn n > 98?
LegionMammal978

Es würde natürlich fehlschlagen, aber der Eingabebereich wurde im Problem nicht angegeben. Bitte mach mich nicht malloc :)
Computronium

ändern ain eine para die Regel mehr zu passen?
14 m²,


2

Holzkohle , 33 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes.

Anscheinend sind 17 Byte erforderlich, um ein Element aus einer Liste in Charcoal zu entfernen.

Bearbeiten: Heutzutage sind nur drei Bytes erforderlich, vorausgesetzt, Sie möchten alle Vorkommen des Elements aus der Liste entfernen. Dies und andere Änderungen an der Holzkohle reduzieren die Antwort auf 21 Byte: Probieren Sie es online aus!


Huch das ist viel
Christopher

2

APL (Dyalog) , 5 Bytes

?⍨1+⊢

Probieren Sie es online!

Angenommen ⎕IO←0, das ist auf vielen Rechnern Standard.

Erläuterung

das richtige argument

1+ addiere 1 dazu

?⍨generiere die Zahlen 0 .. 1+⊢-1 und teile sie zufällig in ein Array ein, so dass sich keine zwei Zahlen wiederholen


2

q / kdb + 11 Bytes

Lösung:

{(0-x)?1+x}

Beispiel:

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

Erläuterung:

Verwenden Sie den ? Operator mit einer negativen Eingabe, um die vollständige Liste 0->nohne Duplikate zu erhalten:

{(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 BASIC, 5 Bytes (langweilig)

randIntNoRep(0,Ans

Ja, ein eingebauter. randIntNoRep(ist ein Zwei-Byte-Token und Ansein Byte.

Mehr Spaß, 34 Bytes:

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

Direkt von tibasicdev . Wahrscheinlich golfen, aber ich habe noch nichts gefunden.

Was dies bewirkt: Sortiert ein zufälliges Array und verschiebt Elemente des zweiten Arguments ( L₁hier) auf die gleiche Weise wie die entsprechenden Elemente.


1

JavaScript (ES6), 51 Byte

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

2
Ich denke nicht, dass dies einheitlich ist; Ich habe es f(5)10 Mal versucht und 5war jedes Mal eines der letzten beiden Dinge.
ETHproductions

Ich habe es nur ein paar Mal wiederholt und 1,5,4,0,2,3& bekommen 1,0,2,5,3,4. EDIT: Und noch ein paar prnt.sc/fe0goe
Shaggy

3
f(5)Führen Sie einfach einen Schnelltest durch, der 1e5 Mal ausgeführt wird und die durchschnittliche Position jeder Zahl in den Ergebnissen ermittelt. Das resultierende Array war [ 1.42791, 1.43701, 2.00557, 2.6979, 3.3993, 4.03231 ], also glaube ich nicht, dass es einheitlich ist. ( code )
ETHproductions

Ich glaube, ich habe eine 93-Byte-Lösung, die funktionieren könnte. n=>(a=[...Array(n).keys(),n++]).reduce((a,v,i)=>([a[i],a[j]]=[a[j=n*Math.random()|0],v],a),a)?
Kamoroso94

Das Sortieren nach dem Ergebnis random()ist nicht einheitlich. Siehe (zum Beispiel) en.wikipedia.org/wiki/BrowserChoice.eu#Criticism
Neil

1

Aceto , 15 14 16 Bytes

@lXp
Y!`n
zi&
0r

Drücken Sie die Null auf den Stapel, lesen Sie eine Ganzzahl, konstruieren Sie einen Bereich und mischen Sie ihn:

Y
zi
0r

Setzen Sie eine Fangmarke, testen Sie die Länge für 0 und beenden Sie (in diesem Fall):

@lX
 !`

Anderenfalls geben Sie den Wert und eine neue Zeile aus und kehren zum Längentest zurück:

   p
   n
  &

(Ich musste den Code ändern, weil mir klar wurde, dass ich die Frage falsch verstanden und einen Bereich von 1-n und nicht von 0-n erstellt habe.)


1

Go, 92 bytes

Mostly losing to the need to seed the PRNG.

import(."fmt";."math/rand";."time")
func f(n int){Seed(Now().UnixNano());Println(Perm(n+1))}

Try it online!



1

8th, 42 36 34 bytes

Code

>r [] ' a:push 0 r> loop a:shuffle

SED (Stack Effect Diagram) is n -- a

Usage and example

ok> 5 >r [] ' a:push 0 r> loop a:shuffle .
[2,5,0,3,1,4]

1

Javascript (ES6), 68 bytes

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

Creates an array of form

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

Then sorts it and returns the last elements in the new order


1

J, 11 Bytes

(?@!A.i.)>:

Explanation:

         >:   | 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

Examples:

    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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.