Command Palette

Search for a command to run...

List Randomizer: baraja una lista o elige ganadores aleatorios de manera justa

List Randomizer: baraja una lista o elige ganadores aleatorios de manera justa

T
Toolz Team
|Aug 23, 2026|16 Min Lectura

Parte de la colección generadores

Realizamos un pequeño sorteo para el lanzamiento de Toolz e hice el sorteo de forma perezosa: pegé la lista de participantes en una hoja de cálculo y agregué una columna de =RAND(), y ordenado por ello. Funcionó, pero un amigo que se gana la vida con estadísticas miró por encima del hombro y dijo, " sabes que en realidad no es uniforme, ¿verdad?" Tenía razón, y la madriguera en la que caí esa noche es una gran parte de por qué Toolz ahora tiene una propiedad adecuada lista aleatoria eso hace la barajada de la manera correcta. Esta guía es lo que aprendí, escrita para cualquiera que necesite sacar nombres de un sombrero y quiera que el sombrero sea honesto.

TL;Dr: Un aleatorizador de listas vuelve a ordenar una lista completa al azar (aleatorizar) o extrae una muestra aleatoria de ella (elegir). Los buenos usan el aleatorio de Fisher-Yates y una fuente criptográfica aleatoria para que cada pedido sea igualmente probable. Utilice el aleatorio para el orden de turnos y los asientos, y elija para obsequios y muestras. Esta herramienta se ejecuta en el lado del cliente, se sortea sin reemplazo de forma predeterminada, por lo que los ganadores son únicos y se niega a dibujar más elementos únicos de los que contiene la lista.

Construyo productos SaaS en Laravel y React, así que aquí me importan dos cosas: hacer las matemáticas bien y hacer que la interfaz sea lo suficientemente obvia como para que nunca te preguntes si el sorteo fue justo. Ambos resultan importar más de lo que parecen.

¿qué es un aleatorizador de listas?

Un aleatorizador de listas toma una lista de elementos, uno por línea, y la reorganiza o muestra al azar. Un cambio aleatorio justo es un problema resuelto con una respuesta incorrecta que parece correcta: la clasificación mediante una clave aleatoria está sesgada, mientras que el cambio aleatorio de Fisher-Yates no lo está, y el navegador proporciona los bits imparciales crypto.getRandomValues(). Pegue nombres, premios, tareas, equipos o ideas, y devolverá toda la lista en orden aleatorio o seleccionará la cantidad de ganadores que solicitó. Es la versión de software de dibujar hojas dobladas de un cuenco, con la ventaja de que elimina el sesgo silencioso que los humanos introducen cuando intentan elegir "aleatoriamente" a mano.

En realidad, solo hay dos operaciones, y saber cuál quieres es toda la habilidad. Shuffle devuelve cada elemento que le diste, solo que en un nuevo orden aleatorio, por lo que no se agrega ni se pierde nada. Pick devuelve un subconjunto, extrayendo una cantidad determinada de elementos del grupo. Una rifa es una elección. Decidir quién presenta primero en un stand-up es una mezcla aleatoria. La mayoría de las personas buscan el equivocado al menos una vez, generalmente intentando " baraja y toma los tres primeros " cuando Pick con cuenta de tres hace lo mismo en un solo paso.

¿cómo funciona realmente una mezcla justa?

Aquí está la parte a la que se dirigía mi amigo estadístico. El truco de la hoja de cálculo, que asigna un número aleatorio a cada fila y clasifica, parece aleatorio pero no uniforme. Los algoritmos de clasificación hacen comparaciones, y cuando dos claves aleatorias están cerca, pequeños sesgos en cómo se resuelven los vínculos y las comparaciones se filtran en el resultado. En listas pequeñas, el sesgo es pequeño, pero es real, y para cualquier cosa en la que el punto sea la equidad, " suficientemente cerca" no es una gran respuesta.

El método correcto es el barajado de Fisher-Yates, a veces llamado barajado de Knuth después de que Donald Knuth popularizara la versión in situ. Fue descrito por Ronald Fisher y Frank Yates en 1938 y Richard Durstenfeld le dio su forma informática moderna en 1964. La idea es simple. Camine por la lista desde el último elemento hasta el segundo. En cada posición, elija un índice aleatorio desde el inicio de la lista hasta la posición actual inclusive, luego intercambie los dos elementos. Debido a que cada intercambio se basa en un rango cada vez más reducido y bien definido, cada uno de los ordenamientos posibles sale con exactamente la misma probabilidad. Se ejecuta en tiempo lineal, toca cada elemento una vez y no necesita memoria adicional más allá de la lista misma.

