def create_segunda_vuelta(request, tourn_id): tourney = get_object_or_404(Team_tournament,pk=tourn_id) first_rounds = tourney.round_set.all() #rondas de la primera vuelta cant_teams = tourney.team_set.count() cant_rounds = tourney.round_set.count() if cant_rounds < cant_teams +2: #si solo hay una vuelta crada, crea una segunda counter = 0 for r in first_rounds: counter += 1 cant_games = r.team_game_set.count() if cant_games > 0: new_r = Round(tournament = tourney, number = cant_rounds + counter) new_r.save() for game in r.team_game_set.all(): old_w_team = game.white_team old_b_team = game.black_team g = Team_game(round = new_r, white_team = old_b_team, black_team = old_w_team) g.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def make_pairings(tourney): teams_for_count = tourney.team_set.all() # equipos del torneo # si hay equipos impares añado uno llamado Descansa, que será el descanso if len(teams_for_count)%2 != 0: t = Team(name="Descansa",tournament=tourney) t.save() teams = tourney.team_set.all() team_ids = [t.id for t in teams] # lista de ids de los equipos # creo la matriz de emparejamientos incializada a 0 num_teams = len(team_ids) matrix = [[0 for i in range(num_teams)] for j in range(num_teams-1)] # creo los emparejamientos # primero pongo el último en la primera mesa alternando el color last_id = team_ids[-1] team_ids = team_ids[:-1] for i in range(len(team_ids)): if i%2==0: matrix[i][1] = last_id else: matrix[i][0] = last_id # relleno la tamble de adelante hacia atras team_index = 0 for i in range(len(team_ids)): # filas for j in range(0,num_teams,2): if j == 0: # primer emparejamiento if matrix[i][j] == 0: # si el lugar está vacío, pongo el id del equipo matrix[i][j] = team_ids[team_index] #asigno el id del equipo que toca team_index += 1 # siguiente equipo if team_index >= len(team_ids): team_index = 0 # si se ha salido de la lista, vuelve al primero else: matrix[i][j+1] = team_ids[team_index] #asigno el id del equipo que toca team_index += 1 # siguiente equipo if team_index >= len(team_ids): team_index = 0 # si se ha salido de la lista, vuelve al primero else: matrix[i][j] = team_ids[team_index] #asigno el id del equipo que toca team_index += 1 # siguiente equipo if team_index >= len(team_ids): team_index = 0 # si se ha salido de la lista, vuelve al primero # relleno lo que falta, de atras hacia adelante team_index = 0 for i in range(len(team_ids)-1,-1,-1): for j in range(num_teams-1,-1,-1): if matrix[i][j] == 0: matrix[i][j] = team_ids[team_index] #asigno el id del equipo que toca team_index += 1 # siguiente equipo if team_index >= len(team_ids): team_index = 0 # si se ha salido de la lista, vuelve al primero # por cada fila de la matriz creo una ronda for i in range(len(team_ids)): r = Round(tournament = tourney, number = i+1) r.save() for j in range(0,num_teams,2): w_team = tourney.team_set.get(pk=matrix[i][j]) b_team = tourney.team_set.get(pk=matrix[i][j+1]) g = Team_game(round = r, white_team = w_team, black_team = b_team) g.save() tourney.pairing_done = True return matrix