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.


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


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.


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!









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.

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 ()



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

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!


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.


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


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!


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


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'

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.


1

JavaScript (ES6), 51 octets

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

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.)




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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.