Mettez en œuvre un programme ou une fonction qui simule des dés communs pour les jeux de rôle. Il devrait gérer au moins le d6 et le d20, les deux dés les plus courants.
Cependant, cela devrait fonctionner comme les joueurs stéréotypés s'attendent à ce qu'ils fonctionnent, et non comme de vrais dés.
C'est une blague entre les joueurs, que l'on peut avoir un dé particulièrement chanceux pour un jet très très important, en lançant précédemment beaucoup de dés, en sélectionnant ceux qui ont abouti à un "1", puis en les lançant à nouveau, jusqu'à ce que vous obteniez quelques-uns qui ont obtenu un "1" plusieurs fois. Vous les conservez ensuite soigneusement, car ils ont roulé un 1 plusieurs fois de suite, de sorte que la probabilité de lancer un 1 la prochaine fois devrait être extrêmement faible.
Bien sûr, ce n'est pas ainsi que les dés fonctionnent dans la vraie vie , car les jets sont statistiquement indépendants.
Vos dés simulés doivent prendre en compte les jets précédents et fonctionner de la même manière que le joueur dans l'erreur du joueur s'attend à ce qu'il fonctionne. Par exemple, si de nombreux nombres faibles ont été obtenus, la probabilité de lancer un nombre plus élevé doit être augmentée.
Cependant, comme c'est de la triche, vous devez bien le cacher . Cela signifie qu'un simple coup d'œil sur le programme ne doit pas révéler que vous avez triché. Cela signifie que sauvegarder explicitement les résultats précédents et les lire à chaque lancer serait trop suspect. Vous devez cacher cette "propriété" de vos dés et des points bonus si vous la rendez plausible et que vous la dissimulez comme une erreur honnête. (par exemple, vous créez votre propre RNG avec un défaut "non intentionnel")
Votants, veuillez tenir compte de la façon dont cette "faille" est bien cachée.
Les programmes doivent être clairs et non obscurcis. Il est trop facile de cacher le code malveillant dans un programme obscurci.
getRandomBetween(1,d)
me ferait approfondir.Réponses:
Java
C'est si simple qu'il ne cache évidemment rien: mais
java.util.Random
c'est un générateur congruentiel linéaire simple, et il utilise une technique de rejet pour assurer l'uniformité, donc il garantit que dans n'importe quelle série du plus grand multiple desize
moins de 2 ^ 48 échantillons, il distribuera le les chiffres uniformément, satisfaisant à l'exigence.la source
java.util.Random
fonctionne a très peu à voir avec le comportement de cette réponse. Vraiment, ce sur quoi repose cette réponse est le fait que, comme tout RNG,java.util.Random
a une période, et si vous générez un certain nombre de nombres dans l'ordre de la période, ses propriétés statistiques se décomposent. Ce n'est pas très intéressant; la même chose se produirait même avec un RNG sécurisé cryptographiquement comme Blum Blum Shub si vous le faisiez fonctionner assez longtemps.Rubis
Actuellement ne prend en charge que d6, ajoutera la prise en charge d20 plus tard ...
Et voilà, ces dés sont méchants!
la source
Haskell
Utilisez une chose au hasard pour en faire une autre au hasard: dans ce cas, mélangez les cartes pour générer des lancers de dés.
Prend un argument, le nombre de faces sur le dé. La sortie est comme ceci:
... et ainsi de suite pour toutes les cartes (les rejets ne sont pas imprimés). Trop évident?
la source