From 6ce622e93e5fbd70422d2d2fbf78071ae00fd1d7 Mon Sep 17 00:00:00 2001 From: Richie Cahill Date: Sun, 16 Nov 2025 15:30:11 -0500 Subject: [PATCH] speed up check_nobles_for_player --- python/splendor/base.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/python/splendor/base.py b/python/splendor/base.py index 8ef666a..6b8c1cd 100644 --- a/python/splendor/base.py +++ b/python/splendor/base.py @@ -331,6 +331,14 @@ def enforce_token_limit( game.bank[color] += amount +def _check_nobles_for_player(player: PlayerState, noble: Noble) -> bool: + # this rule is slower + for color, cost in noble.requirements.items(): # noqa: SIM110 + if player.discounts[color] < cost: + return False + return True + + def check_nobles_for_player( game: GameState, strategy: Strategy, @@ -340,11 +348,7 @@ def check_nobles_for_player( if game.noble_min_requirements > max(player.discounts.values()): return - candidates = [ - noble - for noble in game.available_nobles - if all(player.discounts.get(color, 0) >= requirement for color, requirement in noble.requirements.items()) - ] + candidates = [noble for noble in game.available_nobles if _check_nobles_for_player(player, noble)] if not candidates: return