Aleatorizar los escalares de una matriz


14

Debe completar una matriz con cada número, 0-ninclusive. No se deben repetir números. Sin embargo, deben estar en un orden aleatorio.

Reglas

Todas las reglas estándar de y las lagunas estándar están prohibidas

La matriz debe generarse de forma seudoaleatoria. Toda permutación posible debe tener la misma probabilidad.

Entrada

n de cualquier manera permitida en la publicación de E / S en meta.

Salida

El conjunto de números revueltos de 0-ninclusivo.


la salida puede estar separada por nuevas líneas?
DrnglVrgs

@Riley opps que estaba destinado a desaparecer, lo siento.
Christopher

@DrnglVrgs sí puede
Christopher

Por "números" supongo que te refieres a "enteros"?
Zacharý

1
@KevinCruijssen IMO lists = array pero con soporte de búsqueda. Así que seguro usa una lista
Christopher

Respuestas:


9

Perl 6 , 14 bytes

{pick *,0..$_}

Intentalo

Expandido:

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

  pick      # choose randomly without repeats
    *,      # Whatever (all)
    0 .. $_ # Range from 0, to the input (inclusive)
}


8

Pyth, 3 bytes

.Sh

Demostración

.Ses aleatorio Implícitamente arroja un entero de entrada nal rango [0, 1, ..., n-1]. hes +1, y la entrada se toma implícitamente.










3

Japt , 4 bytes

ò öx

Pruébalo en línea


    :Implicit input of integer U
ò   :Generate array of 0 to U.
öx  :Generate random permutation of array.
    :Implicit output of result.

Dios mío, pensé öxque sería suficiente hasta que me di cuenta de la parte "inclusiva". (Podría reemplazar el xcon casi cualquier otra cosa, por cierto)
ETHproductions

@ETHproductions, ese fue mi primer pensamiento también.
Shaggy

3

C #, 76 bytes

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

Esto devuelve un IOrderedEnumerable, espero que esté bien, o de lo contrario necesito algunos bytes más para un .ToArray ()



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 y corrección de errores gracias a @ OlivierGrégoire .
-4 bytes gracias a @Jakob .
-10 bytes eliminando .toArray().

Explicación:

Pruébalo aquí.

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
Error: no incluye n. Fijar y golf: for(n++;--n>=0;l.add(n));. Además, digo que no necesita devolver una matriz. La matriz y la lista son iguales en la mayoría de los idiomas, así que solo devuelva la lista.
Olivier Grégoire

@ OlivierGrégoire Woops ... Eso es lo que obtienes por no verificar correctamente y simplemente publicar ... Gracias por la corrección de errores (y 4 bytes guardados en el proceso).
Kevin Cruijssen

1
Bueno, tres en realidad, porque volví a editar, habiendo introducido otro error: >debería ser >=.
Olivier Grégoire

1
-4 bytes: use a en Stacklugar de a Vectory cambie su ciclo a for(;n>=0;l.add(n--));. Y devolver un java.util.Listdefinitivamente está bien.
Jakob


2

Pyth, 4 bytes

.S}0

Pruébalo aquí!


Puedes jugar golf a 3 bytes. .Scon un argumento entero es lo mismo .SUy [0..n]se puede codificar como Uh, por lo que puede usar .SUh, que luego se convierte en .Sh.
Erik the Outgolfer

@EriktheOutgolfer gracias por la pista, pero como alguien ya ha publicado la solución que propones, dejaré esto como esto.
KarlKastor

Bueno, está al límite si eso debería haber sido una respuesta separada o no, pero creo que cuenta como un engaño, por lo que incluso si está permitido, lo consideraría solo una sustitución incorporada, así que no, no quería publicar separado, pero Isaac lo hizo.
Erik the 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;}}

Función recursiva que se inicializa desde el final de la matriz al entrar y se intercambia con un elemento aleatorio antes de salir.


