Implemente um programa ou função que simule dados comuns para jogos de RPG. Ele deve lidar com pelo menos o d6 e o d20, os dois dados mais comuns.
No entanto, deve funcionar como jogadores estereotipados esperam que eles funcionem, e não como dados reais.
É uma piada entre os jogadores, que se pode ter um dado especialmente sortudo por um lançamento muito importante, jogando muitos dados anteriormente, selecionando aqueles que resultaram em um "1" e depois jogando-os novamente, até que você obtenha alguns que rolaram um "1" várias vezes. Em seguida, você os preserva com cuidado, porque eles rolaram um 1 várias vezes em sequência, portanto a probabilidade de rolar um 1 na próxima vez deve ser extremamente baixa.
Obviamente, não é assim que os dados funcionam na vida real , porque os lançamentos são estatisticamente independentes.
Seus dados simulados precisam levar em consideração as jogadas anteriores e funcionar da mesma forma que o jogador na falácia do jogador espera que ele funcione. Por exemplo, se muitos números baixos forem rolados, a probabilidade de rolar um número maior deve ser aumentada.
No entanto, como isso é trapaça, você precisa escondê-lo bem . Isso significa que uma olhada casual no programa não deve revelar que você trapaceou. Isso significa que salvar explicitamente os resultados anteriores e lê-los a cada lançamento seria muito suspeito. Você precisa ocultar essa "propriedade" dos seus dados e pontos de bônus se a tornar plausível negável e disfarçá-la como um erro honesto. (por exemplo, você cria seu próprio RNG com uma falha "não intencional")
Eleitores, por favor, levem em conta o quão bem oculta essa "falha" está.
Os programas devem ser claros e não ofuscados. É muito fácil ocultar códigos maliciosos em um programa ofuscado.
getRandomBetween(1,d)
me levaria a aprofundar o assunto.Respostas:
Java
É tão simples que obviamente não está escondendo nada: mas
java.util.Random
é um gerador congruencial linear direto e usa uma técnica de descarte para garantir uniformidade, garantindo assim que, em qualquer execução do maior múltiplo desize
maior que 2 ^ 48 amostras, ele distribuirá o uniformemente, satisfazendo o requisito.fonte
java.util.Random
executa tem muito pouco a ver com o comportamento dessa resposta. Realmente, o que esta resposta se baseia é o fato de que, como qualquer RNG,java.util.Random
possui um período, e se você gerar um número de números na ordem do período, suas propriedades estatísticas serão quebradas. Isso não é muito interessante; o mesmo aconteceria com um RNG criptograficamente seguro como Blum Blum Shub se você o executasse por tempo suficiente.Rubi
Atualmente, suporta apenas d6, adicionará suporte ao d20 mais tarde ...
Eis que esses dados são desagradáveis!
fonte
Haskell
Use uma coisa aleatória para criar outra coisa aleatória: nesse caso, embaralhe as cartas para gerar jogadas de dados.
Leva um argumento, o número de faces no dado. A saída é assim:
... e assim por diante para todos os cartões (os descartes não são impressos). Muito óbvio?
fonte