Bug: Fix statistics issues caused by driver substitutions
All checks were successful
Build Formula10 Docker Image / build-docker (push) Successful in 16s
All checks were successful
Build Formula10 Docker Image / build-docker (push) Successful in 16s
This commit is contained in:
@ -90,6 +90,33 @@ WDC_SUBSTITUTE_POINTS: List[Tuple[int, int, int]] = [
|
|||||||
(8, 17, 1), # Bearman raced for Magnussen in Azerbaijan
|
(8, 17, 1), # Bearman raced for Magnussen in Azerbaijan
|
||||||
]
|
]
|
||||||
|
|
||||||
|
WDC_STANDING_2024: Dict[str, int] = {
|
||||||
|
"Max Verstappen": 1,
|
||||||
|
"Lando Norris": 2,
|
||||||
|
"Charles Leclerc": 3,
|
||||||
|
"Oscar Piastri": 4,
|
||||||
|
"Carlos Sainz": 5,
|
||||||
|
"George Russell": 6,
|
||||||
|
"Lewis Hamilton": 7,
|
||||||
|
"Sergio Perez": 8,
|
||||||
|
"Fernando Alonso": 9,
|
||||||
|
"Pierre Gasly": 10,
|
||||||
|
"Nico Hulkenberg": 11,
|
||||||
|
"Yuki Tsunoda": 12,
|
||||||
|
"Lance Stroll": 13,
|
||||||
|
"Esteban Ocon": 14,
|
||||||
|
"Kevin Magnussen": 15,
|
||||||
|
"Alexander Albon": 16,
|
||||||
|
"Daniel Ricciardo": 17,
|
||||||
|
"Oliver Bearman": 18,
|
||||||
|
"Franco Colapinto": 19,
|
||||||
|
"Zhou Guanyu": 20,
|
||||||
|
"Liam Lawson": 21,
|
||||||
|
"Valtteri Bottas": 22,
|
||||||
|
"Logan Sargeant": 23,
|
||||||
|
"Jack Doohan": 24
|
||||||
|
}
|
||||||
|
|
||||||
def standing_points(race_guess: RaceGuess, race_result: RaceResult) -> int:
|
def standing_points(race_guess: RaceGuess, race_result: RaceResult) -> int:
|
||||||
guessed_driver_position: int | None = race_result.driver_standing_position(
|
guessed_driver_position: int | None = race_result.driver_standing_position(
|
||||||
driver=race_guess.pxx_guess
|
driver=race_guess.pxx_guess
|
||||||
@ -360,23 +387,31 @@ class PointsModel(Model):
|
|||||||
def wdc_standing_by_position(self) -> Dict[int, List[str]]:
|
def wdc_standing_by_position(self) -> Dict[int, List[str]]:
|
||||||
standing: Dict[int, List[str]] = dict()
|
standing: Dict[int, List[str]] = dict()
|
||||||
|
|
||||||
for position in range(
|
if WDC_STANDING_2024 is None:
|
||||||
1, len(self.all_drivers(include_none=False, include_inactive=True)) + 1
|
for position in range(
|
||||||
):
|
1, len(self.all_drivers(include_none=False, include_inactive=True)) + 1
|
||||||
standing[position] = list()
|
):
|
||||||
|
standing[position] = list()
|
||||||
|
|
||||||
position: int = 1
|
position: int = 1
|
||||||
last_points: int = 0
|
last_points: int = 0
|
||||||
|
|
||||||
for driver in self.drivers_sorted_by_points(include_inactive=True):
|
for driver in self.drivers_sorted_by_points(include_inactive=True):
|
||||||
points: int = self.total_driver_points_by(driver.name)
|
points: int = self.total_driver_points_by(driver.name)
|
||||||
if points < last_points:
|
if points < last_points:
|
||||||
# If multiple drivers have equal points, a place is shared.
|
# If multiple drivers have equal points, a place is shared.
|
||||||
# In this case, the next driver does not occupy the immediate next position.
|
# In this case, the next driver does not occupy the immediate next position.
|
||||||
position += len(standing[position])
|
position += len(standing[position])
|
||||||
|
|
||||||
standing[position].append(driver.name)
|
standing[position].append(driver.name)
|
||||||
last_points = points
|
last_points = points
|
||||||
|
|
||||||
|
if WDC_STANDING_2024 is not None:
|
||||||
|
for position in range(1, len(WDC_STANDING_2024) + 1):
|
||||||
|
standing[position] = list()
|
||||||
|
|
||||||
|
for driver, position in WDC_STANDING_2024.items():
|
||||||
|
standing[position] += [driver]
|
||||||
|
|
||||||
return standing
|
return standing
|
||||||
|
|
||||||
@ -386,25 +421,29 @@ class PointsModel(Model):
|
|||||||
def wdc_standing_by_driver(self) -> Dict[str, int]:
|
def wdc_standing_by_driver(self) -> Dict[str, int]:
|
||||||
standing: Dict[str, int] = dict()
|
standing: Dict[str, int] = dict()
|
||||||
|
|
||||||
position: int = 1
|
if WDC_STANDING_2024 is None:
|
||||||
last_points: int = 0
|
position: int = 1
|
||||||
|
last_points: int = 0
|
||||||
|
|
||||||
for driver in self.drivers_sorted_by_points(include_inactive=True):
|
for driver in self.drivers_sorted_by_points(include_inactive=True):
|
||||||
points: int = self.total_driver_points_by(driver.name)
|
points: int = self.total_driver_points_by(driver.name)
|
||||||
if points < last_points:
|
if points < last_points:
|
||||||
drivers_with_this_position = 0
|
drivers_with_this_position = 0
|
||||||
for _driver, _position in standing.items():
|
for _driver, _position in standing.items():
|
||||||
if _position == position:
|
if _position == position:
|
||||||
drivers_with_this_position += 1
|
drivers_with_this_position += 1
|
||||||
|
|
||||||
# If multiple drivers have equal points, a place is shared.
|
# If multiple drivers have equal points, a place is shared.
|
||||||
# In this case, the next driver does not occupy the immediate next position.
|
# In this case, the next driver does not occupy the immediate next position.
|
||||||
position += drivers_with_this_position
|
position += drivers_with_this_position
|
||||||
|
|
||||||
standing[driver.name] = position
|
standing[driver.name] = position
|
||||||
last_points = points
|
last_points = points
|
||||||
|
|
||||||
return standing
|
return standing
|
||||||
|
|
||||||
|
if WDC_STANDING_2024 is not None:
|
||||||
|
return WDC_STANDING_2024
|
||||||
|
|
||||||
def wdc_diff_2023_by(self, driver_name: str) -> int:
|
def wdc_diff_2023_by(self, driver_name: str) -> int:
|
||||||
if not driver_name in WDC_STANDING_2023:
|
if not driver_name in WDC_STANDING_2023:
|
||||||
|
Reference in New Issue
Block a user