lines = ['# comment', '[db]', ' host = localhost ', 'port=5432', '', '[feature]', 'enabled=true', 'enabled = false']
assert solution.solve(lines) == {'db': {'host': 'localhost', 'port': '5432'}, 'feature': {'enabled': 'false'}}

Prompt: 只输出 Python 代码，不要解释。实现 solve(lines: list[str]) -> dict。lines 是简化 INI：空行和以 # 开头的行忽略；[section] 开始新 section；key=value 写入当前 section；key/value 两侧空白要去掉；同一 section 内重复 key 后者覆盖前者。返回嵌套 dict。

Output:
```python
def solve(lines: list[str]) -> dict:
    result = {}
    current_section = None
    for line in lines:
        stripped = line.strip()
        if not stripped or stripped.startswith('#'):
            continue
        if stripped.startswith('[') and stripped.endswith(']'):
            current_section = stripped[1:-1].strip()
            if current_section not in result:
                result[current_section] = {}
        elif '=' in stripped and current_section is not None:
            key, _, value = stripped.partition('=')
            result[current_section][key.strip()] = value.strip()
    return result
```


events = ['a credit 100', 'b debit 40', 'a credit 999', 'rev b', 'c debit 10']
assert solution.solve(events) == 90

events = ['x debit 5', 'rev y', 'rev x', 'rev x', 'z credit 7']
assert solution.solve(events) == 7

Prompt: 只输出 Python 代码，不要解释。实现 solve(events: list[str]) -> int。事件格式："<id> credit <amount>" 增加余额，"<id> debit <amount>" 减少余额，"rev <id>" 撤销此前尚未撤销过的同 id 事件。重复交易 id 只保留第一次，未知撤销忽略。返回最终余额。

Output:
```python
def solve(events: list[str]) -> int:
    balance = 0
    seen = set()
    effects = {}
    reversed_set = set()

    for event in events:
        parts = event.split()
        if parts[0] == "rev":
            eid = parts[1]
            if eid in effects and eid not in reversed_set:
                balance -= effects[eid]
                reversed_set.add(eid)
        else:
            eid = parts[0]
            if eid not in seen:
                seen.add(eid)
                amount = int(parts[2])
                if parts[1] == "credit":
                    effects[eid] = amount
                    balance += amount
                else:
                    effects[eid] = -amount
                    balance -= amount

    return balance
```


deps = {'build': ['lint', 'test'], 'test': ['install'], 'lint': ['install']}
assert solution.solve(deps) == [['install'], ['lint', 'test'], ['build']]

assert solution.solve({'deploy': ['build'], 'build': []}) == [['build'], ['deploy']]

Prompt: 只输出 Python 代码，不要解释。实现 solve(deps: dict[str, list[str]]) -> list[list[str]]。deps 表示 task -> prerequisites。返回可并行执行的拓扑层，每层任务按字典序排序；如果存在环，返回空列表。所有只出现在 prerequisites 中的任务也要包含。

Output:
```python
def solve(deps: dict[str, list[str]]) -> list[list[str]]:
    all_tasks = set(deps.keys())
    for prereqs in deps.values():
        all_tasks.update(prereqs)

    in_degree = {task: 0 for task in all_tasks}
    adjacency = {task: [] for task in all_tasks}

    for task, prereqs in deps.items():
        in_degree[task] = len(prereqs)
        for prereq in prereqs:
            adjacency[prereq].append(task)

    layers = []
    remaining = set(all_tasks)

    while remaining:
        current_layer = sorted(t for t in remaining if in_degree[t] == 0)
        if not current_layer:
            return []
        layers.append(current_layer)
        for t in current_layer:
            remaining.discard(t)
            for neighbor in adjacency[t]:
                in_degree[neighbor] -= 1

    return layers
```


ops = ['put a 1', 'put b 2', 'get a', 'put c 3', 'get b', 'get a', 'get c']
assert solution.solve(2, ops) == [1, -1, 1, 3]

assert solution.solve(0, ['put a 1', 'get a']) == [-1]

assert solution.solve(1, ['put a 1', 'put a 2', 'get a']) == [2]

Prompt: 只输出 Python 代码，不要解释。实现 solve(capacity: int, ops: list[str]) -> list[int]，模拟 LRU cache。ops 包含 "put key value" 和 "get key"。get 返回 value，不存在返回 -1。put 已存在 key 要更新并变成最近使用。容量为 0 时所有 get 都返回 -1。

Output:
```python
from collections import OrderedDict

def solve(capacity: int, ops: list[str]) -> list[int]:
    cache = OrderedDict()
    result = []

    for op in ops:
        parts = op.split()
        if parts[0] == "put":
            if capacity == 0:
                continue
            key = int(parts[1])
            value = int(parts[2])
            if key in cache:
                cache[key] = value
                cache.move_to_end(key)
            else:
                if len(cache) >= capacity:
                    cache.popitem(last=False)
                cache[key] = value
        else:
            key = int(parts[1])
            if capacity == 0 or key not in cache:
                result.append(-1)
            else:
                cache.move_to_end(key)
                result.append(cache[key])

    return result
```

Traceback (most recent call last):
  File "/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-g1kcg8yb/test_solution.py", line 4, in <module>
    assert solution.solve(2, ops) == [1, -1, 1, 3]
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/private/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-g1kcg8yb/solution.py", line 12, in solve
    key = int(parts[1])
          ^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: 'a'


Prompt: 只输出 Python 代码，不要解释。实现 solve(base: dict, patch: dict) -> dict，执行 JSON Merge Patch：patch 中值为 None 表示删除该 key；两个值都是 dict 时递归合并；其他值覆盖。不能修改输入对象。

Output:
```python
def solve(base: dict, patch: dict) -> dict:
    def _merge(t, p):
        if not isinstance(p, dict):
            return p
        if not isinstance(t, dict):
            t = {}
        out = dict(t)
        for k, v in p.items():
            if v is None:
                out.pop(k, None)
            else:
                out[k] = _merge(out.get(k), v)
        return out
    return _merge(base, patch)
```


assert solution.solve('1h 30m 500ms') == 5400500

assert solution.solve('2d 1h 2s') == 176402000

assert solution.solve('100ms 2s 3ms') == 2103

Prompt: 只输出 Python 代码，不要解释。实现 solve(text: str) -> int，把时长字符串转换成毫秒。支持整数单位 d、h、m、s、ms，可有空格，单位可重复，顺序任意。例如 "1h 30m 500ms"。

Output:
```python
import re

def solve(text: str) -> int:
    units = {
        'd': 86400000,
        'h': 3600000,
        'm': 60000,
        's': 1000,
        'ms': 1
    }
    total = 0
    pattern = r'(-?\d+)\s*(ms|[dhms])'
    for match in re.finditer(pattern, text):
        value = int(match.group(1))
        unit = match.group(2)
        total += value * units[unit]
    return total
```


assert solution.solve('{a:[(1)]}') is True

assert solution.solve("{'x': '(]'}") is True

assert solution.solve("['unterminated]") is False

assert solution.solve("\"paren \\\" ) still quoted\"") is True

Prompt: 只输出 Python 代码，不要解释。实现 solve(s: str) -> bool，检查括号 ()[]{} 是否配对。单引号或双引号内部的括号忽略；反斜杠会转义引号。输入字符串可以包含普通字符。

Output:
```python
def solve(s: str) -> bool:
    stack = []
    i = 0
    n = len(s)
    quote = None
    while i < n:
        c = s[i]
        if quote:
            if c == '\\':
                i += 2
                continue
            if c == quote:
                quote = None
        elif c in ('"', "'"):
            quote = c
        elif c in '([{':
            stack.append(c)
        elif c in ')]}':
            if not stack:
                return False
            top = stack.pop()
            if (c == ')' and top != '(') or (c == ']' and top != '[') or (c == '}' and top != '{'):
                return False
        i += 1
    return not stack and quote is None
```


rows = [{'user':'a','ts':1,'value':'first'}, {'user':'a','ts':1,'value':'second'}]
assert solution.solve(rows) == [{'user':'a','ts':1,'value':'second'}]

Prompt: 只输出 Python 代码，不要解释。实现 solve(rows: list[dict]) -> list[dict]。每行有 user、ts、value。对每个 user 保留 ts 最大的一行；若 ts 相同，保留在输入中更靠后的行。输出按 user 字典序排序。

Output:
```python
def solve(rows):
    best = {}
    for row in rows:
        u = row['user']
        t = row['ts']
        if u not in best or t >= best[u]['ts']:
            best[u] = row
    return [best[u] for u in sorted(best)]
``````python
def solve(rows):
    best = {}
    for row in rows:
        u = row['user']
        t = row['ts']
        if u not in best or t >= best[u]['ts']:
            best[u] = row
    return [best[u] for u in sorted(best)]
```


Prompt:
下面代码在 total 之后再次读取数据会变成空列表。请指出根因，并给出最小修复。最后单独一行写 FIX: <修复后的第一行函数定义>。

```python
def summarize(items=iter([1, 2, 3])):
    return sum(items)
```

Output:
**根因**

Python 的默认参数在函数定义时**只求值一次**。`iter([1, 2, 3])` 在 `def` 执行时创建了一个迭代器对象，并被绑定到形参 `items`。之后每次无参调用 `summarize()`，复用的都是**同一个**迭代器实例——第一次调用后它已被 `sum` 耗尽，再次调用时 `sum` 拿到的是空迭代器，返回 0。

这是经典的"可变/一次性默认参数"陷阱（与 `def f(x=[])` 同理）。

**最小修复**

