Un ami a une carte d'extension dans son ordinateur qui génère un nombre parfaitement aléatoire de 1 à 5 inclus. Malheureusement, ils ont renversé du cola d'une manière ou d'une autre, et il ne génère désormais que 2 pour tous les nombres de 1 à 4. Heureusement, le caractère aléatoire est préservé, mais 2 a une probabilité de 80% et 5 a une probabilité de 20%, et il n'y a pas 1, 3 ou 4 générés. À l'aide de cette source aléatoire (appelez-la BrokenRand()
ou quelque chose de similaire), écrivez un générateur de nombres aléatoires qui produit des nombres de 1 à 5 chacun avec une probabilité égale de 20% avec le même caractère aléatoire parfait que la source d'origine.
Le programme le plus court gagne. Points bonus attribués pour le nombre minimal d'appels à BrokenRand
un conseiller en matière de service client sélectionné démographiquement, répartis en fonction de l'âge et du sexe - c'est-à-dire moi.
la source
scala 79 caractères:
Maintenant, pour le vrai golf, l'alias defektRNG brokenRand est renommé b.
Comment ça marche: Le plus souvent, b renvoie une séquence de 2s. Mais si vous faites 5 appels à b, vous finirez très souvent avec un résultat de 4x2 et 1x5, c'est le deuxième événement le plus probable, et peut être 5-2-2-2-2, 2-5-2-2 -2, 2-2-5-2-2, 2-2-2-5-2 et 2-2-2-2-5.
Ceux-ci ont en commun que la somme est 4 * 2 + 5 = 13. L'index des cinq premiers peut être utilisé pour définir un nombre aléatoire valide. S'il y a plus ou moins un 5, une somme supérieure ou inférieure à 13, répétez.
Un compteur en «rnd» alias «r» peut montrer combien d'appels sont nécessaires en moyenne pour produire les numéros. Il y a 121 200 appels à r pour 50 000 numéros aléatoires, ce qui n'est pas impressionnant. :)
la source
> <> (Poisson) - 55 octets
Mis à jour pour utiliser le même algorithme que @user unknown dans sa réponse scala
Il s'attend à ce que le générateur cassé soit connecté à stdin; voici le script python que j'ai utilisé . Le code correspond à la spécification Fish actuelle, mais j'ai utilisé une version modifiée de l'ancien interpréteur.
Je ferais un plus gros échantillon mais c'est lent.
la source
GolfScript, 23 octets
Réponse tardive, mais comme cela vient d'apparaître en première page ...
Utilise le même algorithme que la solution Scala de l'utilisateur inconnu . Suppose que le générateur de nombres aléatoires biaisé est donné sous la forme d'un sous-programme GolfScript
r
; vous pouvez définir vous-même un RNG biaisé approprié, par exemple:Voici un test rapide démontrant l'absence de parti pris. Malheureusement, le serveur GolfScript en ligne est assez lent, j'ai donc dû réduire la démonstration à seulement 100 échantillons pour la terminer à temps. Si vous exécutez le test localement avec l' interpréteur GolfScript , essayez d'augmenter le
100*
à1000*
ou même10000*
.(Le serveur GolfScript se bloque parfois de manière aléatoire et expire de toute façon. Si cela se produit pour vous, réessayez généralement le résout. Cela se produit également avec un autre code, et ne se produit que sur le serveur, pas sur mon propre ordinateur, donc je suis confiant que c'est un problème avec le serveur et non avec mon code.)
la source
javascript, 160 caractères sans réduire la lisibilité aka optimisation
la source
BrockenBand()
c'est, alors?BrockenRand
function giveRandom(){return Math.ceil(Math.random()*5)}