2010-10-13 47 views
1

Étant donné deux générateurs entiers aléatoires qui génèrent entre 1 et 7 et un autre qui génère entre 1 et 5, comment créer un générateur d'entiers aléatoires qui génère entre 1 et 13? J'ai essayé de résoudre cette question de diverses manières, mais je n'ai pas réussi à trouver une solution qui génère des nombres de 1 à 13 avec une probabilité égale ou presque égale.Combinaison de générateurs de nombres aléatoires

+0

Essayez: http://stackoverflow.com/questions/1268025/using-one-probability-set-to -generate-another – Jander

Répondre

1

En utilisant les deux premières réponses pour Expand a random range from 1–5 to 1–7, j'ai trouvé ce qui suit. Il y a probablement un moyen plus efficace de le faire (peut-être en utilisant le générateur 1-5?) Mais cela semble fonctionner.

optimisé pour Compacité

var j; 
    do { 
     j = 7 * (rand7() - 1) + rand7(); // uniformly random between 1 and 49 
    } while (j > 39); 
    // j is now uniformly random between 1 and 39 (an even multiple of 13) 
    j = j % 13 + 1; 

optimisé pour compréhensibilité

var v = [ 
    [1, 2, 3, 4, 5, 6, 7], 
    [8, 9, 10, 11, 12, 13, 1], 
    [2, 3, 4, 5, 6, 7, 8], 
    [9, 10, 11, 12, 13, 1, 2], 
    [3, 4, 5, 6, 7, 8, 9], 
    [10, 11, 12, 13, 0, 0, 0], 
    [0, 0, 0, 0, 0, 0, 0] 
]; 
var j = 0; 
while (j == 0) { 
    j = v[rand7() - 1][rand7() - 1]; 
} 
+0

Belle solution, merci beaucoup. :) – Anand