Arielo
28/07/2008, 14:47
Subo en esta oportunidad, un pequeño programa, que automatiza la tarea de creación de fixtures tipo liga (todos contra todos).
Antes de subir el programa, voy a explicar cómo hacer para no repetir ningún partido.
- Primero, verificamos que la cantidad de participantes sea par. Si es impar, agregamos un participante ficticio llamado "Libre". De esta manera, resolvemos dos problemas a la vez: tenemos una cantidad par de participantes, y vemos cuál de ellos queda libre (no juega) en cada fecha. El participante que queda libre en una fecha, es, simplemente, el que se enfrenta al participante ficticio "Libre"
- Luego, determinamos la cantidad de fechas que tendrá la liga. Es un simple cálculo: Participantes - 1
En el caso de una cantidad impar de participantes, la liga tendrá la misma cantidad de fechas que de participantes.
- Determinamos asimismo, la cantidad de partidos por fecha: Participantes / 2
- Luego, realizamos la separación de los participantes en dos listas distintas, cada una de las cuales, tendrá exactamente la mitad de participantes.
- Mezclamos aleatoriamente ambas listas, para asegurarnos que cada fixture sea distinto y los enfrentamientos sean determinados por el azar.
- Luego creamos la primera fecha del torneo. Para este ejemplo, supondremos una liga como la que sigue:
6 participantes.
3 partidos por fecha
5 fechas.
- Para crear la primera fecha, hacemos que se enfrenten los equipos de las dos listas que separamos, de tal forma que el primero de la lista 1, se enfrente con el primero de la lista 2. El segundo de la lista 1 con el segundo de la lista 2, y así sucesivamente. Ya tenemos la primera fecha creada. Supongamos que el resultado sea el siguiente:
Participante_6 vs Participante_4
Participante_2 vs Participante_1
Participante_5 vs Participante_3
- Para la segunda fecha, y las subsiguientes, procederemos así:
Dejamos el primer participante SIEMPRE fijo (en este caso Participante_6), y vamos rotando el resto de participantes en sentido horario.
Participante_4 pasa a ocupar el puesto de Participante_1. Éste, reeemplaza a Participante_3. Participante_3, pasa a la última posición de la lista de la izquierda, donde se encontraba Participante_5, que pasa a la posición de Participante_2, quien reemplaza a Participante_4 en la primera posición de la lista de la derecha...
Hagámosle el seguimiento a Participante_2. De la manera antes descripta, la segunda fecha será:
Participante_6 vs Participante_2
Participante_5 vs Participante_4
Participante_3 vs Participante_1
Los participantes que se encuentran en la columna de la izquierda (locales), se rotan hacia arriba. El que se encuentra en segunda posición, pasará a la primera de la derecha, puesto que el primero no rota nunca.
Los que se encuentran en la columna de la derecha (visitantes), rotan hacia abajo. El último de esta lista, pasa a ser el último de la lista de la izquierda.
Para la tercera fecha, volvemos a rotar, y nos queda:
Participante_6 vs Participante_5
Participante_3 vs Participante_2
Participante_1 vs Participante_4
y la cuarta:
Participante_6 vs Participante_3
Participante_1 vs Participante_5
Participante_4 vs Participante_2
finalmente, la quinta y última fecha:
Participante_6 vs Participante_1
Participante_4 vs Participante_3
Participante_2 vs Participante_5
Como se puede apreciar, Participante_2 termina en la posición anterior a la que inició el torneo.
Antes de subir el programa, voy a explicar cómo hacer para no repetir ningún partido.
- Primero, verificamos que la cantidad de participantes sea par. Si es impar, agregamos un participante ficticio llamado "Libre". De esta manera, resolvemos dos problemas a la vez: tenemos una cantidad par de participantes, y vemos cuál de ellos queda libre (no juega) en cada fecha. El participante que queda libre en una fecha, es, simplemente, el que se enfrenta al participante ficticio "Libre"
- Luego, determinamos la cantidad de fechas que tendrá la liga. Es un simple cálculo: Participantes - 1
En el caso de una cantidad impar de participantes, la liga tendrá la misma cantidad de fechas que de participantes.
- Determinamos asimismo, la cantidad de partidos por fecha: Participantes / 2
- Luego, realizamos la separación de los participantes en dos listas distintas, cada una de las cuales, tendrá exactamente la mitad de participantes.
- Mezclamos aleatoriamente ambas listas, para asegurarnos que cada fixture sea distinto y los enfrentamientos sean determinados por el azar.
- Luego creamos la primera fecha del torneo. Para este ejemplo, supondremos una liga como la que sigue:
6 participantes.
3 partidos por fecha
5 fechas.
- Para crear la primera fecha, hacemos que se enfrenten los equipos de las dos listas que separamos, de tal forma que el primero de la lista 1, se enfrente con el primero de la lista 2. El segundo de la lista 1 con el segundo de la lista 2, y así sucesivamente. Ya tenemos la primera fecha creada. Supongamos que el resultado sea el siguiente:
Participante_6 vs Participante_4
Participante_2 vs Participante_1
Participante_5 vs Participante_3
- Para la segunda fecha, y las subsiguientes, procederemos así:
Dejamos el primer participante SIEMPRE fijo (en este caso Participante_6), y vamos rotando el resto de participantes en sentido horario.
Participante_4 pasa a ocupar el puesto de Participante_1. Éste, reeemplaza a Participante_3. Participante_3, pasa a la última posición de la lista de la izquierda, donde se encontraba Participante_5, que pasa a la posición de Participante_2, quien reemplaza a Participante_4 en la primera posición de la lista de la derecha...
Hagámosle el seguimiento a Participante_2. De la manera antes descripta, la segunda fecha será:
Participante_6 vs Participante_2
Participante_5 vs Participante_4
Participante_3 vs Participante_1
Los participantes que se encuentran en la columna de la izquierda (locales), se rotan hacia arriba. El que se encuentra en segunda posición, pasará a la primera de la derecha, puesto que el primero no rota nunca.
Los que se encuentran en la columna de la derecha (visitantes), rotan hacia abajo. El último de esta lista, pasa a ser el último de la lista de la izquierda.
Para la tercera fecha, volvemos a rotar, y nos queda:
Participante_6 vs Participante_5
Participante_3 vs Participante_2
Participante_1 vs Participante_4
y la cuarta:
Participante_6 vs Participante_3
Participante_1 vs Participante_5
Participante_4 vs Participante_2
finalmente, la quinta y última fecha:
Participante_6 vs Participante_1
Participante_4 vs Participante_3
Participante_2 vs Participante_5
Como se puede apreciar, Participante_2 termina en la posición anterior a la que inició el torneo.