los lista aleatoria utiliza este algoritmo directamente. Cuando elige sin reemplazo, es el mismo barajado detenido temprano: baraja la lista y luego toma los primeros N elementos. Eso garantiza que los ganadores sean distintos y que todos los grupos posibles de ganadores sean igualmente probables.

¿de dónde viene la aleatoriedad?

Un algoritmo es tan justo como los números aleatorios que lo alimentan. Si la fuente de aleatoriedad es predecible o sesgada, una mezcla perfecta aún produce un resultado sesgado. Aquí es donde el navegador se gana la vida.

Los navegadores modernos exponen crypto.getRandomValues, parte de la API de criptografía web W3C, que llena una matriz con valores aleatorios criptográficamente fuertes extraídos del grupo de entropía del sistema operativo. Esa es una fuente mucho más fuerte que Math.random, que es un generador pseudoaleatorio rápido que nunca estuvo destinado a nada en lo que importa la previsibilidad. Prefiere el aleatorizador crypto.getRandomValues y sólo vuelve a caer Math.random cuando la fuente criptográfica realmente no está disponible, lo que en un navegador actual casi nunca lo está.

Hay una sutileza más que tuve que corregir. Para convertir un número aleatorio de 32 bits en un índice imparcial de 0 a N menos 1, no se puede simplemente tomar el resto después de dividirlo por N, porque a menos que N se divida uniformemente en el rango, los índices bajos aparecen un poco más a menudo. La solución es el muestreo de rechazo: calcular el múltiplo más grande de N que encaja en el rango, y si un sorteo cae por encima de ese límite, tirarlo y volver a dibujar. Cuesta una cantidad insignificante de sorteos adicionales y elimina el sesgo por completo. La herramienta hace esto en cada índice que elige, que es el tipo de detalle que nadie nota hasta que falta.

¿cómo uso el aleatorizador?

La interfaz tiene un botón y un par de opciones. Así es como lo ejecuto.

Pegue su lista en el cuadro de entrada, un elemento por línea. Si copió una celda separada por comas de una hoja de cálculo, cambie el separador de entrada a coma y, en su lugar, se dividirá en comas. El comportamiento de recorte y eliminación en blanco está activado de forma predeterminada, por lo que las líneas vacías perdidas y los espacios iniciales accidentales no se convierten en entradas fantasma.

Elige tu modo. Mezclar reordena todo. Elige sorteos ganadores. Si eliges Seleccionar, aparece un pequeño panel donde configuras cuántos para dibujar y si se permiten repeticiones. Deje las repeticiones desactivadas para un sorteo para que cada ganador sea una persona diferente. Active las repeticiones solo cuando realmente desee probar con reemplazo, por ejemplo, cuando esté simulando sorteos similares a dados y el mismo valor pueda repetirse legítimamente.

Haga clic en Aleatorizar. Obtienes un resultado nuevo e independiente cada vez, por lo que si quieres volver a dibujar, simplemente haz clic nuevamente. Copie el resultado con un clic para pegarlo en su anuncio, su boleto o dondequiera que necesite vivir el resultado. Si solicita más ganadores únicos de los que la lista puede proporcionar, la herramienta le indicará que en lugar de devolver silenciosamente una lista corta o repetida, lo cual es un error que he visto cometer otras herramientas.

En la práctica, las listas que pego están por todo el mapa. Algunos días es una columna de correos electrónicos de clientes para un sorteo de premios, otros días son los nombres de mi equipo para quién revisa la siguiente solicitud de extracción, y una vez que estaba en cada restaurante a poca distancia porque nadie podía decidir el almuerzo. A la herramienta no le importa cuáles sean los artículos, solo que estén separados limpiamente. Es por eso que las opciones de entrada merecen un segundo de atención: si su fuente es una celda de hoja de cálculo, el separador de comas le evita la edición manual y, si es una copia y pegada desordenada con filas en blanco, el valor predeterminado en blanco lo limpia silenciosamente antes del sorteo. Un minuto dedicado a formatear la entrada es un minuto que no dedica a discutir si una línea vacía perdida cuenta como una entrada.

