BrowserTools
Publicidad
Inicio / Varios / Selector Aleatorio: Lista, Moneda, Dados, Número

Selector Aleatorio: Lista, Moneda, Dados, Número

Elige un elemento al azar de una lista, lanza una moneda, tira dados o genera un número aleatorio.

Cargando Selector Aleatorio: Lista, Moneda, Dados, Número… Si no ocurre nada, activa JavaScript.

La verdadera aleatoriedad es sorprendentemente difícil de lograr con un ordenador. Los ordenadores son máquinas deterministas: dado el mismo estado inicial, producen la misma salida. Los primeros generadores de números aleatorios para juegos y simulaciones usaban fórmulas matemáticas, normalmente generadores congruenciales lineales, que producen secuencias que parecen aleatorias pero que son totalmente predecibles si conoces el valor de la semilla y el algoritmo. Esta distinción entre la aleatoriedad verdadera y la pseudoaleatoriedad importa enormemente en contextos como la criptografía, donde una secuencia predecible puede explotarse, pero también en sorteos justos, rifas y juegos donde la imprevisibilidad verificable forma parte del contrato social.

Preguntas frecuentes

¿Mis listas o resultados se almacenan o se envían a un servidor?
No. Todo lo que introduces en la herramienta y todos los resultados que produce existen únicamente en la pestaña de tu navegador. No se transmite ningún dato por la red, no se guarda ninguna lista en ninguna base de datos y no se registra ningún resultado. Cerrar la pestaña descarta todo de forma permanente.
¿Cuál es la diferencia entre Math.random() y crypto.getRandomValues()?
`Math.random()` usa un generador de números pseudoaleatorios, normalmente xorshift128+ en los motores modernos, que es rápido pero se siembra de forma determinista y no está diseñado para ser impredecible. `crypto.getRandomValues()` extrae de la reserva de entropía del sistema operativo, alimentada por fuentes de ruido por hardware, y está diseñado para que sea computacionalmente inviable predecirlo. Esta herramienta usa `crypto.getRandomValues()` para todas las selecciones aleatorias.
¿Cómo funciona el lanzamiento de moneda? ¿Es realmente 50/50?
Sí. El lanzamiento de moneda genera un solo bit criptográficamente aleatorio: un entero aleatorio de 32 bits de `crypto.getRandomValues`, y luego comprueba si es par o impar. Cada lanzamiento es totalmente independiente de todos los anteriores, y la probabilidad de cara o cruz es exactamente del 50 % en cada lanzamiento, igual que una moneda física que no tiene memoria.
¿Puedo usar esto para una rifa o competición justa?
Sí, y es uno de los mejores casos de uso. Introduce todos los nombres de los participantes o los números de los boletos en la lista, uno por línea, y elige uno (o varios sin reposición). Como el generador subyacente es criptográficamente seguro y se ejecuta en tu navegador, no hay ningún operador que pueda influir en el resultado. Para sorteos de gran trascendencia, considera grabar la pantalla con la consola del navegador mostrando los valores aleatorios en bruto para tener un registro de auditoría.
¿Puedo elegir varios elementos de una lista sin repetir el mismo elemento?
Sí. En el modo de lista, fija el recuento "Elegir N" en el número de elementos que necesitas y activa la opción "Sin repeticiones". La herramienta realiza un barajado de Fisher-Yates, que produce una permutación uniformemente aleatoria, y devuelve los primeros N elementos de la lista barajada. Cada elemento aparece como máximo una vez en el resultado.
¿Cómo funciona la tirada de dados con varios tipos de dados?
Para cada dado, la herramienta genera un entero criptográficamente aleatorio en el rango de 1 al número de caras del dado (1d6 da 1–6, 1d20 da 1–20, y así sucesivamente). Varios dados se tiran de forma independiente y sus valores se suman cuando corresponde. Puedes combinar distintos tipos de dados, como 2d6 + 1d8, para replicar la mecánica de sistemas concretos de juegos de rol de mesa.
¿Es esta herramienta adecuada para generar números aleatorios con fines criptográficos?
Los valores aleatorios se generan con `crypto.getRandomValues`, que es criptográficamente seguro. Sin embargo, esta herramienta está diseñada para la selección aleatoria de cara al usuario y no produce entropía en bruto ni arrays de bytes. Para generar claves criptográficas, nonces o tokens, usa una biblioteca o herramienta de generación de claves dedicada en lugar de leer los números mostrados aquí.
¿Qué es un barajado de Fisher-Yates y por qué importa?
El algoritmo de Fisher-Yates (también llamado barajado de Knuth) es el método estándar para producir una permutación uniformemente aleatoria de una lista. Itera del último elemento al primero, intercambiando cada elemento con uno elegido al azar en su posición actual o antes de ella. Todos los ordenamientos posibles de la lista son igual de probables. Los algoritmos de barajado ingenuos, como ordenar por claves aleatorias, producen distribuciones sesgadas donde algunos ordenamientos son más probables que otros.
¿Puedo elegir un elemento al azar con elementos que tengan probabilidades diferentes?
Esta herramienta trata todos los elementos de la lista como igual de probables. Para simular probabilidades ponderadas, añade los elementos a la lista varias veces en proporción a su peso deseado; por ejemplo, si el elemento A debería ser el doble de probable que el elemento B, pon A dos veces y B una vez. Esto equivale a un sistema de boletos de lotería ponderado y no requiere ninguna función especial de la herramienta.
¿Qué pasa si dos personas ejecutan esta herramienta a la vez? ¿Podrían obtener el mismo resultado?
Sí, teóricamente. Cada instancia del navegador genera su propia secuencia aleatoria independiente, sin coordinación entre usuarios. Dos personas que ejecutan la herramienta a la vez podrían obtener el mismo resultado por coincidencia, con la misma probabilidad que cualquier otro desenlace coincidente. Para sorteos donde se requiere unicidad entre varios usuarios simultáneos, como asignar ID aleatorios sin solapamiento, hace falta en su lugar un enfoque coordinado por el servidor.

