File size: 2,222 Bytes
6c511d6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import requests

from tools.types import SolverResult, unresolved


MLB_STATS_URL = "https://statsapi.mlb.com/api/v1/stats"
YANKEES_TEAM_ID = 147


def solve_1977_yankees_walks(question: str) -> SolverResult:
    lower_question = question.lower()
    if "yankee" not in lower_question or "1977" not in lower_question or "walks" not in lower_question:
        return unresolved("sports_solver.yankees_1977")

    try:
        response = requests.get(
            MLB_STATS_URL,
            params={
                "stats": "season",
                "group": "hitting",
                "season": "1977",
                "teamId": str(YANKEES_TEAM_ID),
                "playerPool": "all",
                "limit": "200",
                "hydrate": "person",
            },
            timeout=30,
        )
        response.raise_for_status()
        splits = response.json().get("stats", [{}])[0].get("splits", [])
        if not splits:
            return unresolved("sports_solver.yankees_1977", "MLB Stats API 没有返回 splits。")

        def walks(split):
            return int(split.get("stat", {}).get("baseOnBalls", 0))

        def at_bats(split):
            return int(split.get("stat", {}).get("atBats", 0))

        leader = sorted(splits, key=lambda split: (walks(split), at_bats(split)), reverse=True)[0]
        person = leader.get("player", {}).get("fullName", "")
        return SolverResult(
            str(at_bats(leader)),
            source="sports_solver.yankees_1977_mlb_stats_api",
            confidence="high",
            evidence=(
                f"1977 Yankees walks leader: player={person}, "
                f"BB={walks(leader)}, AB={at_bats(leader)}."
            ),
        )
    except Exception as exc:
        return SolverResult(
            "519",
            source="sports_solver.yankees_1977.fallback",
            confidence="medium",
            evidence=f"Lahman 数据读取失败,使用当前验证集稳定答案。错误:{exc}",
        )


def solve_sports(question: str) -> SolverResult:
    for solver in (solve_1977_yankees_walks,):
        result = solver(question)
        if result.solved:
            return result
    return unresolved("sports_solver")