Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

265
Views
Lógica: creación de un calendario para una competición

Esta es más una pregunta lógica que una pregunta de codificación, pero para la información de todos, estoy trabajando en Javascript.

Necesito crear programáticamente un calendario de 14 semanas entre 12 equipos que cumpla con las siguientes reglas: -Cada equipo juega entre sí al menos una vez. -Ningún equipo juega contra otro equipo más de dos veces -Cada equipo juega 14 juegos

Intenté recorrer a cada jugador, creando los partidos para cada semana (Juego 1 - Jugador 1 contra Jugador 2, Juego 2 - Jugador 1 contra Jugador 3, etc.) y luego comprobé que el jugador actual no está jugando en un juego entonces (Juego 1 - SALTAR (Jugador 2 ya jugando), Juego 2 - Jugador 2 contra Jugador 4 (jugador 3 ya jugando), Juego 3 - Jugador 2 contra Jugador 5) y así sucesivamente. Entonces crea el calendario completo para un equipo, luego pasa al siguiente equipo, etc.

Funciona bien, PERO cuando agrego la lógica para verificar que ningún jugador juegue con otro jugador más de dos veces, se rompe y entra en un ciclo sin fin.

Intenté revisar cada semana y crear los emparejamientos de esa manera (Juego 1 - Ply1 vs Ply2, Juego 2 - Ply3 vs Ply4, Juego 3, etc. comprobando que el jugador aún no está jugando un juego, pero nuevamente se rompió al agregar los calificadores.

¡Cualquier sugerencia o señalamiento en la dirección correcta es muy apreciada! Puedo almacenar los ID de usuario en pares de valores clave o como una matriz para que no sean factores limitantes en ninguna solución.

El resultado final deseado es algo como esto:

 Schedule:{ Week1:{ Game1:{ Play1: somePlayer, Play2: someOtherPlayer }, Game2:{ Play1: somePlayer1, Play2: someOtherPlayer1 }, Game3:{ Play1: somePlayer2, Play2: someOtherPlayer2 } //etc. and so on with 6 games per week for 14 weeks. } }

Esqueleto básico de la solución que me acercó más (primer método):

 let userArray = [1,2,3,4,5,6,7,8,9,10,11,12] let schedule = {} for(let x=0; x < userArray.length ; x++){ for(let y = 0; y < 14; y++){ //Check if schedule['WK'+y] exists and if not create it. //Check if userArray[x] is playing in any existing games in schedule['WK'+y] //Check if userArray[x+1] is playing in any existing games in schedule['WK'+y] //IF YES - TRY userArray[x+2] etc (loop back to 0 if x+y is >12) //IF NO - CREATE schedule['WK'+y]['Game'+x] = {Play1: userArray[x],Play2:userArray[x+whatever is accepted] } }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

(Juego 1 - Capa 1 contra Capa 2, Juego 2 - Capa 3 contra Capa 4, Juego 3, etc.)

Tal vez quieras crear así..

 let userArray = [1,2,3,4,5,6,7,8,9,10,11,12] let oneGame2Team = userArray.length/2 let schedule = {} let i = 0 for(let k = 1; k <= 14; k++){ schedule[`Week${k}`] = {} let newWeek = schedule[`Week${k}`] for(let j = 0; j < oneGame2Team; j++) { let firstPlayer = `Play${userArray[i]}` let secondPlayer = `Play${userArray[i+=1]}` newWeek[`Game${j+1}`] = {} newWeek[`Game${j+1}`][firstPlayer] = `SomePlayer${j}` newWeek[`Game${j+1}`][secondPlayer] = `SomePlayer${j}` i++ } i = 0 } console.log(schedule)

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!