用哨兵 `None`，把迭代器的创建挪进函数体，每次调用都得到新迭代器：

```python
def summarize(items=None):
    if items is None:
        items = iter([1, 2, 3])
    return sum(items)
```

FIX: def summarize(items=None):


Prompt:
下面代码期望统计每个用户的事件数，但所有用户计数会互相影响。请指出根因，并给出最小修复。最后单独一行写 FIX: <修复后的 defaultdict 初始化行>。

```python
from collections import defaultdict
shared = {'seen': []}
counts = defaultdict(lambda: shared)

def add(user, event):
    counts[user]['seen'].append(event)
    return counts[user]
```

Output:
**根因**

`defaultdict(lambda: shared)` 的 factory 每次都返回**同一个** `shared` 字典对象（包括其中那个 `seen` 列表），所以无论 key 是哪个 user，`counts[user]` 都指向同一个 dict / 同一个 list。`append` 操作因此在所有用户间共享，于是计数互相"污染"。

**最小修复**

让 factory 每次返回**新的** dict：

```python
counts = defaultdict(lambda: {'seen': []})
```

FIX: counts = defaultdict(lambda: {'seen': []})


Prompt:
下面分页代码会漏掉最后不足 page_size 的一页。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 range 行>。

```python
def pages(items, page_size):
    out = []
    for start in range(0, len(items) - page_size, page_size):
        out.append(items[start:start + page_size])
    return out
```

Output:
# Bug 分析

原代码用 `range(0, len(items) - page_size, page_size)`，当 `len(items)` 不是 `page_size` 的整数倍时，最后那页不满 `page_size`，但循环已经结束，导致遗漏。

例如 `len(items)=10, page_size=3`：
- 原 range 得到 `0, 3, 6`
- 起始 9 那一页（仅 1 个元素）被漏掉

# 最小修复

去掉 `- page_size`。这样当 `len(items)` 正好是 `page_size` 倍数时，最后一个 `start` 恰好是 `len(items) - page_size`，切片非空，不会产生空页；而有余数时，`start = len(items) - r`（r 为余数）会被包含进来。

```python
def pages(items, page_size):
    out = []
    for start in range(0, len(items), page_size):
        out.append(items[start:start + page_size])
    return out
```

FIX: `for start in range(0, len(items), page_size):`


Prompt:
下面代码期望把数字字符串按数值排序，但结果是字典序。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 return 行>。

```python
def order(ids):
    return sorted(ids)
```

Output:
## Bug 分析

`sorted(ids)` 在没有指定 `key` 时，会对字符串进行**字典序**（逐字符比较）排序：

- `"10"` 和 `"2"` 比较时，比较的是首字符 `'1'` 和 `'2'`，由于 `'1' < '2'`，所以 `"10"` 排在 `"2"` 前面。

## 最小修复

传入 `key=int`，让排序时把每个元素先转成整数再比较：

```python
def order(ids):
    return sorted(ids, key=int)
```

## 验证

```python
order(["10", "2", "1", "21"])
# 字典序：['1', '10', '2', '21']  ❌
# 数值序：['1', '2', '10', '21']  ✅
```

FIX: `    return sorted(ids, key=int)`## Bug 分析

`sorted(ids)` 在没有指定 `key` 时，会对字符串进行**字典序**（逐字符比较）排序：

- `"10"` 和 `"2"` 比较时，比较的是首字符 `'1'` 和 `'2'`，由于 `'1' < '2'`，所以 `"10"` 排在 `"2"` 前面。

## 最小修复

传入 `key=int`，让排序时把每个元素先转成整数再比较：

```python
def order(ids):
    return sorted(ids, key=int)
```

## 验证

```python
order(["10", "2", "1", "21"])
# 字典序：['1', '10', '2', '21']  ❌
# 数值序：['1', '2', '10', '21']  ✅
```

FIX: `    return sorted(ids, key=int)`


Prompt:
下面缓存装饰器会把不同参数的调用混在一起。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 key 赋值行>。

```python
cache = {}
def memo(fn):
    def wrapper(*args, **kwargs):
        key = fn.__name__
        if key not in cache:
            cache[key] = fn(*args, **kwargs)
        return cache[key]
    return wrapper
```

Output:
**Bug 分析**

`key` 只用了函数名 `fn.__name__`，所以 `fn(1)` 之后 `fn(2)` 也会命中 `fn(1)` 的缓存——所有实参的调用结果被混在同一个槽里。args / kwargs 都没有进入 key，且 `kwargs` 是 dict，本身不可哈希。

**最小修复**

把 `args` 和排序后的 `kwargs` 项一起纳入 key（这样元组可哈希）：

```python
def wrapper(*args, **kwargs):
    key = (fn.__name__, args, tuple(sorted(kwargs.items())))
    if key not in cache:
        cache[key] = fn(*args, **kwargs)
    return cache[key]
```

注意：`cache` 仍然是一个普通 dict，key 现在是元组（`fn.__name__` + `args` + 排序后的 kwargs 项），不同实参组合会产生不同 key，不再串味。

FIX: `key = (fn.__name__, args, tuple(sorted(kwargs.items())))`


Prompt:
下面代码期望浅拷贝列表后独立追加，但原列表也被修改。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 copy 行>。

```python
def append_copy(items, value):
    copied = items
    copied.append(value)
    return copied
```

Output:
**Bug 分析：**

`copied = items` 并没有创建新列表，只是让 `copied` 和 `items` 指向**同一个**列表对象。后续的 `copied.append(value)` 实际上修改的是这一共享对象，因此原列表 `items` 也会被一起改动。

要得到一份独立的浅拷贝，需要显式复制列表内容。

**最小修复：**

```python
def append_copy(items, value):
    copied = items.copy()
    copied.append(value)
    return copied
```

验证：

```python
original = [1, 2, 3]
new = append_copy(original, 99)
print(original)  # [1, 2, 3]   原列表未受影响
print(new)       # [1, 2, 3, 99]
```

另外，等价的写法还有 `list(items)` 或 `items[:]`，效果相同（浅拷贝）。

FIX: copied = items.copy()


Prompt:
下面代码期望解析 JSON 字符串，但传入已经是 dict 时会报错。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 data 赋值行>。

```python
import json

def load(payload):
    data = json.loads(payload)
    return data['id']
```

Output:
**Bug 分析**

`json.loads()` 严格要求入参为 `str`/`bytes` 等可解析类型，当传入 `dict` 时会抛出 `TypeError: the JSON object must be str, bytes or bytearray, not dict`。

**最小修复**

```python
import json

def load(payload):
    data = payload if isinstance(payload, dict) else json.loads(payload)
    return data['id']
```

FIX: `data = payload if isinstance(payload, dict) else json.loads(payload)`


Answer: 删除 finally 中的 return None

Answer: 去掉 finally 的 return None

Answer: 不要在 finally 里 return None

Answer: remove return None

Answer: 去掉 finally 中的 return None

Answer: 删除或替换 finally 中的 return None

Answer: 去掉 finally 中的 `return None`

Answer: 删除或替换 finally 中的 `return None`

Answer: 删除 finally 块中的 `return None`

Answer: 删除 finally 块中的 return None

Answer: 删除 finally 中的 `return None`

Answer: 删除 `finally` 块中的 `return None`

Answer: 删除 `finally` 中的 `return None`

Answer: 删除 `finally: return None`

Answer: 将 `finally:` 中的 `return None` 删除

Answer: finally 中的 return None 删除

Answer: finally: 中的 return None 删除

Answer: 删除 finally 块中的 'return None'

Answer: 删除 finally 子句中的 `return None`

Answer: 删除 finally 子句中的 return None

Answer: delete the line `return None` inside the finally block

Answer: delete the line return None inside the finally block

Answer: finally 块不应包含 return 语句

Answer: finally 块不应包含 return

Answer: finally 不应包含 return

Prompt:
下面代码期望 finally 后仍保留 try 中返回值，但实际总是返回 None。请指出 bug，并给出最小修复。最后单独一行写 FIX: <要删除或替换的 finally 行说明>。

```python
def read_value():
    try:
        return 42
    finally:
        return None
```

Output:
## Bug 分析

在 Python 中，`finally` 块里的 `return` 语句会**覆盖** `try` 块中的返回值。即使 `try` 已经执行了 `return 42`，控制流仍会进入 `finally`，而 `finally` 中的 `return None` 会把返回值替换为 `None`。

## 最小修复

```python
def read_value():
    try:
        return 42
    finally:
        pass
```

`finally` 块通常用于释放资源（关闭文件、锁等），不应包含 `return`。如果确实没有清理工作要做，可以直接省略 `finally`。

FIX: 删除 `return None` 这一行（finally 块不应包含 return 语句，否则会覆盖 try 中的返回值）

finally 块不应包含 return 语句
finally 块不应包含 return


Answer: 125

Prompt: 只回答最终数字：有 A、B、C、D 四个服务。A 每分钟处理 6 个请求，B 比 A 少 2 个，C 是 B 的 2 倍，D 是 A 和 C 的平均值。四个服务 5 分钟一共处理多少请求？

Output: 125


Answer: D

Prompt: 只回答一个字母：五个任务 A、B、C、D、E 排队。A 必须在 B 前，B 必须在 C 前；D 不能在两端；E 必须紧挨在 C 后面。在所有满足条件的队列中，按字典序最小的队列第三个任务是谁？

Output: D


Answer: 0

Prompt: 只回答最终数字：一个 4 位二进制数从 1011 开始，先左移一位并只保留低 4 位，再与 0110 做异或，最后转成十进制。结果是多少？

