diff options
| author | Karan Jayachandra <mail@karanjayachandra.com> | 2024-12-02 19:50:15 +0000 |
|---|---|---|
| committer | Karan Jayachandra <mail@karanjayachandra.com> | 2024-12-02 19:50:15 +0000 |
| commit | fd03b6dd91be67b96356827a2ce4b7728d2e25ea (patch) | |
| tree | 8d9cf47a6bbac47fe9eeffbc0d92a1eef4323572 /src/match_up/utilities.py | |
| parent | 7b7f8cdef5f035ccdab714059c1a6c54b80c4ba3 (diff) | |
| parent | 662e0854a6c61503954aa659e1c932db69443a06 (diff) | |
Merge branch 'develop' into 'main'
Develop
See merge request KaranJayachandra/match_up!12
Diffstat (limited to 'src/match_up/utilities.py')
| -rw-r--r-- | src/match_up/utilities.py | 117 |
1 files changed, 45 insertions, 72 deletions
diff --git a/src/match_up/utilities.py b/src/match_up/utilities.py index db7c76a..7140a5f 100644 --- a/src/match_up/utilities.py +++ b/src/match_up/utilities.py @@ -1,17 +1,7 @@ from typing import Tuple -from pandas import read_csv -from random import shuffle, choice -from random import randint, getrandbits -from names import get_first_name, get_last_name -from match_up.data import ( - Player, - DisplayPlayer, - Team, - Game, - MIN_LEVEL, - MAX_LEVEL, - PLAYER_PER_COURT, -) +from random import shuffle, sample +from match_up.data import Player, DisplayPlayer, Team, Game +from match_up.data import MAX_LEVEL, PLAYER_PER_COURT def _shuffle_two_lists(a: list, b: list) -> Tuple[list, list]: @@ -71,7 +61,9 @@ def _create_groups_of_four_players( return court_players -def _create_games(courts: dict, players: list[Player], levels: int) -> list[Game]: +def _create_shuffle_games( + courts: dict, players: list[Player], levels: int +) -> list[Game]: court_players = _create_groups_of_four_players(players, levels) games = [] for court, players in zip(courts, court_players): @@ -85,66 +77,47 @@ def _create_games(courts: dict, players: list[Player], levels: int) -> list[Game return games -def generate_guest_type(count: int, level: int, description: str): - base_id = level * 10000 - return [ - Player( - id=base_id + i, - first=description, - last=f"{i + 1}", - level=level, - status=True, - count=choice([0, 1000]), +def _create_team_games(courts: dict, teams: dict) -> tuple[list[Game], list[Player]]: + games = [] + selected_players = [] + for court, (_, players) in zip(courts, teams.items()): + players = sample(players, PLAYER_PER_COURT) + selected_players += players + players.sort(key=lambda x: x.level, reverse=True) + team1 = Team( + player1=DisplayPlayer(players[0]), player2=DisplayPlayer(players[3]) ) - for i in range(count) - ] - - -def generate_guests(guests): - beginner_guests = generate_guest_type(guests[1], 1, "Beginner") - novice_guests = generate_guest_type(guests[3], 3, "Novice") - intermediate_guests = generate_guest_type(guests[5], 3, "Intermediate") - return beginner_guests + novice_guests + intermediate_guests - - -def _textualize_guest(level, value) -> str: - match level: - case 1: - text = "Beginners" - case 3: - text = "Novices" - case 5: - text = "Intermediates" - if value == 1: - text = text[:-1] - return f"{value} {text}" + team2 = Team( + player1=DisplayPlayer(players[1]), player2=DisplayPlayer(players[2]) + ) + games.append(Game(court, team1, team2)) + return games, selected_players -def _init_database_from_csv(session, csv_location: str) -> None: - data = read_csv(csv_location) - session.query(Player).delete() - for _, entry in data.iterrows(): - player = Player( - id=entry["id"], - first=entry["first"], - last=entry["last"], - level=entry["skill"], - status=False, - count=0, - ) - session.add(player) - session.commit() +def separate_teams_and_players(players: list[Player]) -> Tuple[dict, list[Player]]: + unique_team_id = {player.team for player in players} + grouped_players_by_team = {team_id: [] for team_id in unique_team_id} + for player in players: + team = player.team + grouped_players_by_team[team].append(player) + active_teams = {} + players_without_team = [] + for team_id in grouped_players_by_team: + if team_id == 0: + players_without_team += [ + player for player in grouped_players_by_team[team_id] + ] + else: + if len(grouped_players_by_team[team_id]) >= 4: + active_teams[team_id] = grouped_players_by_team[team_id] + else: + players_without_team += [ + player for player in grouped_players_by_team[team_id] + ] + return active_teams, players_without_team -def _init_random_database(session, player_count: int = 80) -> None: - for i in range(player_count): - player = Player( - id=i, - first=get_first_name(), - last=get_last_name(), - level=randint(MIN_LEVEL, MAX_LEVEL), - status=bool(getrandbits(1)), - count=0, - ) - session.add(player) - session.commit() +def split_courts(courts: dict, n) -> Tuple[dict, dict]: + first_half = {k: v for (k, v) in [x for x in courts.items()][:n]} + second_half = {k: v for (k, v) in [x for x in courts.items()][n:]} + return first_half, second_half |