Acerca de Selector Aleatorio: Lista, Moneda, Dados, Número

La necesidad de elegir al azar surge constantemente en la vida cotidiana y en contextos técnicos. Los profesores usan selectores aleatorios para preguntar a los alumnos sin mostrar favoritismos. Los organizadores de rifas eligen ganadores de premios entre largas listas de participantes. Los directores de juego tiran dados para resolver los desenlaces de los juegos de rol de mesa. Los desarrolladores necesitan asignar usuarios de prueba al azar a las cohortes de un experimento A/B, barajar arrays de datos o generar conjuntos de datos de muestra aleatorios. Quienes toman decisiones usan lanzamientos de moneda y generadores de números aleatorios para deshacer empates o introducir una variabilidad deliberada en procesos que de otro modo podrían desarrollar sesgos sistemáticos. Las ligas deportivas usan sorteos aleatorios para asignar cuadros y enfrentamientos.

Esta herramienta usa `crypto.getRandomValues`, el mismo generador de números pseudoaleatorios criptográficamente seguro (CSPRNG) que los navegadores usan para el material de claves de TLS y la generación de contraseñas. A diferencia de `Math.random()`, que usa un algoritmo sin semilla que puede predecirse a partir de la salida observada y que explícitamente no es adecuado para fines de seguridad, `crypto.getRandomValues` extrae su entropía de las fuentes de ruido por hardware del sistema operativo: la temporización de interrupciones, el ruido térmico y otros fenómenos físicos impredecibles. Esto significa que cada elección es independiente de todas las elecciones anteriores y no puede predecirse ni revertirse. Todo se ejecuta en el navegador, no interviene ningún servidor, y no se almacena ninguna lista ni resultado.

Unas cuantas notas prácticas: al elegir varios elementos de una lista sin reposición (cada elemento solo puede elegirse una vez), la herramienta realiza un barajado de Fisher-Yates de la lista y devuelve los primeros N elementos. Esto es matemáticamente equivalente a poner nombres en un sombrero e ir sacándolos uno a uno. Para las tiradas de dados, puedes combinar varios tipos de dados, 1d6 + 1d20 + 2d8, para replicar la mecánica de los juegos de rol de mesa. Para los rangos numéricos, los extremos son inclusivos en ambos lados. Si quieres un sorteo aleatorio ponderado, donde algunos elementos son más probables que otros, duplica esos elementos en tu lista de forma proporcional antes de ejecutar el selector.

De tirar huesos al ruido cuántico: cinco milenios intentando generar aleatoriedad

Los humanos han buscado una aleatoriedad fiable desde que han necesitado tomar decisiones justas, repartir herencias o consultar a lo divino. Los dispositivos de aleatoriedad más antiguos que se conocen son los astrágalos (tabas), los huesos del tobillo de las ovejas, usados como dados en Mesopotamia y Egipto ya hacia el 3000 a. C. La práctica romana de echar suertes (sortes) usaba guijarros, fragmentos de cerámica o fichas de madera sacados de un recipiente. Se dice que Julio César dirimía disputas a suertes, y la propia palabra "lotería" deriva del francés antiguo "lot", que significa destino o porción.

El primer generador de números aleatorios algorítmico lo publicó John von Neumann en 1946 como el método de los cuadrados medios: tomas un número, lo elevas al cuadrado, extraes los dígitos del medio y repites. El propio Von Neumann no se hacía ilusiones; señaló que cualquiera que use métodos aritméticos para producir números aleatorios está en estado de pecado. El método era determinista y se volvía periódico rápidamente, repitiendo su secuencia tras unos cientos de iteraciones. Los generadores congruenciales lineales (LCG), introducidos formalmente por D. H. Lehmer ese mismo año, eran más robustos y siguieron siendo el estándar en lenguajes como el `rand()` de C durante décadas.

El reconocimiento de que la pseudoaleatoriedad determinista es fundamentalmente inadecuada para la criptografía impulsó el desarrollo de generadores de números aleatorios por hardware (HRNG) y, más tarde, de las reservas de entropía a nivel de sistema operativo que sustentan hoy `crypto.getRandomValues()`. `/dev/random` y `/dev/urandom` de Linux, introducidos a mediados de los años 90, recolectan entropía de la temporización del teclado, los tiempos de búsqueda del disco y las interrupciones de red. Las CPU modernas incluyen instrucciones de hardware dedicadas, RDRAND de Intel y su equivalente de AMD, que miden el ruido térmico de los transistores para producir bits verdaderamente aleatorios a velocidades de gigabit. Lo que von Neumann describió como pecado ha sido reemplazado por la física cuántica.

Publicidad
Publicidad
Publicidad