Um amigo possui um cartão complementar em seu computador que gera um número perfeitamente aleatório de 1 a 5, inclusive. Infelizmente, eles derramaram cola de alguma forma, e agora gera apenas 2 para todos os números de 1 a 4. Felizmente, a aleatoriedade é preservada, mas 2 tem uma probabilidade de 80% e 5 tem uma probabilidade de 20%, e não há 1, 3 ou 4 gerados. Usando essa fonte aleatória (chame-a BrokenRand()
ou algo similar), escreva um gerador de números aleatórios que produza números de 1 a 5, cada um com uma probabilidade igual de 20% com a mesma aleatoriedade perfeita que a fonte original.
O programa mais curto vence. Pontos de bônus concedidos pelo número mínimo de chamadas a serem BrokenRand
prestadas imparcialmente por uma consultoria de atendimento ao cliente selecionada demograficamente, discriminada por idade e sexo - ou seja, eu.
fonte
scala 79 caracteres:
Agora, para o golfe real, o apelido defektRNG brokenRand é renomeado para b.
Como funciona: Na maioria das vezes, b retorna uma sequência de 2s. Mas se você fizer 5 chamadas para b, muitas vezes terminará com um resultado de 4x2 e 1x5, é o segundo evento mais provável e poderá ser 5-2-2-2-2, 2-5-2-2 -2, 2-2-5-2-2, 2-2-2-5-2 e 2-2-2-2-5.
Estes têm em comum que a soma é 4 * 2 + 5 = 13. O índice dos cinco primeiros pode ser usado para definir um número aleatório válido. Se houver mais ou menos de um 5, uma soma maior ou menor 13, repita.
Um contador em 'rnd' aka 'r' pode mostrar quantas chamadas são necessárias, em média, para produzir os números. Existem 121 200 chamadas para r para 50 000 números aleatórios, o que não é impressionante. :)
fonte
> <> (Peixe) - 55 bytes
Atualizado para usar o mesmo algoritmo que @user desconhecido em sua resposta scala
Ele espera que o gerador quebrado seja conectado ao stdin; aqui está o script python que eu usei . O código corresponde à especificação atual do Fish, mas usei uma versão modificada do antigo intérprete.
Eu faria uma amostra maior, mas é lenta.
fonte
GolfScript, 23 bytes
Resposta tardia, mas como isso apareceu na primeira página ...
Usa o mesmo algoritmo que a solução Scala do usuário desconhecido . Assume que o gerador de números aleatórios tendenciosos é fornecido como uma sub-rotina GolfScript denominada
r
; você pode definir um RNG tendencioso adequado, por exemplo, como:Aqui está um teste rápido que demonstra falta de viés. Infelizmente, o servidor GolfScript on-line é meio lento, então tive que reduzir a demonstração para apenas 100 amostras para concluir a tempo. Se estiver executando o teste localmente com o intérprete GolfScript , tente aumentar
100*
para1000*
ou mesmo10000*
.(O servidor GolfScript também às vezes congela e expira aleatoriamente de qualquer maneira. Se isso acontecer com você, tentar novamente normalmente o soluciona. Isso acontece com outro código também e só acontece no servidor, não no meu próprio computador, por isso estou confiante que é um problema com o servidor e não com o meu código.)
fonte
javascript, 160 caracteres sem reduzir a legibilidade, também conhecido como otimização
fonte
BrockenBand()
é, então?BrockenRand
function giveRandom(){return Math.ceil(Math.random()*5)}