Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

149
Views
Cómo hacer que la selección aleatoria sea más... aleatoria

Tengo un JavaScript simple que crea una cadena aleatoria eligiendo "al azar"* de varias listas de otras cadenas. Cuando ejecuto el script repetidamente, noto muchas repeticiones y estoy tratando de entender por qué. Entiendo que no existe algo verdaderamente aleatorio en este contexto. Pero la repetición que estoy viendo no es sutil. Mis listas tienen de 20 a 30 elementos cada una y, con frecuencia, veo que la misma cadena aparece dos y tres veces seguidas.

Aquí está el código relevante sobre cómo se seleccionan las cadenas de las listas individuales.

 function(list) { return list[Math.floor(Math.random()*list.length)]; }

El script llama a esta función varias veces seguidas, pasando diferentes listas como parámetros.

¿Es esto un problema con mi código? ¿O tal vez algo se está almacenando en caché?

(NOTA: ¡Esto no es por seguridad! Nunca haga algo como esto como sustituto del cifrado adecuado)

about 4 years ago · Santiago Gelvez
3 answers
Answer question

0

Probé tu código de la siguiente manera:

 list = ['one','two','three','four','five','six','seven','eight','nine','ten'] for (i=0;i<10;i++) { console.log(list[Math.floor(Math.random()*list.length)]) } // RUN ONE // 'two' // 'six' // 'eight' // 'one' // 'eight' // 'two' // 'two' // 'two' // 'ten' // 'six' // RUN TWO // 'four' // 'seven' // 'nine' // 'one' // 'six' // 'six' // 'eight' // 'two' // 'nine' // 'three'

Es interesante cuánta duplicación hay, sin embargo, creo que deberías esperar algo . ¿Es posible que lo que realmente estés buscando sea un shuffle? Si es así, puede encontrar útil la respuesta a esta pregunta: ¿Cómo aleatorizar (mezclar) una matriz de JavaScript?

about 4 years ago · Santiago Gelvez Report

0

tu codigo es correcto hay una gran diferencia entre lo que los humanos creen que es la aleatoriedad y lo que realmente es la aleatoriedad. parece que puede estar considerando CUALQUIER palabra duplicada sucesiva en CUALQUIER posición en la oración como el mismo resultado. realmente no lo es; es un montón de resultados diferentes que está agrupando para llamarlo un resultado "frecuente" singular. intente elegir una palabra primero y ver cuánto tiempo tarda en aparecer como las últimas tres palabras de su oración.

Si todavía está interesado en aleatorios más fuertes, puede consultar rando.js o random.org , pero sepa que exhibirán el mismo comportamiento, y eso es algo bueno.

about 4 years ago · Santiago Gelvez Report

0

Esto es mucho código para obtener un elemento aleatorio. Lo sé, pero es solo una idea que puede ayudarte a lograr un mejor resultado.

Entonces, principalmente estoy guardando los tres números aleatorios de vista previa en una matriz y luego solo uso condiciones para ver si se debe generar un nuevo número aleatorio o no.

En la aleatoriedad, dos/tres/cuatro/... siempre son posibles los mismos números consecutivos, por lo que nunca se debe evitar tenerlos. Este código también dará los mismos elementos consecutivos pero mucho menos.

 const list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] function getRand(){ return Math.floor(Math.random() * list.length) } let previews = [null, null, null] let n = null list.forEach((el) => { n = getRand() if(previews[0] === n || previews[1] === n || previews[2] === n){ n = getRand() previews = [n, ...previews] } else { previews = [n, ...previews] } console.log(list[n]) })

about 4 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!