2009-12-13 4 views
0

Fondamentalement, je dois utiliser une fonction aléatoire qui peut retourner un nombre entre 0 et 2^16-1.Essayer de générer plusieurs intervalles de chiffres dans un seul numéro (LUA)

J'essaie de faire usage de ceci et de générer, disons, 6 intervalles entre 1 et 6 (en pensant au poker aux dés). Fondamentalement, utilisez ce nombre qui est générée de façon aléatoire pour moi (je ne peux spécifier que la plage) et de préférence seulement avoir à appeler une seule fois. Puis prenez ce nombre et "divisez" en 6 dés où les valeurs seront entre 1-6. Je ne suis pas sûr de la technique que vous utiliseriez, une chose qui me vient à l'esprit est le masquage des bits mais je ne sais pas si c'est le bon contexte. D'un point de vue binaire, il est raisonnable d'avoir les valeurs de dés entre 0 et 5. Cela nous donnerait le nombre binaire 000-101. Maintenant, une valeur max du retour de la fonction aléatoire serait 101101101101101101 (six dés, chacun étant "6") et en décimal, cela signifierait que la limite supérieure du retour intemporel serait 187245. La limite inférieure serait 0. Maintenant disons fonction aléatoire nous renvoie le numéro 66508, ce qui en fait en forme binaire nous obtenons 010 | 000 | 001 | 111 | 001 | 100 et ce n'est pas assez bon! Dans ce cas, l'un des dés serait 111 = 7 et nous ne pouvons pas l'obtenir quand l'intervalle est supposé être 0-5 (1-6) :(

J'ai besoin de trouver un moyen décimal la plage limite peut contenir six dices avec les valeurs 1-6 (0-5), mais je suis dans un besoin d'assistance.

+0

faites-le avec le masquage de bits en binaire ... travaillez en base 6 a s dans la réponse de Mark Byers. –

+1

Qu'est-ce que cette question a à voir avec Lua? – lhf

Répondre

2

Vous pouvez utiliser les valeurs x % 6, (x/6) % 6, (x/6^2) % 6, ..., (x/6^5) % 6 où x est Il y aura un biais si vous faites cela, vous devriez rejeter x et resélectionner si elle est plus grande que 6 ** 6-1 si vous voulez éviter ce biais

+0

Charmant! J'étais sûr que le mod allait être utilisé dans la solution. :) – Vlad

+0

Pour un bon algorithme de génération de nombres aléatoires uniformes entre 0 et n en utilisant un module, vous pouvez voir 'java.util.Random.nextInt (int)': http://java.sun.com/javase/6 /docs/api/java/util/Random.html#nextInt(int) – Joey

Questions connexes