From 2a4c19eb72f614b1efcb47962432167414ba6bc9 Mon Sep 17 00:00:00 2001 From: 283375 Date: Tue, 27 Jun 2023 23:25:07 +0800 Subject: [PATCH] feat(utils): add score related utils --- src/arcaea_offline/utils/__init__.py | 31 +++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/arcaea_offline/utils/__init__.py b/src/arcaea_offline/utils/__init__.py index 091fbdb..a63aa70 100644 --- a/src/arcaea_offline/utils/__init__.py +++ b/src/arcaea_offline/utils/__init__.py @@ -1,4 +1,4 @@ -from typing import Optional +from typing import Any, Optional, Sequence RATING_CLASS_TEXT_MAP = { 0: "Past", @@ -21,3 +21,32 @@ def rating_class_to_text(rating_class: int) -> Optional[str]: def rating_class_to_short_text(rating_class: int) -> Optional[str]: return RATING_CLASS_SHORT_TEXT_MAP.get(rating_class) + + +SCORE_GRADE_FLOOR = [9900000, 9800000, 9500000, 9200000, 8900000, 8600000, 0] +SCORE_GRADE_TEXTS = ["EX+", "EX", "AA", "A", "B", "C", "D"] + + +def zip_score_grade(score: int, __seq: Sequence, default: Any = "__PRESERVE__"): + """ + zip_score_grade is a simple wrapper that equals to: + ```py + for score_floor, val in zip(SCORE_GRADE_FLOOR, __seq): + if score >= score_floor: + return val + return seq[-1] if default == "__PRESERVE__" else default + ``` + Could be useful in specific cases. + """ + return next( + ( + val + for score_floor, val in zip(SCORE_GRADE_FLOOR, __seq) + if score >= score_floor + ), + __seq[-1] if default == "__PRESERVE__" else default, + ) + + +def score_to_grade_text(score: int) -> str: + return zip_score_grade(score, SCORE_GRADE_TEXTS)