Output: 0


Answer: 18

Prompt: 只回答最终数字：一个集合最初为 {1,2,3,4,5}。依次执行：删除所有偶数；加入 6 和 7；把每个元素乘以 2；删除大于 10 的元素。最终集合元素之和是多少？

Output: **18**


Answer: 可满足

Prompt: 只回答“可满足”或“不可满足”：有三个布尔变量 x、y、z。约束为：x 或 y 为真；如果 x 为真则 z 为假；如果 y 为真则 z 为真；x 和 y 不能同时为真。是否存在赋值满足全部约束？

Output: 可满足


默认使用 默认判分 默认采用 作为默认判分

因为成本太高 因为不支持中文

Prompt:
只根据资料回答。

资料 A：DracoBench v0.2 的目标是提高区分度，优先增加 coding、debugging、RAG 和 instruction_following 题。
资料 B：DracoBench v0.2 不会默认使用 LLM-as-judge；开放中文写作题只做少量规则校验和人工抽检。
资料 C：v0.2 的 HTML 报告必须展示通过率、成本、reasoning tokens、失败样例和逐题明细。

问题：v0.2 为什么没有把 LLM-as-judge 作为默认判分？

Output:
根据现有资料，**没有直接说明原因**，只能从相关材料中做出推断：

1. **资料 B** 仅陈述了事实——v0.2 不默认使用 LLM-as-judge，开放中文写作题只做少量规则校验和人工抽检，但未解释背后的理由。

2. 可结合 **资料 A** 做合理推断：v0.2 的重点是提升区分度，新增题型集中在 coding、debugging、RAG、instruction_following——这些任务**大多可通过规则或确定性方式判分**（如代码是否通过测试、指令是否被遵从），不需要 LLM-as-judge 介入；而对于开放中文写作题，仅采用规则校验 + 人工抽检已足够。

综上，资料未显式给出"为什么不用 LLM-as-judge"的原因，但可以看出 v0.2 的题型设计和判分策略都朝着**可机器化、可规则化**的方向倾斜，这可能是放弃 LLM-as-judge 默认判分的原因之一。若需确切原因，需补充其他来源资料。


Beta 成本 延迟 判断

Alpha 更适合
多模态更强

Prompt:
只根据资料回答，不要自行补充。

资料：模型 Alpha 在 30 道 challenge 题中通过 24 道，成本 0.08 美元，平均延迟 9 秒。模型 Beta 通过 22 道，成本 0.02 美元，平均延迟 3 秒。资料没有给出两者在多模态任务上的表现。

问题：如果要写低成本高吞吐摘要服务，资料更支持选择哪个模型？另外，多模态表现能否判断？

Output:
## 选择建议

资料更支持选择 **模型 Beta**，理由如下：

- **成本更低**：Beta 0.02 美元 vs Alpha 0.08 美元，约为 Alpha 的 1/4
- **延迟更低**：3 秒 vs 9 秒，更有利于高吞吐
- **质量差距不大**：Beta 通过 22 道，Alpha 通过 24 道，相差 2/30，对摘要这类任务而言，成本与吞吐收益可能超过这点质量差距

## 多模态表现

**无法判断**。资料明确表示"没有给出两者在多模态任务上的表现"，因此既不能比较也不能据此选型。


空输出 输出为空 未输出

Prompt:
只根据资料回答。

资料：一次评测中，K 模型在 smoke set 上 7/7，通过率 100%；在 hard set 上原始结果 47/50，其中 2 题后来被认定为题面歧义，单独复测通过。另有 1 题因 reasoning tokens 用尽而空输出。

问题：更公平的文字结论应该如何描述 K 模型这次 hard set 表现？

Output:
更公平的文字结论可以这样写：

> 在 hard set（50 题）上，K 模型原始通过 47 题（94%）。3 道未通过的题中，**2 道属于题面歧义**，经认定后 K 模型在复测中均能给出正确解，可视为题库瑕疵而非模型能力缺陷；**剩余 1 道是因 reasoning tokens 耗尽导致空输出**，属于模型端的真实失败。剔除题面歧义的 2 题后，K 模型在有效题目上的通过率为 **47 / 48 ≈ 97.9%**，并暴露出在长链推理下输出预算不足这一问题。

这样既保留了原始数据（47/50），又区分了"题目原因"和"模型原因"两类未通过项，避免把题面歧义算到模型头上。


Prompt:
只根据资料回答，不要使用资料外知识。

资料：报告字段包括 pass_rate、avg_latency_ms、total_cost、prompt_tokens、completion_tokens、reasoning_tokens。报告不包含模型训练数据来源，也不包含供应商真实利润率。

问题：根据资料，能否从报告判断供应商利润率？

Output:
不能。

根据资料，报告**不包含供应商真实利润率**。报告中的字段（pass_rate、avg_latency_ms、total_cost、prompt_tokens、completion_tokens、reasoning_tokens）均为性能与计费相关指标，无法从中推断出供应商的利润率。


Prompt: 只输出 JSON 对象，不要 Markdown。字段 status 必须是 "review"；字段 scores 必须是对象，包含 coding、debugging、rag 三个整数；字段 note 必须是不超过 12 个汉字的中文字符串。

Output: {"status":"review","scores":{"coding":85,"debugging":80,"rag":75},"note":"评估中，待审核"}{"status":"review","scores":{"coding":85,"debugging":80,"rag":75},"note":"评估中，待审核"}

invalid JSON object: Extra data: line 1 column 84 (char 83)


Prompt: 只输出 4 行，不要解释。第 1 行是 BEGIN，第 4 行是 END。第 2 行必须包含“模型评测”，第 3 行必须包含“HTML报告”。不能出现任何项目符号。

Output:
BEGIN
本模型评测涵盖多维度能力测试
生成可视化HTML报告用于结果展示
END


Prompt: 只输出一个中文句子，不能超过 28 个汉字。必须同时包含“难题”和“区分度”，不能包含“最强”“吊打”“遥遥领先”。

Output: 这场考试的难题设置合理，区分度较高。这场考试的难题设置合理，区分度较高。


简单题 真实能力 失败样例

Prompt: 写一段不超过 120 个汉字的公众号结论，主题是“模型在简单题满分不代表真实强”。必须包含“简单题”“真实能力”“失败样例”，不能出现“吊打”。

Output: 简单题拿满分≠模型真强。真正的真实能力，要在长文本、多轮对话、复杂推理里见分晓。一旦脱离舒适区，失败样例立刻暴露短板。评测别只看热闹，要看硬仗。


Prompt: 把下面口语句改写成专业表达，不超过 80 个汉字：这个模型看起来很猛，但一遇到复杂调试就开始掉链子。必须包含“复杂调试”和“稳定性”，不能包含“猛”“掉链子”。

Output: 该模型在常规任务中表现优异，但在复杂调试场景下稳定性显著下降，难以满足实际应用需求。该模型在常规任务中表现优异，但在复杂调试场景下稳定性显著下降，难以满足实际应用需求。


assert solution.solve([{'user':'x','type':'remove','amount':'2'}]) == {'x': -2}

Prompt: 只输出 Python 代码，不要解释。实现 solve(events: list[dict]) -> dict[str, int]。每个事件包含 user、type、amount；type 为 "add" 或 "remove"。按 user 汇总 add 减 remove 后的库存，结果中去掉库存为 0 的用户，按 key 字典序返回普通 dict。amount 可能是字符串数字。

Output:
```python
def solve(events: list[dict]) -> dict[str, int]:
    inventory = {}
    for event in events:
        user = event['user']
        amount = int(event['amount'])
        if event['type'] == 'add':
            inventory[user] = inventory.get(user, 0) + amount
        else:
            inventory[user] = inventory.get(user, 0) - amount
    inventory = {k: v for k, v in inventory.items() if v != 0}
    return dict(sorted(inventory.items()))
```


assert solution.solve('10 - (2 + 3) + 4') == 9

Prompt: 只输出 Python 代码，不要解释。实现 solve(expr: str) -> int。expr 只包含非负整数、+、-、空格和括号，计算表达式结果。不要使用 eval。

Output:
```python
def solve(expr: str) -> int:
    expr = expr.replace(' ', '')

    def parse_expression(pos):
        result, pos = parse_term(pos)
        while pos < len(expr) and expr[pos] in '+-':
            op = expr[pos]
            pos += 1
            right, pos = parse_term(pos)
            if op == '+':
                result += right
            else:
                result -= right
        return result, pos

    def parse_term(pos):
        return parse_factor(pos)

    def parse_factor(pos):
        if expr[pos] == '(':
            pos += 1
            result, pos = parse_expression(pos)
            pos += 1
            return result, pos
        else:
            start = pos
            while pos < len(expr) and expr[pos].isdigit():
                pos += 1
            return int(expr[start:pos]), pos

    result, _ = parse_expression(0)
    return result
```


Prompt: 只输出 Python 代码，不要解释。实现 solve(rows: list[str]) -> list[tuple[str, int]]。每行格式为 "name score"，空白数量不定；同名保留最高分；输出按分数降序、同分按 name 升序。忽略空行。

Output:
```python
def solve(rows: list[str]) -> list[tuple[str, int]]:
    best = {}
    for row in rows:
        row = row.strip()
        if not row:
            continue
        parts = row.split()
        name = parts[0]
        score = int(parts[1])
        if name not in best or score > best[name]:
            best[name] = score
    return sorted(best.items(), key=lambda x: (-x[1], x[0]))
```


assert solution.solve('a*b?d', 'axxxbc d'.replace(' ','')) is True

