mirror of
https://github.com/283375/arcaea-offline.git
synced 2025-07-02 12:46:26 +00:00
25 lines
918 B
Python
25 lines
918 B
Python
from decimal import Decimal
|
|
from typing import Dict, List
|
|
|
|
from ..models.scores import ScoreCalculated
|
|
|
|
|
|
def get_b30_calculated_list(
|
|
calculated_list: List[ScoreCalculated],
|
|
) -> List[ScoreCalculated]:
|
|
best_scores: Dict[str, ScoreCalculated] = {}
|
|
for calculated in calculated_list:
|
|
key = f"{calculated.song_id}_{calculated.rating_class}"
|
|
stored = best_scores.get(key)
|
|
if stored and stored.score < calculated.score or not stored:
|
|
best_scores[key] = calculated
|
|
ret_list = list(best_scores.values())
|
|
ret_list = sorted(ret_list, key=lambda c: c.potential, reverse=True)[:30]
|
|
return ret_list
|
|
|
|
|
|
def calculate_b30(calculated_list: List[ScoreCalculated]) -> Decimal:
|
|
ptt_list = [Decimal(c.potential) for c in get_b30_calculated_list(calculated_list)]
|
|
sum_ptt_list = sum(ptt_list)
|
|
return (sum_ptt_list / len(ptt_list)) if sum_ptt_list else Decimal("0.0")
|