Cómo funciona el sorteo internamente
Aplicamos el algoritmo Fisher-Yates shuffle sobre la lista de
participantes, usando crypto.getRandomValues como fuente de
aleatoriedad. Cada permutación posible de la lista tiene exactamente la misma
probabilidad. Los primeros N elementos del array mezclado son los ganadores.
Es matemáticamente justo: cada participante tiene exactamente N/total de
probabilidad de ser elegido.
Cómo hacer un sorteo público y transparente
- Anunciá las reglas claramente: cuántos ganadores, qué premio, cuándo es el sorteo, cómo se elige.
- Compartí la lista completa antes del sorteo. En grupos chicos podés mostrar los nombres; en sorteos grandes, podés publicar un hash de la lista (SHA256) para garantizar que no agregaste nombres post-mortem.
- Hacé el sorteo en vivo: stream en Twitch/YouTube, sala de Zoom abierta, video grabado mostrando todo el proceso.
- Mostrá el resultado completo: idealmente, no solo el ganador sino la lista mezclada (o al menos los top 5-10), para demostrar que el algoritmo se ejecutó.
- Postea capturas en el grupo donde anunciaste el sorteo, etiquetando al ganador.
La diferencia entre "sorteo justo" y "sorteo legal"
Un sorteo puede ser perfectamente justo (algorítmicamente irreprochable) y al mismo tiempo no tener validez legal. La diferencia está en quién garantiza la ejecución y la inalterabilidad. Para sorteos con premios materiales, muchos países exigen:
- Sistema certificado por una autoridad (lotería nacional, cámara de comercio).
- Presencia notarial: un escribano valida el proceso y firma el acta.
- Lista de participantes auditable, presentada antes del sorteo.
- Reglas pre-publicadas que el organizador no puede modificar a último momento.
Nuestra herramienta es para sorteos informales: equipo chico, comunidad amiga, rifa de cumpleaños, decisión de quién paga la próxima ronda. Para premios reales, consultá la legislación de tu país.
Casos de uso típicos
- Comunidades online: subirte a un canal de Discord o YouTube y sortear un libro o un juego.
- Equipo de trabajo: quién presenta primero, quién toma vacaciones primero, quién hace el café esta semana.
- Aulas: el profesor sortea quién pasa al pizarrón.
- Asignación de tareas: lista de tareas + lista de personas, mezclás y emparejás.
- Salidas con amigos: quién elige el restaurante, quién paga la cuenta.
El "sesgo del shuffle ingenuo"
Mucha gente implementa sorteos así:
arr.sort(() => Math.random() - 0.5). Es incorrecto:
produce permutaciones sesgadas. Estudios formales mostraron que ciertos elementos
terminan más cerca del principio que otros. Si tu sorteo importa, asegurate que
la herramienta use Fisher-Yates (la nuestra lo hace).
Reproducibilidad con semilla
Si querés que el sorteo sea reproducible (que cualquiera con la misma lista y la
misma semilla obtenga el mismo resultado), usá el campo "semilla". Internamente
derivamos un PRNG determinístico desde ese string. Útil para auditorías o cuando
querés que tu sorteo sea verificable después de los hechos. Sin semilla, el
resultado es irreproducible y depende solo de crypto.getRandomValues.