assert solution.solve('a*c', 'ab') is False

assert solution.solve('file-??.txt', 'file-ab.txt') is True

Prompt: 只输出 Python 代码，不要解释。实现 solve(pattern: str, text: str) -> bool。pattern 支持 ? 匹配任意单字符，* 匹配任意长度字符串。必须匹配完整 text。

Output:
```python
def solve(pattern: str, text: str) -> bool:
    m, n = len(pattern), len(text)
    dp = [[False] * (n + 1) for _ in range(m + 1)]
    dp[0][0] = True
    for i in range(1, m + 1):
        if pattern[i - 1] == '*':
            dp[i][0] = dp[i - 1][0]
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            p = pattern[i - 1]
            if p == '*':
                dp[i][j] = dp[i - 1][j] or dp[i][j - 1]
            elif p == '?' or p == text[j - 1]:
                dp[i][j] = dp[i - 1][j - 1]
    return dp[m][n]
```


Prompt: 只输出 Python 代码，不要解释。实现 solve(tree: dict) -> list[str]。tree 是嵌套字典，叶子是字符串或数字。返回所有叶子的路径，路径用点连接，按字典序排序。例如 {'a': {'b': 1}} -> ['a.b=1']。

Output:
```python
def solve(tree: dict) -> list[str]:
    result = []
    def dfs(node, path):
        if not isinstance(node, dict):
            return
        for key, value in node.items():
            new_path = path + [str(key)]
            if isinstance(value, dict):
                dfs(value, new_path)
            else:
                result.append('.'.join(new_path) + '=' + str(value))
    dfs(tree, [])
    result.sort()
    return result
``````python
def solve(tree: dict) -> list[str]:
    result = []
    def dfs(node, path):
        if not isinstance(node, dict):
            return
        for key, value in node.items():
            new_path = path + [str(key)]
            if isinstance(value, dict):
                dfs(value, new_path)
            else:
                result.append('.'.join(new_path) + '=' + str(value))
    dfs(tree, [])
    result.sort()
    return result
```


assert solution.solve([1,-2,0,3]) == 4
assert solution.solve([1,-2,-2,3]) == 3
assert solution.solve([-1,-1,-1]) == -1
assert solution.solve([2,1,-2,3]) == 6

Prompt: 只输出 Python 代码，不要解释。实现 solve(nums: list[int]) -> int。返回删除恰好一个元素后，剩余数组的最大连续子数组和。nums 长度至少为 2，可以全为负数。

Output:
```python
def solve(nums: list[int]) -> int:
    n = len(nums)

    prefix_max = [0] * n
    max_ending = nums[0]
    prefix_max[0] = nums[0]
    for i in range(1, n):
        max_ending = max(nums[i], max_ending + nums[i])
        prefix_max[i] = max(prefix_max[i-1], max_ending)

    suffix_max = [0] * n
    max_starting = nums[n-1]
    suffix_max[n-1] = nums[n-1]
    for i in range(n-2, -1, -1):
        max_starting = max(nums[i], max_starting + nums[i])
        suffix_max[i] = max(suffix_max[i+1], max_starting)

    max_ending_at = [0] * n
    max_ending_at[0] = nums[0]
    for i in range(1, n):
        max_ending_at[i] = max(nums[i], max_ending_at[i-1] + nums[i])

    max_starting_at = [0] * n
    max_starting_at[n-1] = nums[n-1]
    for i in range(n-2, -1, -1):
        max_starting_at[i] = max(nums[i], max_starting_at[i+1] + nums[i])

    result = float('-inf')
    for i in range(n):
        if i == 0:
            result = max(result, suffix_max[1])
        elif i == n - 1:
            result = max(result, prefix_max[n-2])
        else:
            result = max(result, prefix_max[i-1], suffix_max[i+1], max_ending_at[i-1] + max_starting_at[i+1])

    return result
```


Prompt:
下面代码期望把输入按逗号拆分并去掉空白，但会把空字段也保留下来。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 return 行>。

```python
def parse(s):
    return [part.strip() for part in s.split(',')]
```

Output:
## Bug 分析

`split(',')` 会保留所有由逗号分隔出的字段，包括空字符串。例如：

- `parse("a, b, , c")` → `['a', 'b', '', 'c']`（中间的空格字段被保留）
- `parse(",a,b,")` → `['', 'a', 'b', '']`（首尾的空字段被保留）

题目要求"去掉空白"，但当前实现只对每个字段做 `strip()`，并没有把 `strip()` 后为空的字段过滤掉。

## 最小修复

在列表推导式里加一个 `if part.strip()` 过滤条件：

```python
def parse(s):
    return [part.strip() for part in s.split(',') if part.strip()]
```

FIX: `    return [part.strip() for part in s.split(',') if part.strip()]`


Answer: datetime.fromisoformat

Answer: dateutil.parser

Answer: 解析 ts 后排序

Answer: parse ts

Answer: fromisoformat

Answer: int(r['ts'])

Answer: float(r['ts'])

Answer: key=lambda r: int(r['ts'])

Answer: key=lambda r: float(r['ts'])

Prompt:
下面代码期望用 UTC 时间戳排序，但字符串排序会错。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 sort 行>。

```python
rows.sort(key=lambda r: r['ts'])
```

Output:
**Bug 分析**

`r['ts']` 当前是字符串（例如 `"1705314600"` 或 ISO 字符串），按字典序比较并非按时间先后：

- `"1705314601" < "1705314602"` 看似对的，但若 `ts` 是 ISO 字符串且时区/格式不统一（如 `"2024-1-5 ..."` 与 `"2024-01-15 ..."`），字典序就会错位；即使是纯数字串，Python 2 时代还会被当 long 比较，存在歧义与跨语言风险。
- 最稳妥做法：把 `ts` 解析为**数值型时间戳**（或 `datetime`）后再排序。

**最小修复**

将 key 改为把字符串转成数值时间戳，强制按数值大小排序：

```python
rows.sort(key=lambda r: float(r['ts']))
```

如果 `ts` 一定是整型秒级时间戳，更严格写法：

```python
rows.sort(key=lambda r: int(r['ts']))
```

**FIX:** `rows.sort(key=lambda r: float(r['ts']))`**Bug 分析**

`r['ts']` 当前是字符串（例如 `"1705314600"` 或 ISO 字符串），按字典序比较并非按时间先后：

- `"1705314601" < "1705314602"` 看似对的，但若 `ts` 是 ISO 字符串且时区/格式不统一（如 `"2024-1-5 ..."` 与 `"2024-01-15 ..."`），字典序就会错位；即使是纯数字串，Python 2 时代还会被当 long 比较，存在歧义与跨语言风险。
- 最稳妥做法：把 `ts` 解析为**数值型时间戳**（或 `datetime`）后再排序。

**最小修复**

将 key 改为把字符串转成数值时间戳，强制按数值大小排序：

```python
rows.sort(key=lambda r: float(r['ts']))
```

如果 `ts` 一定是整型秒级时间戳，更严格写法：

```python
rows.sort(key=lambda r: int(r['ts']))
```

**FIX:** `rows.sort(key=lambda r: float(r['ts']))`

int(r['ts'])
float(r['ts'])
key=lambda r: int(r['ts'])
key=lambda r: float(r['ts'])


Prompt:
下面代码在输入包含 0 时会误判为默认值 10。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 limit 赋值行>。

```python
def query(limit=None):
    limit = limit or 10
    return list(range(limit))
```

Output:
**Bug 分析**

`limit or 10` 利用了 Python 的真值判断，而 `0` 是 falsy 值，所以当传入 `limit=0` 时会被替换成 `10`，丢失了"上限为 0"的语义。

**最小修复**：用 `is None` 显式判断"未传入"，而不是依赖真值。

```python
def query(limit=None):
    limit = 10 if limit is None else limit
    return list(range(limit))
```

FIX: `    limit = 10 if limit is None else limit`


Prompt:
下面代码期望复制嵌套配置后修改副本，但原配置也被修改。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 copied 赋值行>。

```python
def update(config):
    copied = dict(config)
    copied['db']['host'] = 'localhost'
    return copied
```

Output:
**Bug 分析**

`dict(config)` 只做了**浅拷贝**：`copied` 是一个新字典，但 `copied['db']` 仍然指向 `config['db']` 同一个嵌套字典对象。因此 `copied['db']['host'] = 'localhost'` 会同时修改原配置。

**最小修复**

使用 `copy.deepcopy` 进行深拷贝（需 `import copy`）。

FIX: copied = copy.deepcopy(config)


Prompt:
下面代码期望找到第一个匹配项，但找不到时会抛 StopIteration。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 return 行>。

```python
def find_user(users, name):
    return next(u for u in users if u['name'] == name)
```

Output:
## Bug 分析

`next()` 在没有提供默认值时，若迭代器耗尽会抛出 `StopIteration` 异常。这里生成器表达式找不到匹配项时即会触发，导致函数在未找到用户时崩溃。

## 最小修复

为 `next()` 传入默认值 `None`：

```python
def find_user(users, name):
    return next((u for u in users if u['name'] == name), None)
```

FIX: `return next((u for u in users if u['name'] == name), None)`


Prompt:
下面代码期望按请求顺序记录日志，但默认参数导致多次调用共用同一个列表。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的函数定义行>。

```python
def log_request(req, logs=[]):
    logs.append(req['id'])
    return logs
```

Output:
## Bug 分析

Python 的默认参数在函数**定义时**只求值一次，而不是每次调用时重新创建。`logs=[]` 这个列表对象在函数定义时就已经生成并驻留，所有不传 `logs` 的调用都会共享同一个列表，导致日志被串到一起。

