Aleatorizar os escalares de uma matriz


14

Você deve preencher uma matriz com todos os números do 0-ninclusive. Nenhum número deve se repetir. No entanto, eles devem estar em uma ordem aleatória.

Regras

Todas as regras de padrão e brechas padrão são proibidas

A matriz deve ser gerada pseudo-aleatoriamente. Toda permutação possível deve ter uma probabilidade igual.

Entrada

n de qualquer maneira permitida na postagem de E / S na meta.

Resultado

A matriz de números passou de 0-ninclusiva.


a saída pode ser separada por novas linhas?
DrnglVrgs

@Riley opps que deveria ter ido embora desculpe.
Christopher

@DrnglVrgs sim, pode
Christopher

Por "números", presumo que você queira dizer "números inteiros"?
precisa saber é o seguinte

1
@KevinCruijssen IMO lists = array mas com suporte à pesquisa. Tão certo usar uma lista
Christopher

Respostas:


9

Perl 6 , 14 bytes

{pick *,0..$_}

Tente

Expandido:

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

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


8

Pitão, 3 bytes

.Sh

Demonstração

.Sé embaralhar. Envolve implicitamente um número inteiro de entrada npara o intervalo [0, 1, ..., n-1]. hé +1, e a entrada é obtida implicitamente.


7

R , 16 bytes

sample(0:scan())

lê de stdin. sampleamostras aleatórias do vetor de entrada, retornando uma sequência (pseudo) aleatória.

Experimente online!









3

Japonês , 4 bytes

ò öx

Experimente online


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

Puta que pariu, pensei öxque seria o suficiente até perceber a parte "inclusiva". (Você pode substituir o xcom quase qualquer outra coisa, btw)
ETHproductions

@ETHproductions, esse foi o meu primeiro pensamento também.
Shaggy

3

C #, 76 bytes

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

Isso retorna um IOrderedEnumerable, espero que esteja tudo bem, ou então preciso de mais alguns bytes para um .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 e correções de bugs graças a @ OlivierGrégoire .
-4 bytes graças a @Jakob .
-10 bytes removendo .toArray().

Explicação:

Experimente aqui.

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: não inclui n. Fix e golfe: for(n++;--n>=0;l.add(n));. Além disso, eu digo que você não precisa retornar uma matriz. Matriz e lista são iguais na maioria dos idiomas, portanto, basta retornar a lista.
Olivier Grégoire

@ OlivierGrégoire Woops .. Isso é o que você ganha por não checar corretamente e apenas postar .. Obrigado pela correção de bugs (e 4 bytes salvos no processo).
Kevin Cruijssen

1
Bem, na verdade três, porque editei novamente, introduzindo outro bug: >deveria ser >=.
Olivier Grégoire

1
-4 bytes: use a em Stackvez de ae Vectoraltere seu loop para for(;n>=0;l.add(n--));. E devolver um java.util.Listé definitivamente bom.
21417 Jakob


2

Pyth, 4 bytes

.S}0

Experimente aqui!


Você pode jogar golfe a 3 bytes. .Scom um argumento inteiro é o mesmo que .SU, e [0..n]pode ser codificado como Uh, para que você possa usar o .SUhque se torna .Sh.
Erik the Outgolfer

@EriktheOutgolfer, obrigado pela dica, mas como alguém já publicou a solução que você propõe, deixarei isso como este.
KarlKastor 31/05

Bem, é limítrofe se essa deveria ter sido uma resposta separada ou não, mas acredito que isso é uma mentira, portanto, mesmo sendo permitido, eu consideraria apenas uma substituição embutida, então nah, eu não queria postar separado, mas Isaac fez.
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;}}

Função recursiva que é inicializada a partir do final da matriz na entrada e troca com um elemento aleatório antes da saída.


E se n > 98?
LegionMammal978

É claro que falharia, mas o intervalo de entrada não foi especificado no problema. Por favor, não me faça mal :)
Computronium

mudar apara um para se ajustar mais à regra?
l4m2


2

Carvão , 33 bytes

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

Experimente online! Link é a versão detalhada do código.

Aparentemente, são necessários 17 bytes para remover um elemento de uma lista no Charcoal.

Editar: Atualmente, são necessários apenas três bytes, desde que você deseje remover todas as ocorrências do item da lista. Isso, além de outras alterações no carvão, reduz a resposta para 21 bytes: Experimente online!


Caramba, isso é muita coisa
Christopher

2

APL (Dyalog) , 5 bytes

?⍨1+⊢

Experimente online!

Supõe ⎕IO←0, que é o padrão em muitas máquinas.

Explicação

o argumento certo

1+ adicione 1 a ele

?⍨gerar números 0 .. 1+⊢-1 e distribuí-los aleatoriamente em uma matriz para que dois números não se repitam


2

q / kdb +, 11 bytes

Solução:

{(0-x)?1+x}

Exemplo:

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

Explicação:

Use o ? operador com uma entrada negativa para fornecer a lista completa de 0->nsem duplicatas:

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

randIntNoRep(0,Ans

Sim, um embutido. randIntNoRep(é um token de dois bytes e Ansé um byte.

Mais divertido, 34 bytes:

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

Direto do tibasicdev . Provavelmente jogável, mas ainda não encontrei nada.

O que isso faz: Classifica uma matriz aleatória, movendo elementos do segundo argumento ( L₁aqui) da mesma maneira que seus elementos correspondentes.


1

JavaScript (ES6), 51 bytes

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

2
Eu não acho isso uniforme; Eu tentei f(5)10 vezes e 5sempre foi um dos dois últimos itens.
ETHproductions

Apenas executei novamente algumas vezes e obtive 1,5,4,0,2,3& 1,0,2,5,3,4. EDIT: E mais alguns prnt.sc/fe0goe
Shaggy

3
Acabei de executar um teste rápido que é executado f(5)1e5 vezes e encontra a posição média de cada número nos resultados. A matriz resultante foi [ 1.42791, 1.43701, 2.00557, 2.6979, 3.3993, 4.03231 ], então não acho que seja uniforme. ( code )
ETHproductions

Eu acho que tenho uma solução de 93 bytes que poderia 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

A classificação do resultado de random()não é uniforme. Veja (por exemplo) en.wikipedia.org/wiki/BrowserChoice.eu#Criticism
Neil

1

Aceto , 15 14 16 bytes

@lXp
Y!`n
zi&
0r

Pressione zero na pilha, leia um número inteiro, construa um intervalo e embaralhe-o:

Y
zi
0r

Defina uma marca de captura, comprimento de teste para 0 e (nesse caso) saída:

@lX
 !`

Caso contrário, imprima o valor, uma nova linha e retorne ao teste de comprimento:

   p
   n
  &

(Eu tive que mudar o código porque percebi que interpretava mal a pergunta e havia construído um intervalo de 1-n, não 0-n.)




1

8o , 42 36 34 bytes

Código

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

SED (diagrama de efeito de pilha) é n -- a

Uso e exemplo

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

Cria uma matriz de formulário

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

Em seguida, classifica e retorna os últimos elementos na nova ordem


1

J, 11 bytes

(?@!A.i.)>:

Explicação:

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

Exemplos:

    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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.