A falácia do jogador é um viés cognitivo em que, por engano, esperamos que coisas que ocorreram com frequência sejam menos prováveis de ocorrer no futuro e que coisas que não ocorreram há algum tempo sejam mais prováveis de acontecer em breve. Sua tarefa é implementar uma versão específica disso.
Explicação do desafio
Escreva uma função que retorne um número inteiro aleatório entre 1 e 6, inclusive. O problema: na primeira vez em que a função é executada, o resultado deve ser uniforme (dentro de 1%); no entanto, cada chamada subsequente será inclinada em favor de valores que foram lançados menos vezes anteriormente. Os detalhes específicos são os seguintes:
- O dado lembra as contagens de números gerados até agora.
- Cada resultado é ponderado com a seguinte fórmula:
- Por exemplo, se a contagem de rolos até agora for , os pesos serão , ou seja, você será 4 vezes mais chances de rolar um que um .
- Observe que a fórmula significa que um resultado de rolagem de é ponderado da mesma forma que
Regras e premissas
- Regras de E / S padrão e brechas proibidas se aplicam
- Os rolos de matriz não devem ser determinísticos. (ou seja, use um PRNG semeado a partir de uma fonte volátil, como normalmente está disponível como embutido.)
- Sua fonte aleatória deve ter um período de pelo menos 65535 ou ser uma aleatoriedade verdadeira.
- As distribuições devem estar dentro de 1% para pesos de até 255
- RNGs de 16 bits são bons o suficiente para atender aos dois requisitos acima. A maioria dos RNGs embutidos é suficiente.
- Você pode passar na distribuição atual desde que essa distribuição seja alterada pela chamada ou a distribuição pós-roll seja retornada ao lado do rolo de molde. Atualizar a distribuição / contagens faz parte desse desafio .
- Você pode usar pesos em vez de contagens. Ao fazer isso, sempre que um peso cai para 0, todos os pesos devem aumentar em 1 para obter o mesmo efeito que as contagens de armazenamento.
- Você pode usar esses pesos como repetições de elementos em uma matriz.
Boa sorte. Que os bytes estejam sempre a seu favor.