```python
log_request({'id': 1})  # [1]
log_request({'id': 2})  # [1, 2]   ← 期望 [2]
log_request({'id': 3})  # [1, 2, 3] ← 期望 [3]
```

## 最小修复

把默认值改成 `None`，在函数体内惰性创建新列表：

```python
def log_request(req, logs=None):
    if logs is None:
        logs = []
    logs.append(req['id'])
    return logs
```

这样每次不传 `logs` 的调用都会得到一个全新的列表，行为符合"按请求顺序独立记录"的预期。

FIX: def log_request(req, logs=None):


Answer: 3

Prompt: 只回答最终数字：一个队列从左到右是 A,B,C,D,E。依次执行：把第 2 个移到末尾；删除第 3 个；在最前面插入 X；把最后两个反转。最终队列中 C 的位置是第几位？

Output: 3


Answer: 120

Prompt: 只回答最终数字：某缓存命中率从 60% 提升到 75%。如果总请求数为 800，未命中请求减少了多少个？

Output: 120120


Prompt:
只根据资料回答。

资料：A 模型在 ability mode 中通过 46/50，成本 0.12 美元；在 efficiency mode 中通过 34/50，成本 0.04 美元。报告建议把 ability mode 用于能力判断，把 efficiency mode 用于成本和稳定性判断。

问题：如果文章讨论“模型真实能力”，应该优先引用哪个模式？如果讨论“低预算可用性”，应该优先引用哪个模式？

Output:
根据资料：

1. **讨论"模型真实能力"**：应优先引用 **ability mode**。该模式通过率更高（46/50），且报告明确建议将其用于能力判断。

2. **讨论"低预算可用性"**：应优先引用 **efficiency mode**。该模式成本更低（0.04 美元），且报告建议将其用于成本和稳定性判断。


类型假设
假设 key 为整数
假设 key 是整数
key 为整数类型

Prompt:
只根据资料回答。

资料：一次失败分析显示，模型输出了 key = int(parts[1])，但测试数据里的 key 是字符串 a、b、c。报告认为这是“擅自补类型假设”，不是 token 截断。

问题：这次失败的根因是什么？

Output: 根因是**擅自补类型假设**：模型在没有依据的情况下，自行假设 key 应为整数类型并执行了 `int(parts[1])` 转换，而实际测试数据中的 key 是字符串（a、b、c）。报告明确指出这不是 token 截断问题，而是模型越权做出了类型推断。


已经支持 折线图 柱状图

Prompt:
只根据资料回答，不要自行补充。

资料：DracoBench 的 HTML 报告目前展示 Summary、By Suite、Failure Examples 和 Case Details。Failure Examples 中包括 Prompt、Mistake Analysis、Scorer Details 和 Output。资料没有提到图表功能。

问题：报告是否已经支持图表？回答时说明依据。

Output:
**不支持。**

**依据：** 资料明确说明 HTML 报告目前展示的内容为 Summary、By Suite、Failure Examples 和 Case Details，其中 Failure Examples 包含 Prompt、Mistake Analysis、Scorer Details 和 Output。资料最后特别指出"资料没有提到图表功能"，因此根据现有资料，报告尚未支持图表。


Prompt: 只输出 JSON 对象。字段 mode 必须是 "ability"；字段 limits 必须是对象，包含 max_tokens:4096 和 temperature:0；字段 warnings 必须是正好两个字符串组成的数组。不要 Markdown。

Output: {"mode":"ability","limits":{"max_tokens":4096,"temperature":0},"warnings":["strict output","no markdown"]}


Prompt: 只输出 Markdown 表格，必须有 3 列：模式、用途、风险。必须包含 ability mode 和 efficiency mode 两行。不能添加表格外说明。

Output:
| 模式 | 用途 | 风险 |
|------|------|------|
| ability mode | 启用模型全部能力以处理复杂任务 | 资源消耗高，可能产生不可预测输出 |
| efficiency mode | 优化资源使用以提升响应速度 | 可能牺牲部分能力，输出精度下降 |


Prompt: 写一段不超过 140 个汉字的公众号小结，主题是“为什么要同时展示原题、模型输出和错误解释”。必须包含“原题”“错误解释”“可复查”，不能出现“玄学”。

Output:
为什么必须把**原题**、模型输出、**错误解释**一并展示？三者并列，读者才能看清问题背景、AI 回答与失误所在。每条错误解释都是一次**可复查**的案例：帮助用户验证推理链条，也提醒团队持续打磨模型。透明公开，才能积累真正的信任。

（正文约 93 字，符合要求）为什么必须把**原题**、模型输出、**错误解释**一并展示？三者并列，读者才能看清问题背景、AI 回答与失误所在。每条错误解释都是一次**可复查**的案例：帮助用户验证推理链条，也提醒团队持续打磨模型。透明公开，才能积累真正的信任。

（正文约 93 字，符合要求）


Answer: 15

Prompt: 只回答最终数字：变量初始为 x=2, y=5, z=1。若 x<y，交换 x 和 y；然后令 z=z+x-y；若 z 为偶数，令 y=y+z，否则令 x=x+z。最终 x+y+z 等于多少？

Output: 15


Answer: B

Prompt: 只回答一个字母：任务 A、B、C、D、E、F 排列。C 必须紧挨在 A 后面；B 必须在 D 前；D 必须在 F 前；F 必须最后；E 不能第一。在所有满足条件的排列中字典序最小的排列，第三个任务是谁？

Output: B


Answer: 可满足

Prompt: 只回答“可满足”或“不可满足”：布尔变量 x、y、z 满足：x 和 y 恰好一个为真；如果 x 为真则 z 为真；如果 y 为真则 z 为假；z 为真。是否存在赋值满足全部约束？

Output:
可满足

赋值：x = 真, y = 假, z = 真
- "x 和 y 恰好一个为真" ✓
- "x 为真则 z 为真" ✓
- "y 为真则 z 为假"（y 为假，该条件无要求）✓
- "z 为真" ✓

可满足

赋值：x = 真, y = 假, z = 真
- "x 和 y 恰好一个为真" ✓
- "x 为真则 z 为真" ✓
- "y 为真则 z 为假"（y 为假，该条件无要求）✓
- "z 为真" ✓


Answer: 20

Prompt: 只回答最终数字：列表 [2,4,6,8] 中每个数先减去它的位置编号（从 1 开始），然后删除所有奇数，再把剩余数平方，最后求和。结果是多少？

Output: 20


Answer: 12

Prompt: 只回答最终数字：一个 5 位二进制数 10110 先循环右移 1 位，再与 00111 做异或，最后转成十进制。结果是多少？

Output: 12


Answer: C

Prompt: 只回答一个字母：模型 A 通过 18 题、成本 0.06；模型 B 通过 20 题、成本 0.10；模型 C 通过 16 题、成本 0.04。按“通过题数/成本”最高选择，应该选哪个模型？

Output: C


Answer: 5

Prompt: 只回答最终数字：同一套 100 道题中，失败题数从 12 降到 7。错误率降低了多少个百分点？

Output: 55


Answer: 3

Prompt: 只回答最终数字：集合 S 初始为 {a,b,c,d}。删除字母序在 c 之前的元素；加入 e 和 b；再删除所有元音字母。最终集合有几个元素？

Output: 3


Answer: 15

Prompt: 只回答最终数字：3x3 矩阵按行是 1 2 3 / 4 5 6 / 7 8 9。顺时针旋转 90 度后，第二行元素之和是多少？

Output: 15


Answer: 3

Prompt: 只回答最终数字：依赖关系为 a 无依赖；b 依赖 a；c 依赖 a；d 依赖 b 和 c；e 依赖 b；f 依赖 d 和 e；g 依赖 a。按可并行执行的拓扑层划分，第二层有几个任务？

Output: 3


Answer: 星期五

Prompt: 只回答星期几：第 0 天是星期二。每 7 天循环一次。第 17 天是星期几？

Output: 星期五星期五


Answer: 8

Prompt: 只回答最终数字：用 A、B、C 组成长度为 3 的字符串，要求恰好包含一个 A，并且最后一个字符不能是 C。满足条件的字符串有多少个？

Output: **10**


Answer: -2

Prompt: 只回答最终数字：栈操作从空栈开始。push n 表示入栈；dup 复制栈顶；add 弹出两个数并压入它们的和；swap 交换栈顶两个数；sub 先弹出 x 再弹出 y，并压入 y-x。依次执行：push 2, push 3, dup, add, push 4, swap, sub。最终栈顶是多少？

Output: -2


Answer: 4

Prompt: 只回答最终数字：三个队列 Q1、Q2、Q3 初始长度分别为 2、1、0。每一轮先从所有非空队列各处理 1 个元素，然后向 Q3 加入 2 个元素。执行 3 轮后，三个队列总长度是多少？

Output: 4


Answer: 8

Prompt: 只回答最终数字：映射初始为 {a:1, b:2}。依次执行：设置 c=a+b；设置 a=c-b；删除 b；设置 d=a+c。最终所有 value 之和是多少？

Output: 8


Answer: 丙

Prompt: 只回答“甲”“乙”或“丙”：甲说“乙说的是真话”；乙说“丙说的是假话”；丙说“甲说的是假话”。如果恰好一人说真话，说真话的人是谁？

Output: 丙丙


Answer: A

Prompt: 只回答一个字母：综合分 = 通过率百分数 - 成本乘以 10。模型 A 通过率 92%、成本 0.20；模型 B 通过率 88%、成本 0.05；模型 C 通过率 90%、成本 0.10。综合分最高的是哪个模型？

