diff --git a/snakes/BestBattleSnake.py b/snakes/BestBattleSnake.py index c3e1390..07a2704 100644 --- a/snakes/BestBattleSnake.py +++ b/snakes/BestBattleSnake.py @@ -864,6 +864,15 @@ class BestBattleSnake(TemplateSnake): if self._is_tail_stacked(snake["body"]): continue + snake_id = snake.get("id") + enemy_can_grow = None + if enemy_can_grow_cache is not None and snake_id is not None: + enemy_can_grow = enemy_can_grow_cache.get(snake_id) + if enemy_can_grow is None: + enemy_can_grow = self._enemy_can_grow_this_turn(snake, food_set) + if enemy_can_grow: + continue + enemy_tail = snake["body"][-1] blocked.discard((enemy_tail["x"], enemy_tail["y"])) @@ -881,6 +890,12 @@ class BestBattleSnake(TemplateSnake): enemy_len = enemy.get("length", len(enemy["body"])) enemy_tail = (enemy["body"][-1]["x"], enemy["body"][-1]["y"]) enemy_tail_stacked = self._is_tail_stacked(enemy["body"]) + enemy_id = enemy.get("id") + enemy_can_grow = None + if enemy_can_grow_cache is not None and enemy_id is not None: + enemy_can_grow = enemy_can_grow_cache.get(enemy_id) + if enemy_can_grow is None: + enemy_can_grow = self._enemy_can_grow_this_turn(enemy, food_set) enemy_head = enemy["head"] for dx, dy in self.DIRECTIONS.values(): point = (enemy_head["x"] + dx, enemy_head["y"] + dy) @@ -891,6 +906,7 @@ class BestBattleSnake(TemplateSnake): not is_constrictor and point == enemy_tail and not enemy_tail_stacked + and not enemy_can_grow ) can_contest_my_tail = (not is_constrictor and point == my_tail and not my_tail_stacked) @@ -988,7 +1004,8 @@ class BestBattleSnake(TemplateSnake): if self._time_exceeded(deadline) or self._remaining_ms(deadline) < self.future_planning_min_time_ms: return random.choice(top_moves) - candidate_moves = sorted(top_moves, key=lambda move: scores[move], reverse=True)[:3] + candidate_limit = max(1, self.future_planning_branch) + candidate_moves = sorted(top_moves, key=lambda move: scores[move], reverse=True)[:candidate_limit] lookahead_bonus:dict[str, float] = {} for move in candidate_moves: if self._time_exceeded(deadline): diff --git a/tests/test_BestBattleSnake.py b/tests/test_BestBattleSnake.py index 3523efe..64864cc 100644 --- a/tests/test_BestBattleSnake.py +++ b/tests/test_BestBattleSnake.py @@ -905,7 +905,7 @@ class TestBestBattleSnake(unittest.TestCase): enemy_can_grow_cache={"enemy": True}, ) - self.assertNotIn((0, 1), blocked) + self.assertIn((0, 1), blocked) def test_enemy_attack_map_allows_enemy_tail_move_when_enemy_can_grow(self): snake = BestBattleSnake() @@ -948,7 +948,7 @@ class TestBestBattleSnake(unittest.TestCase): enemy_can_grow_cache={"enemy": True}, ) - self.assertEqual(attack_map.get((2, 3)), 4) + self.assertIsNone(attack_map.get((2, 3))) def test_future_planning_prefers_non_trap_path(self): snake = BestBattleSnake()