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?
¿Cuál es la diferencia entre Math.random() y crypto.getRandomValues()?
¿Cómo funciona el lanzamiento de moneda? ¿Es realmente 50/50?
¿Puedo usar esto para una rifa o competición justa?
¿Puedo elegir varios elementos de una lista sin repetir el mismo elemento?
¿Cómo funciona la tirada de dados con varios tipos de dados?
¿Es esta herramienta adecuada para generar números aleatorios con fines criptográficos?
¿Qué es un barajado de Fisher-Yates y por qué importa?
¿Puedo elegir un elemento al azar con elementos que tengan probabilidades diferentes?
¿Qué pasa si dos personas ejecutan esta herramienta a la vez? ¿Podrían obtener el mismo resultado?
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.