Output: A


Answer: 463

Prompt: 只回答最终三位数：一个三位数的百位为 a、十位为 b、个位为 c。已知 a+b+c=13，a=c+1，b=2c。这个三位数是多少？

Output: **463**


assert solution.solve('a,"b,c",d') == ['a', 'b,c', 'd']

assert solution.solve('"a""b",,x') == ['a"b', '', 'x']

assert solution.solve('  a ," b " ') == ['  a ', ' b  ']

Prompt: 只输出 Python 代码，不要解释。实现 solve(line: str) -> list[str]，解析一行简化 CSV：逗号分隔；字段可以用双引号包裹；引号内逗号保留；引号内两个连续双引号表示一个双引号；空字段保留；空格是普通字符，不要自动 trim。

Output:
```python
def solve(line: str) -> list[str]:
    result = []
    field = []
    in_quotes = False
    i = 0
    n = len(line)
    while i < n:
        c = line[i]
        if in_quotes:
            if c == '"':
                if i + 1 < n and line[i + 1] == '"':
                    field.append('"')
                    i += 2
                else:
                    in_quotes = False
                    i += 1
            else:
                field.append(c)
                i += 1
        else:
            if c == '"' and len(field) == 0:
                in_quotes = True
                i += 1
            elif c == ',':
                result.append(''.join(field))
                field = []
                i += 1
            else:
                field.append(c)
                i += 1
    result.append(''.join(field))
    return result
```


Prompt: 只输出 Python 代码，不要解释。实现 solve(intervals: list[tuple[int, int]]) -> list[tuple[int, int]]。intervals 是整数闭区间，先按起点排序；重叠或端点相邻的区间要合并，例如 [1,2] 和 [3,4] 合并为 [1,4]。

Output:
```python
def solve(intervals: list[tuple[int, int]]) -> list[tuple[int, int]]:
    if not intervals:
        return []
    intervals = sorted(intervals, key=lambda x: x[0])
    merged = [intervals[0]]
    for start, end in intervals[1:]:
        last_start, last_end = merged[-1]
        if start <= last_end + 1:
            merged[-1] = (last_start, max(last_end, end))
        else:
            merged.append((start, end))
    return merged
```


events=[('a',1),('a',2),('a',3),('a',4),('a',8)]
assert solution.solve(events, 5, 2) == [True, True, False, False, True]

Prompt: 只输出 Python 代码，不要解释。实现 solve(events: list[tuple[str, int]], window: int, limit: int) -> list[bool]，模拟按用户限流。events 按时间非降序排列。某用户在当前事件时间 ts 的窗口 (ts-window, ts] 内，已放行事件数少于 limit 才放行；被拒绝的事件不计入窗口。

Output:
```python
from collections import defaultdict, deque

def solve(events: list[tuple[str, int]], window: int, limit: int) -> list[bool]:
    user_events = defaultdict(deque)
    result = []
    for user, ts in events:
        while user_events[user] and user_events[user][0] <= ts - window:
            user_events[user].popleft()
        if len(user_events[user]) < limit:
            user_events[user].append(ts)
            result.append(True)
        else:
            result.append(False)
    return result
```


assert solution.solve('/a//b/./c/../') == '/a/b'

assert solution.solve('/../../x') == '/x'

Prompt: 只输出 Python 代码，不要解释。实现 solve(path: str) -> str，规范化绝对 Unix 路径：处理重复斜杠、.、..；.. 在根目录时仍留在根目录；返回结果必须以 / 开头且除根目录外不能以 / 结尾。不要使用 os.path。

Output:
def solve(path: str) -> str:
    parts = path.split('/')
    stack = []
    for part in parts:
        if part == '' or part == '.':
            continue
        elif part == '..':
            if stack:
                stack.pop()
        else:
            stack.append(part)
    return '/' + '/'.join(stack) if stack else '/'


assert solution.solve(['eat','tea','tan','ate','nat','bat']) == [['eat','tea','ate'], ['tan','nat'], ['bat']]

Prompt: 只输出 Python 代码，不要解释。实现 solve(words: list[str]) -> list[list[str]]，按变位词分组。大小写敏感；组内保持输入顺序；组的顺序按该组第一个单词在输入中出现的位置。

Output:
```python
from collections import defaultdict

def solve(words: list[str]) -> list[list[str]]:
    groups: dict[tuple, list[str]] = {}
    for word in words:
        key = tuple(sorted(word))
        if key not in groups:
            groups[key] = []
        groups[key].append(word)
    return list(groups.values())
``````python
from collections import defaultdict

def solve(words: list[str]) -> list[list[str]]:
    groups: dict[tuple, list[str]] = {}
    for word in words:
        key = tuple(sorted(word))
        if key not in groups:
            groups[key] = []
        groups[key].append(word)
    return list(groups.values())
```


text='---\ntitle: Test\ntags: [ai, bench,  v0]\ndraft: false\n---\nbody'
assert solution.solve(text) == {'title':'Test','tags':['ai','bench','v0'],'draft':'false'}

assert solution.solve('hello\n---\na: b') == {}

assert solution.solve('---\na: 1') == {}

Prompt: 只输出 Python 代码，不要解释。实现 solve(text: str) -> dict，解析 Markdown front matter。只有第一行正好是 --- 时才解析，直到下一行 --- 结束；每行 key: value，key 和 value 两侧 trim；形如 [a, b] 的 value 返回字符串列表；其他 value 返回字符串。没有完整 front matter 返回 {}。

Output:
```python
def solve(text: str) -> dict:
    lines = text.split('\n')
    if not lines or lines[0] != '---':
        return {}

    result = {}
    for line in lines[1:]:
        if line == '---':
            break
        if ':' not in line:
            continue
        key, _, value = line.partition(':')
        key = key.strip()
        value = value.strip()
        if value.startswith('[') and value.endswith(']'):
            inner = value[1:-1]
            if inner.strip() == '':
                result[key] = []
            else:
                result[key] = [item.strip() for item in inner.split(',')]
        else:
            result[key] = value
    else:
        return {}

    return result
```


assert solution.solve(['a'], 5) == ['a']

Prompt: 只输出 Python 代码，不要解释。实现 solve(items: list[str], k: int) -> list[str]，返回出现次数最高的前 k 个元素；次数相同按第一次出现的先后排序；k 大于不同元素数量时返回全部。

Output:
```python
def solve(items: list[str], k: int) -> list[str]:
    from collections import Counter

    if not items:
        return []

    freq = Counter(items)
    first_idx = {}
    for i, item in enumerate(items):
        if item not in first_idx:
            first_idx[item] = i

    sorted_items = sorted(first_idx.keys(), key=lambda x: (-freq[x], first_idx[x]))
    return sorted_items[:k]
```


base={'db':{'host':'old','port':5432},'feature':{'x':1}}
overrides={'db.host':'new','feature.x':None,'api.timeout':30}
res=solution.solve(base, overrides)
assert res == {'db':{'host':'new','port':5432},'feature':{},'api':{'timeout':30}}
assert base == {'db':{'host':'old','port':5432},'feature':{'x':1}}

Prompt: 只输出 Python 代码，不要解释。实现 solve(config: dict, overrides: dict[str, object]) -> dict。overrides 的 key 是点号路径；值为 None 表示删除该路径的叶子 key；其他值写入路径，必要时创建中间 dict；不能修改输入 config。

Output:
```python
def solve(config: dict, overrides: dict[str, object]) -> dict:
    import copy
    result = copy.deepcopy(config)

    for key_path, value in overrides.items():
        parts = key_path.split('.')

        if value is None:
            current = result
            for part in parts[:-1]:
                if not isinstance(current, dict) or part not in current:
                    current = None
                    break
                current = current[part]
            if isinstance(current, dict) and parts[-1] in current:
                del current[parts[-1]]
        else:
            current = result
            for part in parts[:-1]:
                if part not in current or not isinstance(current[part], dict):
                    current[part] = {}
                current = current[part]
            current[parts[-1]] = value

    return result
```


assert solution.solve('a=1&b=two+words&a=3') == {'a':['1','3'], 'b':['two words']}

assert solution.solve('empty=&flag&x=a%2Bb') == {'empty':[''], 'flag':[''], 'x':['a+b']}

Prompt: 只输出 Python 代码，不要解释。实现 solve(query: str) -> dict[str, list[str]]，解析 URL query string。& 分隔参数；没有 = 的参数值为空字符串；+ 表示空格；%XX 需要按 UTF-8 百分号解码；同名 key 保留所有值的列表。可以使用标准库。

Output:
```python
from urllib.parse import unquote

def solve(query: str) -> dict[str, list[str]]:
    result: dict[str, list[str]] = {}
    for pair in query.split('&'):
        if not pair:
            continue
        key, _, value = pair.partition('=')
        key = unquote(key.replace('+', ' '))
        value = unquote(value.replace('+', ' '))
        result.setdefault(key, []).append(value)
    return result
```


Prompt:
只输出 Python 代码，不要解释。实现 solve(html: str) -> bool，校验简化 HTML 标签是否配对。标签形如 、、
，标签名只含小写字母；自闭合标签不入栈；普通文本忽略。

Output:
```python
def solve(html: str) -> bool:
    stack = []
    i = 0
    n = len(html)
    while i < n:
        if html[i] == '<':
            j = html.find('>', i)
            if j == -1:
                return False
            content = html[i+1:j]
            if content.startswith('/'):
                name = content[1:]
                if not stack or stack[-1] != name:
                    return False
                stack.pop()
            elif content.endswith('/'):
                pass
            else:
                stack.append(content)
            i = j + 1
        else:
            i += 1
    return len(stack) == 0
```


