Porque não existem desafios simples de código-golfe simples o suficiente :
Crie um programa ou função opcionalmente sem nome que, dado (por qualquer meio) um número inteiro 1 ≤ N ≤ 10000, produz o valor True do seu idioma com uma probabilidade pseudo-aleatória de 1 / N, caso contrário, False.
Observe que o requisito de nomeação foi removido. Sinta-se livre para editar respostas e pontuações de acordo.
Alguns idiomas usam 1 (ou -1) e 0 para Verdadeiro e Falso, isso também é bom.
Exemplo:
Testes de entrada de exemplo:
4 -> True
4 -> False
4 -> False
4 -> False
4 -> False
4 -> True
4 -> False
4 -> False
Ou seja, dado 4; retorna True com 25% de chance e False com 75% de chance.
N
que temos que aceitar?Respostas:
Modelos do MediaWiki com ParserFunctions , 48 bytes
fonte
#time
, provavelmente para atualizar a idade das pessoas que vivem, etc.Pitão, 3 bytes
Experimente online
Inversão simples de escolha aleatória de 0 a entrada
Divertidamente no Pyth, não é possível criar uma função que faça isso sem,
$
porque as funções do Pyth são automaticamente memorizadas.fonte
Q
preenchimento no final, caso contrário eu teria respondido!O
;)CJam, 5 bytes
Tem que ser rápido com esses ...
Teste aqui.
Explicação
fonte
TI-BASIC, 4 bytes usando tokens de um byte
Determina se a parte inteira da entrada multiplicada por um número aleatório em [0,1) é zero.
Ansrand<1
também funciona.fonte
MATL, 5 bytes
Três versões diferentes desta, todas de comprimento 5.
que pega uma entrada (
i
), gera um número inteiro aleatório entre 1 e esse número (Yr
) e vê se é igual a 1 (1=
). Alternativamente,faça um 1 (
l
, uma solução alternativa porque existe um erro ao fazer1i
no momento), pegue uma entrada (i
), divida para obter 1 / N (/
), faça um número aleatório entre 0 e 1 (r
) e veja se o aleatório número é menor que 1 / N. Ou,take e input (
i
) e multiplique por um número aleatório entre 0 e 1 (r*
) e veja se o resultado é menor que 1 (1<
).No Matlab, não no MATL, você pode executar esta função anônima
por 12 bytes, usado por
ans(5)
exemplo, por exemplo.fonte
JavaScript ES6, 15 bytes
-5 bytes graças ao Downgoat.
Baseado nos usos da técnica desta resposta.
fonte
new Date
também pode funcionar e pode salvar alguns bytes #Julia,
171615 bytesEssa é uma função que gera um número inteiro aleatório entre 1 e
n
testa se é menor que 2. Haverá uma chance de 1 / n disso acontecer e, portanto, uma chance de 1 / n de retornartrue
.Guardado 1 byte graças a Thomas Kwa!
fonte
Microscript II , 3 bytes
Lê um número inteiro
n
, gera um número inteiro aleatório entre0
en-1
(inclusive) e aplica uma negação booleana a esse valor.fonte
Doce , 2 bytes
H significa Heisen-double
n significa não
O 'n' é passado com o sinalizador -i como entrada numérica. Os valores deixados na pilha são impressos na saída.
"Forma longa:
fonte
-i
como um byte.lambda x: random.random()<1/x
(não destruído) também é "especificado gratuitamente" que o argumento é um número.Sério, 3 bytes
0
é falsey e1
é verdade. Experimente onlineExplicação:
fonte
R,
3022 bytescódigo
Ele gera um número a partir de uma distribuição uniforme (0 a 1) e deve ser avaliado como verdadeiro 1 / n das vezes.
fonte
Japonês, 6 bytes
Experimente online!
Mr
é equivalente a JSMath.random
. O resto é bastante óbvio. Provavelmente eu poderia adicionar uma função numérica que gera uma flutuação aleatória entre 0 e o número. Quando isso acontece, dois bytes serão salvos:Versão alternativa:
Ð
é equivalente anew Date(
, e o objeto Date, quando solicitado a converter em um número, se torna o carimbo de data / hora atual em milissegundos. Portanto, isso é inteiramente aleatório, a menos que seja executado várias vezes por ms.fonte
Marbelous , 21 bytes
Eu tomei
0
a ser Falsey e1
ser truthy, embora não há nenhuma razão real para que, vendo como Marbelous realmente não tem um caso. Mais Marbelousy seria produzido para{0
para verdadeiro e{>
falso. Isso ficaria assim:Mas não tenho certeza se isso é válido.
fonte
APL,
63 bytesEste é um trem de funções que pega um número inteiro e retorna 1 ou 0 (verdadeiro / falso do APL). Geramos um número inteiro aleatório de 1 para a entrada usando e
?
, em seguida, verificamos se a entrada é igual a esse número inteiro. Isso resulta em uma chance de 1 / entrada de verdade.Economizou 3 bytes graças a Thomas Kwa!
fonte
⊢
vez de '+' porque+
significa Conjugar para números complexos. É claro que não importa aqui, e+
é a função tradicional de identidade (não operacional), mas agora temos⊢
(o mesmo). Outras no-ops para escalares são:⌷
(materializar),⊃
(escolher),⊂
(incluir),↑
(dividir),↓
(misturar),∪
(exclusivo),∊
(alistar),,
(ravel),⍪
(tabela),⌽
(reverso),⊖
(reverso) primeiro) e⍉
(transpor). Alguns alteram o escalar em um vetor ou matriz.PlatyPar , 3 bytes
#?
obtém um número aleatório[0,n)
onden
é inserido.!
retornatrue
se o número anterior0
, caso contrário, ele retornafalse
.Usando os recursos mais recentes que foram implementados (mas infelizmente não comprometidos) antes que essa pergunta fosse feita, posso reduzi-lo a 2 com
~!
Experimente online !fonte
Java, 43 bytes
fonte
a->a*Math.random()<1
é mais curto.C, 24 bytes
fonte
return
sem of(n)
não faz nenhum sentido sintaticamente.rand()%n
é uma maneira padrão de obter um número aleatório no intervalo0..n-1
. Você está correto, ele depende den
ser muito menor do queRAND_MAX
mas não há limite superiorn
mencionado na pergunta. Uma abordagem alternativa seria rejeitar e repetir todos os números den
até RAND_MAX, mas seria irremediavelmente ineficiente em pequena escalan
.> <>, 27 + 3 para -v = 30 bytes
Aqui está uma solução não uniforme onde eu modifique N a soma de 15876 escolhas aleatórias de 0 ou 1:
N deve ser inserido na pilha com o sinalizador -v, a saída é 0 para falsey e 1 para verdade.
Uma solução muito mais inteligente e uniforme, que funciona por 1/2 ^ N:
Para uma entrada 3, você tem 1/8 de chance de obter 1 e 7/8 de obter 0.
Explicação:
Anexo o quanto
x
for necessário na quarta linha e os cerco com instruções para que haja apenas duas maneiras de sairx
: a saída falsey ou a próximax
. Se tudox
for na direção certa, o último encaminhará para a saída de verdade.Por exemplo, para N = 5, o espaço de código final é o seguinte:
fonte
(iterNum/2)%N
. Eu não acho que usar um número menor também seria uma solução. Talvez eu não tenha entendido bem você, ou você teria alguma idéia para melhorar a solução?Mathematica,
1816 bytesSolução básica. O sem nome
Function
cria um número aleatório em [0, 1), multiplica-o por seu argumento e verifica se ainda é menor que 1.fonte
Python, 42 bytes
Editar : a
time.time()
resposta foi removida devido à distribuição.fonte
random
vale a penafrom random import*
economizarrandom.
. Não portime
enquanto.n
o efeito pode ser perceptível. Eu acho que1>time.time()%1*n
poderia funcionar.rand
C etime.time
Python ... Uma característica óbvia do último é que ele retorna o tempo atual , que é ilimitado, para quetime.time()%n
tenha uma distribuição uniforme (por períodos de tempo suficientemente longos) para qualquern
.TeaScript , 3 bytes
Experimente aqui.
Explicação
fonte
®
representa o caractere,'\xae'
portanto, é apenas um byte. :)Fuzzy Octo Guacamole, 10 bytes
Explicação:
fonte
Perl 6 ,
108 bytesEste código cria um intervalo de 0 até, mas excluindo a entrada
*
. Então elepick
é um aleatoriamente e!
retorna True quando recebe a0
.Isso pega a entrada
*
e a multiplica por um Num aleatório a partir de0..^1
então retorna True se fosse menor que1
.fonte
Prolog (SWI), 24 bytes
Código:
talvez (+ P) é uma função que obtém sucesso com a probabilidade P e falha com a probabilidade 1-P
Exemplo:
fonte
PowerShell, 25 bytes
A
Get-Random
função quando recebe um-Ma
parâmetro ximumn
retorna um valor do intervalo[0,n)
. Aproveitamos isso ao subtrair 1 de nossa entrada$args[0]
, para que possamos indexar corretamente zero e obter um valor aleatório. Precisamente1/n
na época, esse valor será0
, portanto, quando Booleano - e não com!
ele, ele retornaráTrue
. Os outros horários retornarãoFalse
.fonte
J, 3 bytes
Este é um garfo monádico que leva um argumento à direita. Da mesma forma que APL,? gera um número inteiro aleatório; no entanto, as matrizes J são baseadas em zero. Então, comparamos com 0 em vez de com a entrada.
fonte
Minkolang 0.14 , 7 bytes
Experimente aqui.
Explicação
fonte
PHP, 22 bytes
Lê
n
na linha de comando, como:Outputs
(
false
é convertido para uma string vazia no PHP) ou1
(no caso detrue
).fonte
C #,
5645 bytesGraças a, pinkfloydx33, são 45 agora.
56 bytes antigos
Gera um número inteiro positivo aleatório maior ou igual a 0 e menor que
n
e verifica se é menor que1
e retorna o resultado da comparação.fonte
Random.Next(k)
retorna um número inteirok
como esse0 <= k < n
. Alterando a condição para<1
, estará correto. Além disso, o uso de uma expressão lambda pode diminuir o seu código.0 < k <= n
e deve ser como você disse. Eu vou corrigi-lo imediatamente.var r
salva três. Ou, se for o c # 6,bool a(int n) => new Random().Next(n)<1;
para 41. Embora não tenha certeza se a inicialização de uma novaRandom
chamada por método funcionará corretamente na distribuição?coçar, arranhão , 63 bytes
Experimente online!
Imagem: Código de blocos de rascunho :
fonte