Je répondais à un défi ici et cette tâche faisait partie du défi. J'ai une solution de 73 octets en javascript. Mais je pense que c'est trop pour une chose simple.
Défi
Étant donné en entrée deux entiers:
N
la longueur du tableau attenduR
la plage de l'intervalle commençant par un:,1..R
pas0..R-1
Sortez à chaque exécution de votre programme / fonction un tableau différent de longueur N
avec des valeurs comprises 1..R
de telle manière qu'aucune valeur ne se produit plus d'une fois.
Vous devez utiliser R-value
dans votre code.
Restrictions
Vous pouvez supposer: 2 <= N <= R
.
Je voudrais vraiment voir une solution javascript plus courte que la mienne 73 octets.
Mais bien sûr, il est ouvert à toutes les langues!
Si votre langue ne peut pas renvoyer un tableau, vous pouvez imprimer tous les nombres;)
code-golf
random
permutations
supprimé
la source
la source
R=N=1
) Je recommande donc d'autoriser les plages0..R
comme alternative car cela est plus naturel pour de nombreuses langues.shuffle(0..N)
new Date
donne des valeurs non uniformes. De plus, je crois que vous pouvez le jouer au golfnew Date%r+1
;)Réponses:
Dyalog APL, 1 octet
Juste un intégré. Essayez-le ici .
la source
JavaScript (ES6),
6866 octetsAppelé comme
F(N)(R)()
, oùF
est l'affectation de fonction etN
/R
sont les valeurs.Vous avez demandé moins de 73 octets en Js;)
EDIT: La réponse de @ C5H8NNaO4 fonctionne dans le fait que les règles ne spécifient pas que les valeurs doivent être uniformes à travers
1..R
. Étant donné que, voici une version qui fonctionne en 63 octets (appelés commeF(R)(N)
):la source
Octave,
22 199 octetsrandperm(r,n)
fait exactement ce qui est demandé. Notez que cela ne fonctionne pas (du moins pas dans les versions plus anciennes) dans Matlab.la source
@(n,r)randperm(r,n)
randperm
avec deux entrées fonctionne dans les versions récentes de Matlab. Il y en a aussirandsample
, mais cela prend plus d'octets, à moins que vous ne puissiez vous débarrasser de@(...)
(je pense que c'est autorisé)@randperm
=)TI-84 BASIC OS 4.0, 12 octets
La TI-84 + CSE (2013) et la CE (2015) sont essentiellement le même dialecte BASIC limité que la TI-84 +, mais il y a quelques nouvelles fonctionnalités. L'un d'eux est le troisième argument de randIntNoRep.
la source
MATL , 2 octets
Les entrées sont: d'abord
R
, puisN
.Essayez-le en ligne!
Explication
La fonction
Zr
prend deux entrées (implicitement dans ce cas) et effectue un échantillonnage aléatoire sans remplacement. La première entrée,,R
spécifie que la population est[1,2,...,R]
; et la deuxième entrée,,N
indique le nombre d'échantillons à prélever dans la population.la source
J,
43 octetsUn octet sauvé grâce à Zgarb! ( Quatre barrés est toujours un quatre régulier: D )
appeler comme
N (1+?) R
, par exemple3 (1+?) 10
. Cela utilise l'opérateur "Roll" et fait exactement ce qui est décrit, sauf sous0...n-1
. Si nous étions autorisés à le faire, la réponse serait 1 octet,la source
Pyth, 6 octets
Essayez-le ici!
La plage vient sur la première ligne et la longueur sur la seconde.
Explication
Version 5 octets non concurrente
Le dernier ajout à Pyth ajoute des
Q
s implicites à la fin du programme si nécessaire. Nous pouvons l'utiliser ici en inversant le format d'entrée, de sorte que la longueur vient en premier, puis la plage.Essayez-le ici!
Voici
E
la plage, avec laquelle nous transformons une liste basée sur 1S
, mélangez-la avec.S
et prenez les premiersQ
éléments avec<
.<
attend un entier qui est implicitement ajouté avec unQ
.la source
Reng V.2.1,
1401039897 octetsCela devrait également fonctionner dans les versions antérieures.
Vous pouvez l'essayer ici! L'entrée est
maximum length
, comme10 3
.J'en suis tellement fier, tu ne sais même pas. Si quelqu'un me bat avec une réponse Java, cela fera ma journée. Si je bat une réponse Java, pensez aussi à ma journée.
Je l'expliquerai plus tard, une fois que je serai rétabli. Généralement, cependant:
Cela génère des nombres aléatoires. L'autre partie vérifie s'il y a des doublons et, s'il y en a, le processus est répété. Sinon, les résultats sont imprimés, avec des espaces joignant les résultats.
Voici quelques exemples:
la source
CJam, 8 octets
Essayez-le ici!
Il s'agit d'un bloc sans nom qui attend la plage en haut de la pile et la longueur en bas et laisse une liste sur la pile.
Explication
la source
Lisp commun, 90
52 pour l'expression seulement
Non golfé
Comme pour les autres réponses, si je ne compte pas use-package et lambda , l'expression restante est
(coerce(subseq(shuffle(iota R :start 1))0 N)'vector)
, pour 52 octets.la source
Rubis,
2723 octetsFonction anonyme, raisonnablement courte et douce.
-4 octets de @manatwork
la source
->n,r{[*1..r].sample n}
Veuillez utiliser le balisage de bloc de code au lieu du balisage de code en ligne, afin que des scripts comme le Pack d'amélioration du code utilisateur de Golf Golf puissent insérer la taille de code à côté.𝔼𝕊𝕄𝕚𝕟, 10 caractères / 13 octets
Try it here (Firefox only).
Explication
la source
Bash + coreutils, 16
Je pense que cela va de soi:
Entrez
N
etR
comme paramètres de ligne de commande.Ou comme le souligne @rici, pour le même score:
Ideone.
la source
shuf -n$1 -i1-$2
(même longueur, cependant).PowerShell v2 +, 30 octets
Prend des entrées
$n
et$r
construit une plage1..$r
, les dirige versGet-Random
une-C
quantité de$n
, qui sélectionnera$n
des éléments uniques de la plage. La sortie est laissée sur le pipeline sous la forme d'un tableau implicite.la source
Seriously, 5 bytes
Try it online!
Explanation:
la source
Clojure, 38 bytes
An anonymous function taking N first and R second.
la source
Perl 6, 32 bytes
la source
Python 3.5 -
5453 bytes:This uses the random module's
sample()
function to return an array with length "a" consisting of random, unique elements in the range1 => c
.la source
D, 29 bytes (expression only)
Assuming that std.random and std.range have been imported and that n and r are defined as variables, the program can be solved in the single expression:
la source
ES6, 72
Like in @Mwr247's answer, you can call it with
F(R)(N)
,F
being the function expressionla source
Mathcad, 67 "bytes"
creates a column vector of consecutive integers in range 1..R, joins it to a column vector of length R of (uniform) random numbers, sorts the resulting Rx2 matrix on the random number column, and then extracts the first n numbers from the randomized column of integers.
la source
Python, 56 (the obvious way)
la source
from random import*;lambda N,R:sample(range(1,R+1),k=N)
is shorter by a bytefrom random import*
, must've screwed up the counting.Perl 5,
5143 bytesPretty straightforward anonymous sub that generates an array from 1 to R and then splices N random elements from it to return. Call with
->(N, R)
.la source
TI-84 BASIC, 21 bytes
la source
Ans
as input as per a recent meta post.