assert solution.solve(['S#','##','E.']) == -1

Prompt: 只输出 Python 代码，不要解释。实现 solve(grid: list[str]) -> int。grid 中 S 是起点，E 是终点，# 是墙，. 可走。每步上下左右移动一格，返回从 S 到 E 的最短步数；不可达返回 -1。

Output:
```python
from collections import deque

def solve(grid: list[str]) -> int:
    if not grid:
        return -1
    rows, cols = len(grid), len(grid[0])
    start = end = None
    for i in range(rows):
        row = grid[i]
        for j, ch in enumerate(row):
            if ch == 'S':
                start = (i, j)
            elif ch == 'E':
                end = (i, j)
    if start is None or end is None:
        return -1
    if start == end:
        return 0
    visited = [[False] * cols for _ in range(rows)]
    q = deque([(start[0], start[1], 0)])
    visited[start[0]][start[1]] = True
    directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
    while q:
        x, y, d = q.popleft()
        for dx, dy in directions:
            nx, ny = x + dx, y + dy
            if 0 <= nx < rows and 0 <= ny < cols and not visited[nx][ny] and grid[nx][ny] != '#':
                if (nx, ny) == end:
                    return d + 1
                visited[nx][ny] = True
                q.append((nx, ny, d + 1))
    return -1
```


Prompt: 只输出 Python 代码，不要解释。实现 solve(nums: list[int], k: int) -> list[float]，返回每个长度为 k 的滑动窗口中位数。k 为奇数时返回中间值；k 为偶数时返回两个中间值平均数。

Traceback (most recent call last):
  File "/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-39lnz5hx/test_solution.py", line 3, in <module>
    assert solution.solve([1,3,-1,-3,5,3,6,7], 3) == [1, -1, -1, 3, 5, 6]
           ^^^^^^^^^^^^^^
AttributeError: module 'solution' has no attribute 'solve'


Prompt: 只输出 Python 代码，不要解释。实现 solve(versions: list[str]) -> list[str]，按简化语义版本排序。版本为 major.minor.patch 或 major.minor.patch-label；major/minor/patch 按数字比较；同一数字版本下，带 label 的预发布版本低于正式版本；label 按字典序比较。

Output:
```python
def solve(versions: list[str]) -> list[str]:
    def key(v):
        if '-' in v:
            num_part, label = v.split('-', 1)
            has_label = 0
        else:
            num_part = v
            label = ''
            has_label = 1
        major, minor, patch = map(int, num_part.split('.'))
        return (major, minor, patch, has_label, label)

    return sorted(versions, key=key)
```


deps={'app':['lib','ui'],'ui':['core'],'lib':['core'],'core':[],'docs':[]}
assert solution.solve(deps, ['core']) == ['app','core','lib','ui']

Prompt: 只输出 Python 代码，不要解释。实现 solve(deps: dict[str, list[str]], changed: list[str]) -> list[str]。deps 表示 package -> 直接依赖。返回所有 changed 包，以及直接或间接依赖 changed 包的包，按字典序排序；只出现在依赖列表中的包也要能作为 changed 包返回。

Output:
```python
def solve(deps: dict[str, list[str]], changed: list[str]) -> list[str]:
    reverse_deps = {}
    for pkg, dep_list in deps.items():
        for d in dep_list:
            reverse_deps.setdefault(d, []).append(pkg)

    result = set()
    stack = list(changed)
    while stack:
        pkg = stack.pop()
        if pkg in result:
            continue
        result.add(pkg)
        for dependent in reverse_deps.get(pkg, []):
            if dependent not in result:
                stack.append(dependent)

    return sorted(result)
```


不跑 不要立刻 先不跑 不应立刻 不应该立刻 不应立即 不应该立即 不应立刻跑 不应该立刻跑 不应立即跑 不应该立即跑

Prompt:
只根据资料回答。

资料 A：早期草案说 v0.3 只新增 20 道题。
资料 B：2026-06-16 的确认方案是 v0.3-challenge100，在现有 50 题基础上新增 50 道题。
资料 C：新增题应先生成审题 HTML，确认后再跑模型，不要立即消耗 API。

问题：下一步应该新增多少题？是否应该立刻跑模型？

Output:
**下一步应新增 50 道题**（以 2026-06-16 确认方案 v0.3-challenge100 为准，资料 A 的早期草案 20 题已被资料 B 覆盖）。

**不应立刻跑模型**。应先按资料 C 的流程，生成审题 HTML，经确认后再调用模型跑题，避免直接消耗 API。


没有包含 没有提供 资料没有 未包含

Prompt:
只根据资料回答，不要自行补充。

资料：报告展示 pass_rate、avg_latency_ms、total_cost、reasoning_tokens、失败样例和逐题明细。资料没有包含用户满意度调查，也没有包含模型训练数据来源。

问题：能否根据这份报告判断用户满意度？

Output: 不能。该报告未包含用户满意度调查数据，无法据此判断用户满意度。


Prompt:
只根据资料回答。

资料：模型 A 通过 48/50，平均延迟 20 秒，成本 0.20 美元，没有超时失败。模型 B 通过 44/50，平均延迟 4 秒，成本 0.05 美元，没有超时失败。模型 C 通过 46/50，平均延迟 9 秒，成本 0.04 美元，但有 3 次 API 超时。

问题：如果要选低延迟且稳定的生产摘要模型，资料更支持选择哪个？

Output:
# 分析：低延迟且稳定的生产摘要模型选择

## 逐步对比

| 指标 | 模型 A | 模型 B | 模型 C |
|------|--------|--------|--------|
| 通过率 | **48/50** | 44/50 | 46/50 |
| 平均延迟 | 20 秒 | **4 秒** | 9 秒 |
| 成本 | $0.20 | $0.05 | $0.04 |
| 超时失败 | 无 | 无 | **有 3 次** |

## 结论：**资料更支持选择模型 B**

理由：

1. **延迟方面**：B 的 4 秒远优于 A 的 20 秒（快 5 倍），也优于 C 的 9 秒。
2. **稳定性方面**：C 因有 3 次 API 超时，直接不符合"稳定"要求被排除。
3. **A vs B 的取舍**：A 通过率仅比 B 高 4 个百分点（48 vs 44），但延迟代价巨大（20s vs 4s）；且 B 通过率 88% 仍处于可用水平，同时无超时失败，**综合更契合"低延迟且稳定"的双重诉求**。


不扣分 不会 不会因长度 不会因此被扣分 不会直接导致扣分 不会导致扣分 不会导致失败或扣分

Prompt:
只根据资料回答。

资料：DracoBench 当前 scoring policy 中，text_rules 的 max_chars/min_chars 只作为诊断信息记录，length_scored 为 false。缺少 required、required_any 或出现 forbidden 才会导致失败。

问题：如果答案超过 max_chars，但 required 都满足且没有 forbidden，会因为长度直接扣分吗？

Output:
不会。

根据资料，max_chars/min_chars 仅作为诊断信息记录，length_scored 为 false，因此超出 max_chars 不会直接导致扣分或失败。只有以下情况才会失败：

- 缺少 required
- 缺少 required_any
- 出现 forbidden

只要这三项都满足，即使长度超过 max_chars，也不会因此被扣分。


45/50 更合适
原始结果为准

Prompt:
只根据资料回答。

资料 A：某模型原始结果为 45/50。
资料 B：修正一个同义表达评分规则后，rescored 结果为 46/50。
资料 C：总览 index 使用 rescored JSONL 作为展示结果。

问题：写文章引用总览结果时，应写 45/50 还是 46/50？

Output:
应写 **46/50**。

**理由：** 资料 C 明确规定总览 index 使用的是 rescored 后的 JSONL 作为展示结果，而 rescored 结果为 46/50（资料 B）。因此，引用总览结果时需与 index 实际展示的数据保持一致，即 46/50；45/50 只是修正前的原始结果（资料 A），不是当前总览的展示数据。


Prompt:
只根据资料回答。

资料：为了复现一次 benchmark，记录中包含 model、case_id、prompt_hash、parameters、scorer details、output、latency_ms 和 usage。记录不包含 chain of thought，也不包含训练数据。

问题：复现评测主要应该依赖哪些记录字段？

Output:
根据资料，复现评测主要应依赖以下字段：

**核心输入字段（复现必需）：**
- **model**：确定使用的模型
- **case_id**：定位具体测试用例
- **prompt_hash**：标识所用的 prompt（但需注意：仅有 hash 无法还原 prompt 原文，严格复现仍需 prompt 本身）
- **parameters**：保证推理参数（如 temperature、top_p 等）一致
- **scorer details**：保证评分逻辑一致

**非复现字段（仅作结果记录）：**
- **output**：是复现要得到的结果，不是输入
- **latency_ms**、**usage**：性能/资源指标，不影响复现结果

**关键提示**：资料中只记录了 `prompt_hash` 而非 prompt 原文，这构成复现的缺口——hash 只能校验一致性，不能用于重建输入。若要真正可复现，应额外保存 prompt 原文（或可由 hash 反查的 prompt 存储）。


Prompt:
只根据资料回答。

资料 A：早期 ability mode 使用 4096 max_tokens。
资料 B：后来为了公平，ability mode 统一放宽到 16384 max_tokens。
资料 C：当前总览页只展示 v0.2-challenge50 且 ability16384 的结果。

问题：当前总览页对应的 token limit 是多少？

