Optimize and fix index bug

This commit is contained in:
posij118 2024-02-05 21:34:56 +08:00
parent 67a7662da3
commit 628f7ef041

View file

@ -1,4 +1,4 @@
from typing import Iterable, List from typing import Iterable, List, Dict
from config import config_manager from config import config_manager
from constants import UNWINNABLE_SEED_FRACTION from constants import UNWINNABLE_SEED_FRACTION
@ -35,15 +35,12 @@ class GlobalInfo:
player_counts: Iterable[int] player_counts: Iterable[int]
user_names: Iterable[str] user_names: Iterable[str]
game_counts: Iterable[int] game_counts: Iterable[int]
rated_id_indices_in_rating_list: Dict[int, int]
@property @property
def rating_list_length(self): def rating_list_length(self):
return len(self.rated_ids) + len(self.variant_ids) * len(self.player_counts) return len(self.rated_ids) + len(self.variant_ids) * len(self.player_counts)
@property
def rated_id_indices_in_rating_list(self):
return {id: index for index, id in dict(enumerate(self.rated_ids)).items()}
@dataclass @dataclass
class GameRow: class GameRow:
@ -329,8 +326,10 @@ if __name__ == "__main__":
player_counts = list(range(config.min_player_count, config.max_player_count + 1)) player_counts = list(range(config.min_player_count, config.max_player_count + 1))
game_counts = np.concatenate( game_counts = np.concatenate(
(
[rated_ids_dupes.count(ID) for ID in rated_ids], [rated_ids_dupes.count(ID) for ID in rated_ids],
np.zeros(len(variant_ids) * len(player_counts)), np.zeros(len(variant_ids) * len(player_counts)),
),
) )
user_names = list(np.full((len(rated_ids),), "")) user_names = list(np.full((len(rated_ids),), ""))
@ -338,16 +337,22 @@ if __name__ == "__main__":
for user_id, user_name in zip(game["user_ids"], game["users"]): for user_id, user_name in zip(game["user_ids"], game["users"]):
user_names[rated_ids.index(user_id)] = user_name user_names[rated_ids.index(user_id)] = user_name
rated_id_indices_in_rating_list = {
id: index for index, id in dict(enumerate(rated_ids)).items()
}
global_info = GlobalInfo( global_info = GlobalInfo(
rated_ids, variant_ids, player_counts, user_names, game_counts rated_ids,
variant_ids,
player_counts,
user_names,
game_counts,
rated_id_indices_in_rating_list,
) )
for variant_id, num_players in zip(variant_ids_dupes, nums_players): for variant_id, num_players in zip(variant_ids_dupes, nums_players):
game_counts[ game_counts[
len(rated_ids) calculate_variant_index_in_rating_list(num_players, variant_id, global_info)
+ calculate_variant_index_in_rating_list(
num_players, variant_id, global_info
)
] += 1 ] += 1
global_info.game_counts = game_counts global_info.game_counts = game_counts