Estaba respondiendo un desafío aquí y esta tarea era parte del desafío. Tengo una solución de 73 bytes en javascript. Pero creo que es demasiado para una cosa simple.
Desafío
Dado como entrada dos enteros:
N
la longitud de la matriz esperadaR
el intervalo del intervalo que comienza en uno:1..R
no0..R-1
Imprima en cada ejecución de su programa / función una matriz diferente de longitud N
con valores entre ellos 1..R
de tal manera que ningún valor ocurra más de una vez.
Debe usar R-value
en su código.
Restricciones
Se puede suponer: 2 <= N <= R
.
Realmente me gustaría ver una solución de JavaScript más corta que la mía de 73 bytes.
Pero, por supuesto, ¡está abierto a todos los idiomas!
Si su idioma no puede devolver una matriz, puede imprimir todos los números;)
code-golf
random
permutations
remoto
fuente
fuente
R=N=1
). Entonces recomiendo permitir los rangos0..R
como una alternativa, ya que esto es más natural para muchos idiomas.shuffle(0..N)
new Date
produce valores no uniformes. Además, creo que puedes jugarlonew Date%r+1
;)Respuestas:
Dyalog APL, 1 byte
Solo una construcción. Pruébalo aquí .
fuente
JavaScript (ES6),
6866 bytesLlamado como
F(N)(R)()
, dondeF
está la asignación de funciones, yN
/R
son los valores.Solicitó menos de 73 bytes en Js;)
EDITAR: La respuesta de @ C5H8NNaO4 funciona dentro del hecho de que las reglas no especifican que los valores deben ser uniformes
1..R
. Dado eso, aquí hay una versión que funciona en 63 bytes (llamada comoF(R)(N)
):fuente
Octava,
22 199 bytesrandperm(r,n)
hace exactamente lo que se solicita. Tenga en cuenta que esto no funciona (al menos no en versiones anteriores) en Matlab.fuente
@(n,r)randperm(r,n)
randperm
con dos entradas funciona en versiones recientes de Matlab. También hayrandsample
, pero toma más bytes, a menos que pueda deshacerse de@(...)
(creo que eso está permitido)@randperm
=)TI-84 BASIC OS 4.0, 12 bytes
El TI-84 + CSE (2013) y el CE (2015) son esencialmente el mismo dialecto BASIC limitado que el TI-84 +, pero hay algunas características nuevas. Uno de ellos es el tercer argumento de randIntNoRep.
fuente
MATL , 2 bytes
Las entradas son: primero
R
, luegoN
.Pruébalo en línea!
Explicación
La función
Zr
toma dos entradas (implícitamente en este caso) y realiza un muestreo aleatorio sin reemplazo. La primera entrada,R
especifica que la población es[1,2,...,R]
; y la segunda entrada,N
indica el número de muestras a tomar de la población.fuente
J,
43 bytes¡Un byte guardado gracias a Zgarb! ( Tachado cuatro sigue siendo un cuatro regular: D )
llame al igual que
N (1+?) R
, por ejemplo,3 (1+?) 10
. Esto utiliza el operador "Roll" y hace exactamente lo que se describe, excepto debajo0...n-1
. Si se nos permitiera hacer esto, entonces la respuesta sería 1 byte,fuente
Pyth, 6 bytes
Pruébalo aquí!
El rango viene en la primera línea y la longitud en la segunda.
Explicación
Versión de 5 bytes no competitiva
La última incorporación a Pyth agrega
Q
s implícitos al final del programa si es necesario. Podemos usar esto aquí invirtiendo el formato de entrada, por lo que la longitud es lo primero y luego el rango.Pruébalo aquí!
Aquí
E
está el rango, que convertimos en una lista basada en 1S
, lo barajamos.S
y tomamos los primerosQ
elementos con<
.<
espera un número entero que se agrega implícitamente con aQ
.fuente
Reng v.2.1,
1401039897 bytesEsto también debería funcionar en versiones anteriores.
¡Puedes probarlo aquí! La entrada es
maximum length
, como10 3
.Estoy muy orgulloso de esto, ni siquiera lo sabes. Si alguien me gana con una respuesta de Java, eso me alegrará el día. Si supero una respuesta de Java, considere también mi día hecho.
Lo explicaré más tarde, una vez que me recupere. En general, sin embargo:
Esto genera los números aleatorios. La otra parte verifica si hay duplicados y, si los hay, el proceso se repite. De lo contrario, los resultados se imprimen, con espacios que se unen a los resultados.
Aquí hay unos ejemplos:
fuente
CJam, 8 bytes
Pruébalo aquí!
Este es un bloque sin nombre que espera el rango en la parte superior de la pila y la longitud en la parte inferior y deja una lista en la pila.
Explicación
fuente
Lisp común, 90
52 solo para la expresión
Sin golf
Al igual que otras respuestas, si no cuento use-package y lambda , la expresión restante es
(coerce(subseq(shuffle(iota R :start 1))0 N)'vector)
, para 52 bytes.fuente
Rubí,
2723 bytesFunción anónima, razonablemente corta y dulce.
-4 bytes de @manatwork
fuente
->n,r{[*1..r].sample n}
Utilice el marcado de bloque de código en lugar del marcado de código en línea, de modo que los scripts como Code Golf UserScript Enhancement Pack puedan insertar el tamaño del código al lado.𝔼𝕊𝕄𝕚𝕟, 10 caracteres / 13 bytes
Try it here (Firefox only).
Explicación
fuente
Bash + coreutils, 16
Creo que esto se explica por sí mismo:
Entrada
N
yR
como parámetros de línea de comandos.O como señala @rici, para el mismo puntaje:
Ideona
fuente
shuf -n$1 -i1-$2
(misma longitud, sin embargo).PowerShell v2 +, 30 bytes
Toma información
$n
y$r
, construye un rango1..$r
, canaliza esoGet-Random
con una cantidad-C
de$n
, que seleccionará$n
elementos únicos del rango. La salida se deja en la tubería como una matriz implícita.fuente
En serio, 5 bytes
Pruébalo en línea!
Explicación:
fuente
Clojure, 38 bytes
Una función anónima que toma N primero y R segundo.
fuente
Perl 6, 32 bytes
fuente
Python 3.5 -
5453 bytes:Esto utiliza la
sample()
función del módulo aleatorio para devolver una matriz con una longitud "a" que consta de elementos aleatorios y únicos en el rango1 => c
.fuente
D, 29 bytes (solo expresión)
Suponiendo que se hayan importado std.random y std.range y que n y r se definan como variables, el programa se puede resolver en la única expresión:
fuente
ES6, 72
Como en la respuesta de @ Mwr247 , puede llamarlo con
F(R)(N)
,F
siendo la expresión de la funciónfuente
Mathcad, 67 "bytes"
crea un vector de columna de enteros consecutivos en el rango 1..R, lo une a un vector de columna de longitud R de números aleatorios (uniformes), clasifica la matriz Rx2 resultante en la columna de números aleatorios y luego extrae los primeros n números del columna aleatoria de enteros.
fuente
Python, 56 (la forma obvia)
fuente
from random import*;lambda N,R:sample(range(1,R+1),k=N)
es más corto por un bytefrom random import*
, debe haber arruinado el conteo.Perl 5,
5143 bytesSub anónimo bastante sencillo que genera una matriz de 1 a R y luego divide N elementos aleatorios de él para volver. Llamada con
->(N, R)
.fuente
TI-84 BASIC, 21 bytes
fuente
Ans
como entrada según una meta publicación reciente.