Los números aleatorios de javascript aumentan la posibilidad de obtener algunos valores.

Hice algún tipo de función de codificación que usa una matriz con 62 caracteres (az, AZ, 0-9) y luego uso un número aleatorio para acceder a uno de estos.
pero si lo uso, devuelve muchas letras y quiero tantas letras como números (lo cual también es lógico ya que la probabilidad de un número es 10/62 versus 50/62)
¿Podría alguien decirme alguna función que genere un número aleatorio pero que tenga una mayor probabilidad de obtener un valor entre 52 y 62 que un valor inferior a 52?

preguntado el 22 de mayo de 12 a las 19:05

cuántas "oportunidades más altas" -

deben tener como una oportunidad igual 50/50 -

Lo que estás buscando es un generador de números aleatorios ponderados. javascriptkit.com/javatutors/weighrandom2.shtml tiene una manera de hacer esto. -

eso es lo que necesito muchas gracias -

4 Respuestas

Esto le da una probabilidad de 50/50 de obtener un dígito:

var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var digits = "0123456789";

function getRandomChar() {
  var r = Math.random();
  return r < 0.5 ? letters.charAt(Math.floor(r*letters.length*2)) : digits.charAt(Math.floor((r-0.5)*digits.length*2));
}

contestado el 22 de mayo de 12 a las 20:05

Si desea obtener un valor aleatorio entre, por ejemplo, 0..100 pero con una mayor probabilidad de que ocurra en 50..60, debe agregar una segunda función aleatoria en la ecuación:

var rnd = Math.round(Math.random()*( 100 - 50 ) + Math.round(Math.random()*10));

En este caso, el primer número aleatorio se genera entre 0 y 50, luego tiene la posibilidad de ser mayor hasta 60

En tu caso para 52-62 debería ser así:

var rnd = Math.round(Math.random()*( 52 ) + Math.round(Math.random()*10));

contestado el 22 de mayo de 12 a las 20:05

¿No haría esto que las primeras 10 letras del alfabeto fueran mucho menos probables? - HBP

Sí, aumenta la probabilidad, sin embargo, indica en su pregunta: "... pero eso tiene una mayor probabilidad de obtener un valor entre 52-62" - lukas.pukenis

No use Math.round(Math.random()*n). Produce números aleatorios del 0 al n, pero obtienes 0 o n la mitad de veces que los otros números. Usar Math.floor(Math.random()*n). - Guffa

Además, este método lo hará menos probable que obtenga un valor entre 52 y 62 (y menos probable que obtenga un valor entre 0 y 9). - Guffa

Entiendo por 0..9, pero ¿cómo es menos probable obtener un valor entre 52-62? - lukas.pukenis

Primero elija entre 0 y 1 (cara o cruz), si es uno, use una función separada que solo devuelva números. De lo contrario, devuelva una letra con una función separada que solo devuelva letras.

contestado el 22 de mayo de 12 a las 20:05

function getRandomIndex(){
    // flip a coin... 50% chance the if occurs, 50% chance the else occurs
    if(Math.floor(Math.random() * 2) == 0){
        // return the number random function, values 52 and up
        return Math.floor(Math.random() * 10) + 52;
    }
    else{
        // return the character random function, values 0 to 51
        return Math.floor(Math.random() * 52);
    }
}

contestado el 22 de mayo de 12 a las 20:05

Math.floor(Math.random()) es siempre 0. - Guffa

@Guffa - Ah, tienes razón, actualicé mi respuesta para dar cuenta de esto. Buena atrapada. - Seth Flores

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.