Eu estava respondendo a um desafio aqui e essa tarefa fazia parte do desafio. Eu tenho uma solução de 73 bytes em javascript. Mas acho que é demais para uma coisa simples.
Desafio
Dado como entrada dois números inteiros:
N
o comprimento da matriz esperadaR
o intervalo do intervalo começando em um:,1..R
não0..R-1
Produza em cada execução do seu programa / função uma matriz diferente de comprimento N
com valores entre 1..R
de tal maneira que nenhum valor ocorra mais de uma vez.
Você deve usar R-value
no seu código.
Restrições
Você pode assumir: 2 <= N <= R
.
Eu realmente gostaria de ver uma solução javascript menor que a minha 73 bytes.
Mas é claro, está aberto a todas as línguas!
Se o seu idioma não puder retornar uma matriz, você poderá imprimir todos os números;)
code-golf
random
permutations
removido
fonte
fonte
R=N=1
). Em seguida, recomendo permitir os intervalos0..R
como alternativa, pois isso é mais natural para muitos idiomas.shuffle(0..N)
new Date
produz valores não uniformes. Além disso, eu acredito que você pode golfe paranew Date%r+1
;)Respostas:
Dyalog APL, 1 byte
Apenas um builtin. Experimente aqui .
fonte
JavaScript (ES6),
6866 bytesChamado como
F(N)(R)()
, ondeF
está a atribuição da função eN
/R
são os valores.Você solicitou menos de 73 bytes em Js;)
EDIT: A resposta de @ C5H8NNaO4 funciona dentro do fato de que as regras não especificam os valores devem ser uniformes
1..R
. Dado que, aqui está uma versão que funciona em 63 bytes (chamada comoF(R)(N)
):fonte
Oitava,
22 199 bytesrandperm(r,n)
faz exatamente o que é solicitado. Observe que isso não funciona (pelo menos não nas versões mais antigas) no Matlab.fonte
@(n,r)randperm(r,n)
randperm
com duas entradas funciona nas versões recentes do Matlab. Há tambémrandsample
, mas é preciso mais bytes, a menos que você pode se livrar do@(...)
(acho que é permitido)@randperm
=)TI-84 BASIC OS 4.0, 12 bytes
A TI-84 + CSE (2013) e a CE (2015) são essencialmente o mesmo dialeto BASIC limitado da TI-84 +, mas existem alguns novos recursos. Um deles é o terceiro argumento de randIntNoRep.
fonte
MATL , 2 bytes
As entradas são: primeiro
R
e depoisN
.Experimente online!
Explicação
A função
Zr
recebe duas entradas (implicitamente neste caso) e faz uma amostragem aleatória sem substituição. A primeira entrada,,R
especifica que a população é[1,2,...,R]
; e a segunda entrada,,N
indica o número de amostras a serem coletadas da população.fonte
J,
43 bytesUm byte economizado graças ao Zgarb! ( Riscado quatro ainda é um regular quatro: D )
ligue como
N (1+?) R
, por exemplo3 (1+?) 10
,. Isso usa o operador "Rolar" e faz exatamente o que é descrito, exceto em0...n-1
. Se pudéssemos fazer isso, a resposta seria 1 byte,fonte
Pitão, 6 bytes
Experimente aqui!
O alcance vem na primeira linha e o comprimento na segunda.
Explicação
Versão não concorrente de 5 bytes
A última adição ao Pyth adiciona
Q
s implícitos no final do programa, se necessário. Podemos usar isso aqui revertendo o formato de entrada, para que o comprimento chegue primeiro e depois o intervalo.Experimente aqui!
Aqui
E
está o intervalo, com o qual transformamos em uma lista baseada em 1S
, embaralha-o.S
e pega os primeirosQ
elementos<
.<
espera um número inteiro que é implicitamente adicionado com aQ
.fonte
Reng v.2.1,
1401039897 bytesIsso deve funcionar em versões anteriores também.
Você pode tentar aqui! A entrada é
maximum length
, como10 3
.Estou tão orgulhoso disso que você nem sabe. Se alguém me vencer com uma resposta Java, isso fará o meu dia. Se eu vencer uma resposta Java, considere meu dia também.
Vou explicar mais tarde, depois que eu me recuperar. Geralmente, porém:
Isso gera os números aleatórios. A outra parte verifica se há duplicatas e, se houver, o processo é repetido. Senão, os resultados são impressos, com espaços unindo os resultados.
aqui estão alguns exemplos:
fonte
CJam, 8 bytes
Experimente aqui!
Este é um bloco sem nome que espera o intervalo no topo da pilha e o comprimento na parte inferior e deixa uma lista na pilha.
Explicação
fonte
Lisp comum, 90
52 apenas para a expressão
Ungolfed
Como outras respostas, se eu não contar o pacote de uso e o lambda , a expressão restante será
(coerce(subseq(shuffle(iota R :start 1))0 N)'vector)
52 bytes.fonte
Ruby,
2723 bytesFunção anônima, razoavelmente curta e doce.
-4 bytes de @manatwork
fonte
->n,r{[*1..r].sample n}
Use a marcação do bloco de código em vez da marcação embutida, para que scripts como o Code Golf UserScript Enhancement Pack possam inserir o tamanho do código ao lado., 10 caracteres / 13 bytes
Try it here (Firefox only).
Explicação
fonte
Bash + coreutils, 16
Eu acho que isso é auto-explicativo:
Entrada
N
eR
como parâmetros de linha de comando.Ou como @rici aponta, para a mesma pontuação:
Ideone.
fonte
shuf -n$1 -i1-$2
(mesmo comprimento, no entanto).PowerShell v2 +, 30 bytes
Recebe entrada
$n
e$r
, constrói um intervalo1..$r
, canalizaGet-Random
com um-C
ount de$n
, que selecionará$n
elementos exclusivos do intervalo. A saída é deixada no pipeline como uma matriz implícita.fonte
Sério, 5 bytes
Experimente online!
Explicação:
fonte
Clojure, 38 bytes
Uma função anônima que leva N primeiro e R segundo.
fonte
Perl 6, 32 bytes
fonte
Python 3.5 -
5453 bytes:Isso usa a
sample()
função do módulo aleatório para retornar uma matriz com o comprimento "a" que consiste em elementos únicos e aleatórios no intervalo1 => c
.fonte
D, 29 bytes (apenas expressão)
Supondo que std.random e std.range tenham sido importados e que n e r sejam definidos como variáveis, o programa pode ser resolvido na expressão única:
fonte
ES6, 72
Como na resposta do @ Mwr247 , você pode chamá-lo com
F(R)(N)
,F
sendo a expressão da funçãofonte
Mathcad, 67 "bytes"
cria um vetor de coluna de números inteiros consecutivos no intervalo 1..R, une-o a um vetor de coluna de comprimento R de números aleatórios (uniformes), classifica a matriz Rx2 resultante na coluna de número aleatório e extrai os primeiros n números do coluna aleatória de números inteiros.
fonte
Python, 56 (o caminho óbvio)
fonte
from random import*;lambda N,R:sample(range(1,R+1),k=N)
é mais curto por um bytefrom random import*
, deve ter estragado a contagem.Perl 5,
5143 bytesSub anônimo bastante direto que gera uma matriz de 1 a R e, em seguida, emenda N elementos aleatórios a partir dela para retornar. Ligue com
->(N, R)
.fonte
TI-84 BASIC, 21 bytes
fonte
Ans
como entrada, conforme uma meta post recente.