¿cuándo debo barajar y cuándo debo elegir?

Los dos modos cubren trabajos diferentes y la siguiente tabla es la hoja de trucos que desearía tener cuando comencé.

Quieres... aprovechamiento Repite porque
Decidir hablar o dar la orden Mezclar n/a Todos permanecen en casa, el orden es justo
Empate un ganador del sorteo Elige, cuenta 1 Apagado Resultado único y único
Sortea a varios ganadores de premios Elige, cuenta N Apagado Ganadores distintos, sin doble inmersión
Asigna personas a dos equipos Mezclar y luego dividir n/a Divida la lista barajada por la mitad
Muestra con reemplazo para sim Elige, cuenta N En El mismo artículo puede aparecer por diseño
Aleatorizar una lista de reproducción o una lista de lectura Mezclar n/a Reordenar sin dejar caer nada

La regla general: si el recuento de elementos sigue siendo el mismo, baraja. Si quieres sacar menos elementos de los que pones, elige. La asignación del equipo es la que la gente piensa demasiado. Mezcle la lista completa, luego tome la primera mitad como equipo A y el resto como equipo B, y ambos equipos serán aleatorios y equilibrados en tamaño.

¿Es suficiente organizar un sorteo público?

Sí, y vale la pena indicar claramente el motivo porque "fair" es el valor total de la herramienta. La combinación de una mezcla de Fisher-Yates, una fuente criptográfica aleatoria y un muestreo de rechazo significa que cada participante tiene una oportunidad idéntica y cada conjunto posible de ganadores es igualmente probable. Esa es una garantía más sólida que un sorteo físico, donde el tamaño del deslizamiento, el plegado y qué tan bien se mezcla el cuenco introducen sesgo.

Debido a que el sorteo se ejecuta completamente en su navegador, puede hacerlo en vivo en la pantalla durante una transmisión o una reunión, que es la transparencia que la gente desea de un sorteo público. No se envía nada a un servidor, por lo que no hay ningún paso oculto donde el resultado pueda alterarse entre su clic y el anuncio. Si desea un registro de auditoría, registre en pantalla el sorteo: la lista de participantes es visible, el clic es visible y los ganadores aparecen inmediatamente.

¿Mi lista es privada?

Esto importa más de lo que parece a primera vista, porque las listas que las personas asignan al azar a menudo no son públicas. Las listas cortas de candidatos, los nombres internos de los equipos, las entradas de los clientes y las listas de correo electrónico son todos confidenciales. El aleatorizador procesa todo localmente con JavaScript simple. Su lista nunca se carga, registra ni almacena, y puede confirmarlo en la pestaña de la red de su navegador, donde al hacer clic en Aleatorizar no se activa ninguna solicitud. También sigue funcionando sin conexión una vez que la página se ha cargado.

Ésa es una postura deliberada en Toolz, y escribí sobre el razonamiento en la nota Privacidad de datos en herramientas en línea. Un aleatorizador es un buen ejemplo de por qué es importante: la entrada suele ser una lista de personas reales, y una lista de personas reales es exactamente el tipo de cosas que no desea que se encuentren en un registro de solicitudes en algún servidor que nunca ha auditado.

Algunos hábitos que hacen que los dibujos sean más limpios

Limpia la lista antes de dibujar. Active eliminar duplicados si una persona puede aparecer dos veces, por lo que una entrada doble no duplica en secreto sus probabilidades. Soltar líneas en blanco está activado de forma predeterminada, pero vale la pena echarle un vistazo para asegurarse de que no se haya contado una línea vacía final.

Haga coincidir el recuento con los premios. En el modo Seleccionar, establezca el recuento con el número exacto de ganadores que necesita y deje repeticiones. Si tienes tres premios, sortea tres a la vez en lugar de hacer clic en un solo sorteo tres veces, lo que evita que el incómodo caso del mismo nombre aparezca dos veces con clics separados.

Vuelva a dibujar abiertamente, no en secreto. Si un ganador no es elegible, elimínelo y vuelva a dibujarlo frente a quien esté mirando. La equidad proviene de que el proceso sea visible, no de que el resultado sea definitivo con el primer clic.