Output:
当前总览页对应的 token limit 是 **16384**。

根据资料 B，为了公平起见，ability mode 已统一放宽到 16384 max_tokens；资料 C 也确认当前总览页只展示 ability16384 的结果。


rag-006 规则 评分规则 同义表达

Prompt:
只根据资料回答。

资料：coding-004 的失败是代码运行时 ValueError，根因是把字符串 key 强转 int。rag-006 的失败曾经是规则没有把 int 类型视作“整数”的同义表达，后来通过人工复查修正规则。

问题：哪类失败更需要人工复查评分规则？回答时也说明 coding-004 是否属于这种情况。

Output:
根据资料，**rag-006 这类失败**更需要人工复查评分规则。

**理由：**
rag-006 的失败根因是评分规则本身存在覆盖不足——规则没有将编程语言中的 `int` 类型识别为自然语言中"整数"的同义表达，这属于**规则定义不完善**的问题，必须依靠人工复查评分规则、补充同义映射才能修正。

**coding-004 不属于这种情况。**
coding-004 的失败是代码运行时的 `ValueError`，根因是代码逻辑错误（把字符串 key 强转 int），属于**代码实现缺陷**，而非评分规则的问题。因此它不需要通过人工复查规则来修复，而应通过修正代码逻辑解决。


Prompt:
只根据资料回答。

资料：usage 字段包含 prompt_tokens、completion_tokens、reasoning_tokens 和 cost。报告没有供应商真实利润率，也没有供应商内部成本。

问题：能否从 usage 字段判断供应商利润率？

Output:
**不能。**

根据资料，usage 字段仅包含 prompt_tokens、completion_tokens、reasoning_tokens 和 cost（用户支付的费用）。这些信息只能反映**对外计费情况**，而供应商利润率需要知道其**内部成本**（如算力、带宽、研发等成本），资料明确指出"没有供应商真实利润率，也没有供应商内部成本"。

因此，仅凭 usage 字段无法判断供应商利润率。


不应该 不展示 未展示 不显示 均不显示 不应展示

Prompt:
只根据资料回答。

资料：当前 index 页只显示最后这版 50 道题的 v0.2-challenge50 结果，并且 token limit 都统一为 ability16384。之前的版本和 ability4096 结果不显示在 index 页。

问题：index 页是否应该展示旧版本结果？当前展示范围是什么？

Output:
**根据资料：**

1. **当前展示范围**：index 页**只**展示 v0.-challenge50 这版 50 道题的结果，token limit 统一为 ability16384。

2. **不展示的内容**：旧版本结果以及 ability4096 的结果**均不**显示在 index 页。

3. **关于"是否应该展示旧版本"**：资料中**未给出明确判断或建议**，仅描述了当前的展示规则（只显示最新版 ability16384 的结果）。因此，仅依据该资料无法得出"应该"或"不应该"展示旧版本的结论，只能确认**当前实际未展示**旧版本及 ability4096 结果。


Prompt:
只根据资料回答。

资料：某 coding 题中，模型响应的 finish_reason 为 length，output 为空，测试报错为 module has no attribute solve。报告认为这不是算法逻辑错误，而是输出被截断后没有形成可执行函数。

问题：这次失败应如何归因？

Output:
## 失败归因

**应归因为：输出截断（Output Truncation），而非模型能力或算法错误。**

### 判断依据

| 线索 | 说明 |
|------|------|
| `finish_reason: length` | 模型在生成过程中触发了 token 上限，被强制截断 |
| `output 为空` | 截断发生得过早，连函数定义都没写完 |
| `module has no attribute solve` | 这是**结果性报错**，不是原因——`solve` 函数根本未生成 |

### 归因要点

- **不是算法错误**：模型还没来得及写代码就停了，无法判断其解题逻辑是否正确。
- **不是测试框架问题**：测试代码本身正常，是被测对象缺失。
- **根因是工程/基础设施层面**：最大输出长度不足，模型未能完成完整函数的书写。

### 建议处置

1. 提高该题的最大输出 token 限制后重跑。
2. 若重跑后仍能完成，说明原失败纯粹由截断导致，应从失败统计中剔除或单独标记为 `infra_truncation`。
3. 仅在增大 token 后仍出现逻辑错误时，才归因为模型能力问题。


Prompt:
下面代码期望 funcs[0]()、funcs[1]()、funcs[2]() 分别返回 0、1、2，但实际都会返回 2。请指出根因，并给出最小修复。最后单独一行写 FIX: <修复后的 append 行>。

```python
funcs = []
for i in range(3):
    funcs.append(lambda: i)
```

Output:
**根因**：闭包按**晚绑定**（late binding）规则捕获变量 `i`，而不是绑定循环的当前值。当这些 lambda 实际执行时（调用 `funcs[k]()` 时），循环早已结束，`i` 的最终值是 `2`，所以所有函数都返回 `2`。

**最小修复**：在 lambda 的参数列表中加一个默认参数，把 `i` 的当前值"冻结"住。

```python
funcs = []
for i in range(3):
    funcs.append(lambda i=i: i)
```

FIX: `funcs.append(lambda i=i: i)`


Prompt:
下面 context manager 期望异常继续向外抛出，但实际异常被吞掉。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 return 行>。

```python
class Span:
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc, tb):
        return True
```

Output:
## Bug 分析

`__exit__` 返回 `True`（或非 None、非 falsy 的真值）时，Python 上下文管理器协议会**抑制（吞掉）** `with` 块内抛出的异常，不再向外传播。

```python
def __exit__(self, exc_type, exc, tb):
    return True   # ← 这会吞掉异常
```

要让异常按原样向上抛出，`__exit__` 必须返回 `None` / `False`（或直接 `return`，隐式为 `None`），表示"我不处理这个异常，请继续传播"。

## 最小修复

```python
class Span:
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc, tb):
        return
```

这样：
- 若 `with` 块内无异常：正常离开。
- 若 `with` 块内抛出异常：异常不会被吞掉，会原样向上抛出，行为符合"期望异常继续向外抛出"。

补充说明：很多人会想"那为什么 `__exit__` 会有返回值？"——这正是 `contextlib.suppress` 之类的工具所依赖的机制：返回真值 = 显式声明"该异常我已处理，请吞掉"。一旦没有这个意图，就必须返回 falsy。

FIX: return


Prompt:
下面代码期望每个 Bag 实例都有独立列表，但不同实例会共享 items。请指出 bug，并给出最小修复。最后单独一行写 FIX: <新增到 __init__ 中的赋值行>。

```python
class Bag:
    items = []
    def add(self, x):
        self.items.append(x)
```

Output:
**Bug 分析**：`items = []` 是定义在类体中的可变对象，属于**类属性**，被所有实例共享。因此 `Bag().add(1)` 和 `Bag().add(2)` 后，`Bag().items` 会是 `[1, 2]`，而不是各自的独立列表。

**最小修复**：在 `__init__` 中为每个实例创建独立的 `items` 列表。

```python
class Bag:
    def __init__(self):
        self.items = []
    def add(self, x):
        self.items.append(x)
```

FIX: self.items = []


Prompt:
下面代码期望每次不传 ts 时使用当前时间，但默认时间只会在函数定义时计算一次。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的函数定义行>。

```python
from datetime import datetime

def mark(ts=datetime.utcnow()):
    return ts.isoformat()
```

Output:
**Bug 分析**

Python 的默认参数只在函数定义时求值一次，之后所有调用都会复用同一个对象。因此 `datetime.utcnow()` 只在模块加载时执行一次，后续所有不传 `ts` 的调用都会得到同一个时间戳，而不是"当前时间"。

**最小修复**

```python
from datetime import datetime

def mark(ts=None):
    if ts is None:
        ts = datetime.utcnow()
    return ts.isoformat()
```

把可变/动态的默认值换成哨兵 `None`，在函数体内按需计算。

FIX: def mark(ts=None):


Prompt:
下面代码期望返回小写字符串，但实际返回的是方法对象。请指出 bug，并给出最小修复。最后单独一行写 FIX: <修复后的 return 行>。

```python
def normalize(s):
    return s.strip().lower
```

Output:
bug：`.lower` 是方法引用（bound method 对象），没有加括号调用，所以返回的是方法本身而不是调用结果。

最小修复：给 `.lower` 加上括号使其真正执行。

```python
def normalize(s):
    return s.strip().lower()
```

FIX: `    return s.strip().lower()`


Prompt: 只输出 JSON 对象，不要 Markdown。字段 version 必须是 "v0.3"；字段 ready 必须是 true；字段 cases 必须是正好两个对象组成的数组。cases 中每个对象只能包含 id、weight、active 三个字段；id 是字符串且匹配 case-1 或 case-2；weight 是整数；active 是布尔值。

Output: {"version":"v0.3","ready":true,"cases":[{"id":"case-1","weight":1,"active":true},{"id":"case-2","weight":1,"active":true}]}


推理题 边界条件 人工复查

Prompt: 写一段不超过 160 个汉字的公众号小结，主题是“为什么 v0.3 要扩到 100 题”。必须包含“推理题”“边界条件”“人工复查”，不能出现“排行榜”。

Output: v0.3 把题库扩到 100 题，不是凑数，而是为了让评测更稳。**推理题**覆盖更全，模型在多步逻辑、归纳演绎上的表现才能拉开差距；**边界条件**更细，能暴露模型在极端输入下的鲁棒性问题；同时加大样本量后，**人工复查**可以抽样核验错误模式，保证结果可信。这一版我们宁可在题量上多花功夫，也要把评测基线打扎实。