Qué significa “equilibrado” aquí, y el ejemplo de 10 entre 3
Todo reparto que produce esta herramienta obedece un invariante: ningún equipo tiene más de una persona más que otro. Diez personas en tres equipos dan 4/3/3. Nunca dan 5/3/2, y nunca sobra nadie. La aritmética es deliberadamente aburrida (dividir y después repartir el resto de uno en uno entre los primeros equipos de la lista) y los tests fijan ese ejemplo exacto.
La regla se aplica en los dos modos de reparto, que es donde se vuelve opinable. Pide equipos de cuatro con diez personas y la lectura evidente es 4/4/2. En lugar de eso, el número de equipos se calcula como diez entre cuatro redondeado hacia arriba, que son tres, y esos tres equipos se equilibran después a 4/3/3. El razonamiento es práctico: una sala de equipos de cuatro más una pareja descolgada casi nunca es lo que quería quien organiza, y la promesa de no diferir en más de uno se mantiene entonces sin importar qué modo elegiste. Si de verdad necesitas exactamente cuatro por equipo y te da igual el resto, pide tres equipos y lee los tamaños del resultado.
Pedir más equipos que personas se ajusta a una persona por equipo en lugar de producir equipos vacíos. Un ajuste que daría un solo equipo se rechaza directamente, porque ahí no hay nada que repartir.
Juntar y separar, resuelto por búsqueda y no por suerte
Los dos tipos de regla toman una lista de nombres separados por comas. La coincidencia no distingue
mayúsculas, así que escribir ana encuentra a Ana y el resultado muestra la grafía del propio
listado. Un nombre que no corresponde a nadie se marca en vivo bajo la fila en lugar de ignorarse en
silencio, que es lo que caza una errata antes de generar y no después de que alguien note que se
quedó fuera de su propia regla.
Las reglas de juntar se fusionan de forma transitiva. Ana con Ben, más Ben con Carla, se convierte en un grupo de tres y no en dos parejas solapadas. Eso es una pasada de union-find sobre el listado, y significa que puedes declarar las relaciones que realmente conoces sin calcular su cierre a mano. Todo el que no se menciona forma un grupo de uno.
Las reglas de separar se convierten después en una tabla de conflictos entre esos grupos: dos grupos entran en conflicto cuando alguna regla de separar nombra a un miembro de cada uno. La asignación es una búsqueda con retroceso aleatorizada sobre grupos y equipos. Cada grupo prueba los equipos en su propio orden barajado, y una colocación que lleva a un callejón sin salida se deshace y se reintenta en otro sitio.
Eso importa más de lo que parece. El enfoque ingenuo es barajar a todo el mundo y comprobar si las reglas se cumplen por casualidad, lo que da vueltas para siempre en un caso difícil y se rinde en uno que sí tenía solución; una búsqueda completa encuentra una disposición siempre que exista alguna.
Los grupos más grandes se colocan primero para que un empaquetado imposible falle rápido, y hay un techo duro de 200.000 pasos de búsqueda, así que una entrada patológica informa de un fallo honesto en lugar de congelar la pestaña.
Cuando tus reglas no se pueden satisfacer todas
Es perfectamente posible pedir algo imposible: tres personas que no pueden coincidir repartidas en dos equipos, o un grupo de juntar más grande que el tamaño de equipo que has pedido.
Cuando eso pasa, la herramienta lo dice en lugar de entregar un reparto que incumple una regla en silencio. Esa es la parte importante: un generador que devuelve algo pase lo que pase te deja descubrir el incumplimiento en la sala, delante de la gente a la que le prometiste que no estarían juntos.
Fisher-Yates sobre crypto.getRandomValues, no Math.random
El barajado usa el generador criptográfico del navegador a través de un Fisher-Yates sin sesgo, no
Math.random(). Para un sorteo de equipos eso no es paranoia de seguridad, es equidad defendible: si
alguien pregunta si el reparto estaba amañado, la respuesta es que la fuente de aleatoriedad es la
misma que usaría un generador de claves, y que el algoritmo de barajado es el que no favorece
posiciones.
Hacer un sorteo, copiarlo, imprimirlo
- Pega o escribe la lista de nombres, uno por línea o separados por comas.
- Elige si repartes por número de equipos o por tamaño de equipo, y pon el número.
- Añade las reglas de juntar y de separar que necesites, comprobando que ningún nombre queda marcado como desconocido.
- Genera. Si las reglas son imposibles te lo dirá en vez de inventarse un reparto.
- Copia o imprime el resultado.
Para un sorteo de una sola cosa en lugar de un reparto, la ruleta de nombres elige uno al azar, y si lo que viene después es un torneo, el generador de brackets toma estos equipos como participantes.

