Randomisez les scalaires d'un tableau

14

Vous devez remplir un tableau avec chaque numéro 0-ninclus. Aucun chiffre ne doit se répéter. Cependant, ils doivent être dans un ordre aléatoire.

Règles

Toutes les règles de standard et les échappatoires standard sont interdites

Le tableau doit être généré de manière pseudo-aléatoire. Chaque permutation possible devrait avoir une probabilité égale.

Contribution

n en aucune façon autorisé dans le poste d'E / S sur meta.

Production

Le tableau de nombres brouillé d' 0-ninclus.

Christophe
la source
la sortie peut être séparée par des retours à la ligne?
DrnglVrgs
@Riley opps qui devait disparaître désolé.
Christopher
@DrnglVrgs oui ça peut
Christopher
Par «nombres», je suppose que vous voulez dire «entiers»?
Zacharý
1
@KevinCruijssen IMO lists = array mais avec un support de recherche. Alors assurez-vous d'utiliser une liste
Christopher

Réponses:

9

Perl 6 , 14 octets

{pick *,0..$_}

Essayez-le

Étendu:

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

  pick      # choose randomly without repeats
    *,      # Whatever (all)
    0 .. $_ # Range from 0, to the input (inclusive)
}
Brad Gilbert b2gills
la source
8

Pyth, 3 octets

.Sh

Manifestation

.Sest aléatoire. Il convertit implicitement un entier d'entrée ndans la plage [0, 1, ..., n-1]. hest +1, et l'entrée est prise implicitement.

isaacg
la source
7

R , 16 octets

sample(0:scan())

lit à partir de stdin. sampleéchantillonne au hasard à partir du vecteur d'entrée, renvoyant une séquence (pseudo) aléatoire.

Essayez-le en ligne!

Giuseppe
la source
6

Gelée , 3 octets

0rẊ

Essayez-le en ligne!

Explication:

0rẊ 
0r  Inclusive range 0 to input.
  Ẋ Shuffle.
    Implicit print.

Solution alternative, 3 octets

‘ḶẊ

Explication:

‘ḶẊ
‘   Input +1
 Ḷ  Range 0 to argument.
  Ẋ Shuffle.

Essayez-le en ligne!

Camarade SparklePony
la source
5

Python 2 , 51 octets

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

Essayez-le en ligne!

Il y en a random.shuffle()mais ça modifie l'argument en place au lieu de le renvoyer ...

totalement humain
la source
Vous pouvez utiliserrandom.shuffle
caird coinheringaahing
@cairdcoinheringaahing Oui, mais cela ne fonctionnerait pas. Par exemple, lambda n:shuffle(range(n+1))n'écrirait la sortie nulle part.
2018 totalement humain
4

Bash, 18 11 octets

shuf -i0-$1

Essayez-le en ligne!

DrnglVrgs
la source
Si les sauts de ligne sont autorisés, nous pouvons oublier la partie d'écho
DrnglVrgs
3

Mathematica, 24 octets

RandomSample@Range[0,#]&
J42161217
la source
3

MATL , 4 octets

QZ@q

Essayez-le en ligne!

Explication

Q     % Implicitly input n. Add 1
Z@    % Random permutation of [1 2 ... n+1]
q     % Subtract 1, element-wise. Implicitly display
Luis Mendo
la source
3

Japt , 4 octets

ò öx

Essayez-le en ligne


    :Implicit input of integer U
ò   :Generate array of 0 to U.
öx  :Generate random permutation of array.
    :Implicit output of result.
Hirsute
la source
Bon sang, j'ai pensé que ce öxserait suffisant jusqu'à ce que je remarque la partie "inclusive". (Vous pouvez remplacer le xpar presque tout le reste, btw)
ETHproductions
@ETHproductions, c'était aussi ma première pensée.
Shaggy
3

C #, 76 octets

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

Cela renvoie un IOrderedEnumerable, j'espère que ça va, ou bien j'ai besoin de quelques octets de plus pour un .ToArray ()

LiefdeWen
la source
3

CJam , 7 6 octets

1 octet supprimé grâce à Erik l'Outgolfer .

{),mr}

Il s'agit d'un bloc (fonction) anonyme qui prend un entier de la pile et le remplace par le résultat. Essayez-le en ligne!

Explication

{     e# Begin block
)     e# Increment: n+1
,     e# Range: [0 1 ... n]
mr    e# Shuffle
}     e# End block
Luis Mendo
la source
Un {),mr}octet n'est-il pas plus court?
Erik the Outgolfer
@EriktheOutgolfer Effectivement! Merci
Luis Mendo
3

Java 8, 114 111 97 octets

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

-3 octets et correction de bugs grâce à @ OlivierGrégoire .
-4 octets grâce à @Jakob .
-10 octets en supprimant.toArray() .

Explication:

Essayez-le ici.

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
la source
1
Bug: ne comprend pas n. Fix et golf: for(n++;--n>=0;l.add(n));. De plus, je dis que vous n'avez pas besoin de retourner un tableau. Le tableau et la liste sont les mêmes dans la plupart des langues, il suffit donc de renvoyer la liste.
Olivier Grégoire
@ OlivierGrégoire Woops .. C'est ce que vous obtenez pour ne pas vérifier correctement et simplement poster .. Merci pour le bug-fix (et 4 octets enregistrés dans le processus).
Kevin Cruijssen
1
Eh bien, trois en fait, parce que j'ai modifié à nouveau, après avoir moi-même introduit un autre bug: >devrait l'être >=.
Olivier Grégoire
1
-4 octets: utilisez a Stackau lieu de a Vectoret changez votre boucle en for(;n>=0;l.add(n--));. Et retourner un java.util.Listest vraiment bien.
Jakob
2

