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 .

Christopher
quelle
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)
}
Brad Gilbert b2gills
quelle
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.

isaacg
quelle
7

R , 16 Bytes

sample(0:scan())

liest aus stdin.samplezufällige Abtastungen vom Eingabevektor, die eine (Pseudo-) Zufallssequenz zurückgeben.

Probieren Sie es online!

Giuseppe
quelle
5

Python 2 , 51 Bytes

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

Probieren Sie es online!

Es gibt, random.shuffle()aber es modifiziert das Argument, anstatt es zurückzugeben ...

total menschlich
quelle
Sie können verwendenrandom.shuffle
Caird Coinheringaahing
@cairdcoinheringaahing Ja, aber das würde nicht funktionieren. lambda n:shuffle(range(n+1))Würde zum Beispiel die Ausgabe nirgendwo schreiben.
Totalhuman
4

Bash, 18 11 Bytes

shuf -i0-$1

Probieren Sie es online!

DrnglVrgs
quelle
Wenn Zeilenumbrüche erlaubt sind, können wir den Echo-Teil vergessen
DrnglVrgs
3

Mathematica, 24 Bytes

RandomSample@Range[0,#]&
J42161217
quelle
3

MATL , 4 Bytes

QZ@q

Probieren Sie es online!

Erläuterung

Q     % Implicitly input n. Add 1
Z@    % Random permutation of [1 2 ... n+1]
q     % Subtract 1, element-wise. Implicitly display
Luis Mendo
quelle
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.
Zottelig
quelle
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 ()

LiefdeWen
quelle
3

CJam , 7 6 Bytes

Dank Erik the Outgolfer wurde 1 Byte entfernt .

{),mr}

Dies ist ein anonymer Block (Funktion), der eine Ganzzahl aus dem Stapel entnimmt und durch das Ergebnis ersetzt. Probieren Sie es online!

Erläuterung

{     e# Begin block
)     e# Increment: n+1
,     e# Range: [0 1 ... n]
mr    e# Shuffle
}     e# End block
Luis Mendo
quelle
Ist {),mr}1 Byte nicht kürzer?
Erik der Outgolfer
@EriktheOutgolfer In der Tat! Danke
Luis Mendo
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
Kevin Cruijssen
quelle
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!

KarlKastor
quelle
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.

Computronium
quelle
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²,
67 Bytes
Ceilingcat
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!

Neil
quelle
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

Kritixi Lithos
quelle
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'
Streetster
quelle
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.

Khuldraeseth na'Barya
quelle
1

JavaScript (ES6), 51 Byte

n=>[...Array(n+1).keys()].sort(_=>.5-Math.random())
Zottelig
quelle
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.)

L3viathan
quelle
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!

totallyhuman
quelle
1

Ruby, 20 bytes

->n{[*0..n].shuffle}

canhascodez
quelle
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]
Chaos Manor
quelle
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

Oki
quelle
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
Bolce Bussiere
quelle
1

Tcl, 90 bytes

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

Try it online!

Tcl, 96 bytes

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

Try it online!

sergiol
quelle
Try to outgolf got the same byte count: tio.run/…
sergiol