¿Y si n > 98?
LegionMammal978

Fallaría, por supuesto, pero el rango de entrada no se especificó en el problema. Por favor no me hagas malloc :)
Computronium

cambiarse aa un para para ajustarse más a la regla?
l4m2


2

Carbón , 33 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código.

Aparentemente, se necesitan 17 bytes para eliminar un elemento de una lista en Charcoal.

Editar: en estos días solo toma tres bytes, suponiendo que desea eliminar todas las apariciones del elemento de la lista. Esto más otros cambios de carbón reducen la respuesta a 21 bytes: ¡ Pruébelo en línea!


Ay, eso es mucho
Christopher

2

APL (Dyalog) , 5 bytes

?⍨1+⊢

Pruébalo en línea!

Asume ⎕IO←0, lo cual es predeterminado en muchas máquinas.

Explicación

el argumento correcto

1+ agregue 1

?⍨generar números 0 .. 1+⊢-1 y distribuirlos aleatoriamente en una matriz para que no se repitan dos números


2

q / kdb +, 11 bytes

Solución:

{(0-x)?1+x}

Ejemplo:

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

Explicación:

Use el ? operador con una entrada negativa para dar la lista completa de 0->nsin duplicados:

{(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 bytes (aburrido)

randIntNoRep(0,Ans

Sí, un incorporado. randIntNoRep(es un token de dos bytes y Anses un byte.

Más diversión, 34 bytes:

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

Directamente desde tibasicdev . Probablemente golfable, pero todavía no he encontrado nada.

Qué hace esto: ordena una matriz aleatoria, moviendo elementos del segundo argumento ( L₁aquí) de la misma manera que sus elementos correspondientes.


1

JavaScript (ES6), 51 bytes

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

2
No creo que esto sea uniforme; Lo he intentado f(5)10 veces y 5ha sido uno de los últimos dos elementos cada vez.
ETHproductions

Solo lo volví a ejecutar un par de veces y obtuve 1,5,4,0,2,3& 1,0,2,5,3,4. EDITAR: Y algunos más prnt.sc/fe0goe
Shaggy

3
Simplemente ejecuté una prueba rápida que se ejecuta f(5)1e5 veces y encuentra la posición promedio de cada número en los resultados. La matriz resultante fue [ 1.42791, 1.43701, 2.00557, 2.6979, 3.3993, 4.03231 ], así que no creo que sea uniforme. ( código )
ETHproductions

Creo que tengo una solución de 93 bytes que podría funcionar. n=>(a=[...Array(n).keys(),n++]).reduce((a,v,i)=>([a[i],a[j]]=[a[j=n*Math.random()|0],v],a),a)?
kamoroso94

Ordenar por el resultado de random()no es uniforme. Ver (por ejemplo) en.wikipedia.org/wiki/BrowserChoice.eu#Criticism
Neil

1

Aceto , 15 14 16 bytes

@lXp
Y!`n
zi&
0r

Empuja cero en la pila, lee un número entero, construye un rango y baraja:

Y
zi
0r

Establezca una marca de captura, longitud de prueba para 0 y (en ese caso) salga:

@lX
 !`

De lo contrario, imprima el valor, una nueva línea y vuelva a la prueba de longitud:

   p
   n
  &

(Tuve que cambiar el código porque me di cuenta de que había leído mal la pregunta y había construido un rango de 1-n, no 0-n).




1

8 , 42 36 34 bytes

Código

>r [] ' a:push 0 r> loop a:shuffle

SED (Diagrama de efecto de pila) es n -- a

Uso y ejemplo

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

Crea una matriz de formularios.

[[Math.random(), 0],
 [Math.random(), 1],
 [Math.random(), 2],...]

Luego lo ordena y devuelve los últimos elementos en el nuevo orden


1

J, 11 bytes

(?@!A.i.)>:

Explicación:

         >:   | 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

Ejemplos:

    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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.