Pyth, 4 octets

.S}0

Essayez-le ici!

KarlKastor
la source
Vous pouvez jouer au golf à 3 octets. .Savec un argument entier est identique à .SU, et [0..n]peut être codé comme Uh, vous pouvez donc l'utiliser .SUh, qui devient alors .Sh.
Erik the Outgolfer
@EriktheOutgolfer merci pour cet indice, mais comme quelqu'un a déjà posté la solution que vous proposez, je laisserai cela comme ceci.
KarlKastor
Eh bien, il est limite de savoir si cela aurait dû être une réponse distincte ou non, mais je crois que cela compte comme une dupe, donc même si cela est autorisé, je le considérerais comme une substitution intégrée, alors non, je ne voulais pas poster séparés, mais isaacg l'a fait.
Erik the Outgolfer du 1er
2

C, 75 octets

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

Fonction récursive qui s'initialise à la fin du tableau lors de l'entrée et échange avec un élément aléatoire avant la sortie.

Computronium
la source
Et si n > 98?
LegionMammal978
Cela échouerait, bien sûr, mais la plage d'entrée n'était pas spécifiée dans le problème. S'il vous plaît ne me faites pas malloc :)
Computronium
changer aen para pour mieux correspondre à la règle?
l4m2 le
67 octets
Plafond
2

Fusain , 33 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code.

Apparemment, il faut 17 octets pour supprimer un élément d'une liste dans Charcoal.

Modifier: De nos jours, cela ne prend que trois octets, en supposant que vous souhaitez supprimer toutes les occurrences de l'élément de la liste. Cela, ainsi que d'autres modifications au charbon de bois, réduisent la réponse à 21 octets: essayez-le en ligne!

Neil
la source
Yikes c'est beaucoup
Christopher
2

APL (Dyalog) , 5 octets

?⍨1+⊢

Essayez-le en ligne!

Suppose ⎕IO←0, qui est par défaut sur de nombreuses machines.

Explication

le bon argument

1+ ajoutez-y 1

?⍨générer des nombres 0 .. 1+⊢-1 et les distribuer au hasard dans un tableau de sorte qu'il n'y ait pas deux nombres répétés

Kritixi Lithos
la source
2

q / kdb +, 11 octets

Solution:

{(0-x)?1+x}

Exemple:

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

Explication:

Utilisez l' ? opérateur avec une entrée négative pour donner la liste complète des 0->nsans doublons:

{(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
la source
2

TI-83 BASIC, 5 octets (ennuyeux)

randIntNoRep(0,Ans

Oui, un intégré. randIntNoRep(est un jeton de deux octets et Ansun octet.

Plus amusant, 34 octets:

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

Directement de tibasicdev . Probablement golfable, mais je n'ai encore rien trouvé.

Ce que cela fait: Trie un tableau aléatoire, en déplaçant les éléments du deuxième argument ( L₁ici) de la même manière que leurs éléments correspondants.

Khuldraeseth na'Barya
la source
1

JavaScript (ES6), 51 octets

n=>[...Array(n+1).keys()].sort(_=>.5-Math.random())
Hirsute
la source
2
Je ne pense pas que ce soit uniforme; J'ai essayé f(5)10 fois et 5a été l'un des deux derniers articles à chaque fois.
ETHproductions
Je l'ai à nouveau exécuté plusieurs fois moi-même et j'ai obtenu 1,5,4,0,2,3& 1,0,2,5,3,4. EDIT: Et quelques autres prnt.sc/fe0goe
Shaggy
3
Il suffit de f(5)lancer un test rapide qui s'exécute 1e5 fois et trouve la position moyenne de chaque nombre dans les résultats. Le tableau résultant était [ 1.42791, 1.43701, 2.00557, 2.6979, 3.3993, 4.03231 ], donc je ne pense pas qu'il soit uniforme. ( code )
ETHproductions
Je pense que j'ai une solution de 93 octets qui pourrait fonctionner. n=>(a=[...Array(n).keys(),n++]).reduce((a,v,i)=>([a[i],a[j]]=[a[j=n*Math.random()|0],v],a),a)?
kamoroso94
Le tri sur le résultat de random()n'est pas uniforme. Voir (par exemple) en.wikipedia.org/wiki/BrowserChoice.eu#Criticism
Neil
1

Aceto , 15 14 16 octets

@lXp
Y!`n
zi&
0r

Poussez zéro sur la pile, lisez un entier, construisez une plage et mélangez-la:

Y
zi
0r

Définissez un repère, testez la longueur pour 0 et (dans ce cas) quittez:

@lX
 !`

Sinon, imprimez la valeur, une nouvelle ligne et revenez au test de longueur:

   p
   n
  &

(J'ai dû changer le code parce que j'ai réalisé que j'avais mal lu la question et que j'avais construit une plage de 1-n, pas de 0-n.)

L3viathan
la source
1

Go, 92 bytes

Perdant principalement à la nécessité de semer le PRNG.

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

Essayez-le en ligne!

totalement humain
la source
1

Rubis, 20 octets

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

canhascodez
la source
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
la source
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
la source
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
la source
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
la source
Try to outgolf got the same byte count: tio.run/…
sergiol