Guárdalo en el navegador. Como ocurre con todas las herramientas que envío, el procesamiento local es el predeterminado porque es más rápido y privado. Si está montando un kit personal de pequeñas utilidades, el generador de números aleatorios se empareja naturalmente con el aleatorizador para sorteos numéricos y el más amplio Herramientas de productividad para desarrolladores roundup explica por qué vale la pena construir una caja de herramientas que dé prioridad al navegador.

Herramientas relacionadas que vale la pena echarle un vistazo

Si la selección aleatoria es una necesidad recurrente, algunos vecinos se sientan cerca. El generador de números aleatorios dibuja números en un rango con la misma aleatoriedad de grado criptográfico, que es lo que desea cuando lo que elige es un valor en lugar de un elemento de una lista. El Generador de UUID produce identificadores únicos para registros y datos de prueba. El generador de contraseñas aplica la misma fuente aleatoria potente para producir contraseñas seguras. Los tres se ejecutan en el navegador sin registro, exactamente como el aleatorizador, y yo cubro el lado identificador de esa familia en el guía del generador de contraseñas.

Preguntas frecuentes

¿Cómo funciona el aleatorizador de listas?

La herramienta lee su lista un elemento por línea, luego reordená cada elemento o dibuja los ganadores que solicitó. El barajado utiliza el algoritmo Fisher-Yates, que recorre la lista una vez e intercambia cada elemento con una posición anterior elegida al azar, produciendo un orden uniformemente aleatorio. Las posiciones aleatorias provienen del generador criptográfico del navegador, por lo que el resultado es genuinamente imparcial.

¿Es la aleatorización realmente justa?

Sí. Se basa en crypto.getRandomValues, la fuente criptográfica aleatoria integrada en los navegadores modernos, y utiliza muestreo de rechazo, por lo que ningún índice es ni siquiera un poco más probable que otro. Combinado con la mezcla aleatoria de Fisher-Yates, cada orden posible de su lista tiene las mismas posibilidades, lo cual es más justo que la mezcla manual o la clasificación de una hoja de cálculo con una clave aleatoria.

¿Cómo elijo un ganador aleatorio de una lista de nombres?

Pegue sus nombres uno por línea, cambie al modo de selección, establezca el conteo en 1 y haga clic en Aleatorizar. La herramienta devuelve un solo nombre aleatorio. Para atraer a varios ganadores a la vez, establezca el conteo más alto y deje las repeticiones deshabilitadas para que cada ganador sea único.

¿Cuál es la diferencia entre shuffle y púa?

Shuffle devuelve toda su lista en un nuevo orden aleatorio, por lo que no se agrega ni se elimina nada, solo se reorganiza. Pick Devuelve un subconjunto, dibujando el número de ganadores que especifique de la lista. Use aleatorio para orden de turno o asiento, y elija para obsequios, muestras o elegir a algunas personas de un grupo más grande.

¿Se puede elegir el mismo artículo más de una vez?

Sólo si habilitas repeticiones. De forma predeterminada, el modo Elegir sorteos sin reemplazo, por lo que cada ganador es un elemento diferente, que es lo que necesita una rifa o sorteo. Activar repeticiones permite muestrear con reemplazo, donde puede volver a aparecer el mismo elemento, lo cual es útil para simulaciones.

¿Por qué no puede elegir más artículos únicos que mi lista?

Sin repeticiones, cada ganador debe ser un elemento distinto, por lo que no podrás sacar a diez ganadores únicos de una lista de ocho. Cuando eso sucede, la herramienta le dice en lugar de devolver un resultado incorrecto. Baje el conteo para que coincida con su tamaño de lista o active las repeticiones para que los elementos se puedan reutilizar.

¿Mi lista está cargada en un servidor?

No. Todos los análisis y aleatorizaciones se ejecutan localmente en su navegador con JavaScript simple y no se transmite, registra ni almacena nada. Puede confirmarlo en la pestaña de la red de su navegador, donde no se realiza ninguna solicitud cuando hace clic en Aleatorizar. También funciona sin conexión una vez que se ha cargado la página.

¿Puedo usarlo para una rifa o un sorteo?

Sí. Pegue sus participantes uno por línea, use el modo de selección con repeticiones desactivadas y establezca el recuento en el número de premios. Cada clic dibuja un conjunto fresco e independiente de ganadores únicos. Debido a que el sorteo es imparcial y ocurre en el lado del cliente, puede ejecutarlo en vivo en la pantalla para mayor transparencia.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!