1. Cada resultado sale de un generador aleatorio criptográfico
Spinvolta saca los resultados con crypto.getRandomValues(), el generador de números aleatorios criptográficamente seguro que incluye todo navegador y sistema operativo moderno, la misma fuente que se usa para crear claves de cifrado. Nunca usamos Math.random() para decidir nada. (Las cosas puramente decorativas, como hacia dónde vuela un trozo de confeti, sí pueden usarlo.)
2. Sin sesgo de módulo
Un número aleatorio de 32 bits no siempre se puede repartir de forma exacta entre, por ejemplo, 7 opciones: 4.294.967.296 no es múltiplo de 7, así que el ingenuo número % 7 hace que algunas opciones sean un poquito más probables. Spinvolta usa muestreo por rechazo: si un número cae en el sobrante desigual de la parte alta del rango, se descarta y se saca otro. Cada opción acaba teniendo exactamente la misma probabilidad, sea cual sea el número de opciones.
3. Los pesos son exactos
En el modo con pesos, valores como 1, 2,5 o 0,125 se convierten a números enteros en una escala común y se suman de forma exacta. Un único sorteo uniforme sobre el total elige al ganador, así que una opción con peso 2 tiene exactamente el doble de probabilidad que una con peso 1, y el tamaño de los sectores muestra esas probabilidades exactas.
4. Varios ganadores sin repetir
Los modos de varios ganadores, los equipos, el orden aleatorio, las cartas y los sorteos usan el algoritmo de Fisher–Yates sin sesgo (con el mismo muestreo por rechazo), así que cada orden o grupo de ganadores posible tiene la misma probabilidad.
5. Primero el resultado, después la animación
Cuando pulsas Girar, el ganador se decide antes de que la ruleta se mueva. Después, un solucionador calcula un movimiento —impulso, velocidad, número de vueltas, el suave balanceo final— que cae justo dentro del sector ganador, en un punto aleatorio lejos de los bordes. Lanzar más fuerte, elegir un giro más largo o usar la parada manual solo cambian el aspecto del giro. Nuestras pruebas automáticas comprueban miles de giros aleatorios para asegurar que la animación siempre cae en el resultado sorteado de antemano y nunca se tambalea hasta el sector vecino.
6. Sorteos demostrablemente justos para concursos y salas
En los sorteos (y en cualquier sorteo donde la confianza importe), Spinvolta va más allá para que no tengas que confiar ni en nosotros ni en quien organiza:
- Antes del sorteo, tu navegador fija la lista exacta de participantes y los ajustes y publica una huella: un hash SHA-256 de la lista, los ajustes y una semilla secreta. Nuestro servidor registra cuándo la recibió.
- La huella indica una ronda futura del faro de aleatoriedad drand League of Entropy, un valor público que producen cada 3 segundos organizaciones independientes de todo el mundo y que nadie puede predecir ni elegir.
- Cuando se publica esa ronda, los ganadores se calculan a partir de la huella, el valor del faro y la semilla.
- La página de prueba lo muestra todo. Cualquiera puede pulsar Verificar para recalcularlo en su navegador, incluida la firma criptográfica del faro.
Quien organiza no puede elegir al ganador porque el valor del faro no existía cuando se fijó la lista. Nosotros tampoco, porque nunca vemos la semilla antes de que se fije la huella y no controlamos drand. Si no se puede acceder al faro, el sorteo pasa a un sorteo de compromiso y revelación claramente indicado.
7. Probado estadísticamente
Nuestras pruebas ejecutan tests de bondad de ajuste chi cuadrado sobre cientos de miles de sorteos simulados en cada cambio, y sobre más de un millón en la batería completa: selecciones uniformes, con pesos, mezclas y posiciones con varios ganadores. Puedes ejecutar tu propia versión en la página de auditoría de equidad.
Lo que no podemos demostrar
En un giro cotidiano confías en que el código que se ejecuta en tu navegador es el que describimos. Se ejecuta íntegramente en tu dispositivo y puedes inspeccionarlo con las herramientas para desarrolladores del navegador. Cuando hay más en juego —premios, sorteos públicos—, usa un sorteo demostrablemente justo, que no exige confiar en nadie.
Preguntas frecuentes
¿Se puede trucar la ruleta?
No con la animación: el resultado se sortea primero de forma justa y el movimiento se calcula para mostrarlo. La única forma de cambiar las probabilidades es el modo con pesos, que muestra la etiqueta “Ruleta con pesos” y dibuja los sectores a escala.
¿Por qué salió el mismo nombre dos veces seguidas?
Porque el azar real tiene rachas. Con 10 opciones, la misma sale dos veces seguidas el 10 % de las veces. Usa el modo eliminación si quieres que cada opción salga una sola vez.
¿Qué es drand?
drand es un faro de aleatoriedad distribuido que gestiona la League of Entropy, un grupo de universidades, empresas y organizaciones independientes. Publica un nuevo valor aleatorio verificable cada pocos segundos.