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:
    config = {}
    current_section = None
    for line in lines:
        stripped = line.strip()
        if not stripped or stripped.startswith('#'):
            continue
        if stripped.startswith('[') and stripped.endswith(']'):
            section_name = stripped[1:-1].strip()
            current_section = section_name
            if section_name not in config:
                config[section_name] = {}
            continue
        key, value = stripped.split('=', 1)
        config[current_section][key.strip()] = value.strip()
    return config
```


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:
    transactions = {}
    cancelled = set()
    for event in events:
        parts = event.split()
        if parts[0] == 'rev':
            target_id = parts[1]
            if target_id in transactions and target_id not in cancelled:
                cancelled.add(target_id)
        else:
            tx_id = parts[0]
            if tx_id in transactions:
                continue
            tx_type = parts[1]
            amount = int(parts[2])
            transactions[tx_id] = amount if tx_type == 'credit' else -amount
    total = 0
    for tx_id, delta in transactions.items():
        if tx_id not in cancelled:
            total += delta
    return total
```


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]]:
    nodes = set()
    for task, prereqs in deps.items():
        nodes.add(task)
        for p in prereqs:
            nodes.add(p)

    in_degree = {n: 0 for n in nodes}
    adj = {n: [] for n in nodes}

    for task, prereqs in deps.items():
        for p in set(prereqs):
            adj[p].append(task)
            in_degree[task] += 1

    res = []
    while True:
        current_layer = [n for n in nodes if in_degree[n] == 0]
        if not current_layer:
            break
        current_layer.sort()
        res.append(current_layer)
        for u in current_layer:
            in_degree[u] = -1
            for v in adj[u]:
                in_degree[v] -= 1

    if sum(len(layer) for layer in res) != len(nodes):
        return []
    return res
```


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]:
    res = []
    if capacity <= 0:
        for op in ops:
            parts = op.split()
            if parts[0] == 'get':
                res.append(-1)
        return res
    cache = OrderedDict()
    for op in ops:
        parts = op.split()
        if parts[0] == 'get':
            key = int(parts[1])
            if key not in cache:
                res.append(-1)
            else:
                cache.move_to_end(key)
                res.append(cache[key])
        elif parts[0] == 'put':
            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
    return res
```

Traceback (most recent call last):
  File "/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-4wmtsl7u/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-4wmtsl7u/solution.py", line 22, 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 时递归合并；其他值覆盖。不能修改输入对象。

Traceback (most recent call last):
  File "/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-wjtmhlr7/test_solution.py", line 5, in <module>
    assert solution.solve(base, patch) == {'a': 1, 'b': {'x': 1, 'z': 4}}
           ^^^^^^^^^^^^^^
AttributeError: module 'solution' has no attribute 'solve'


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:
    unit_map = {
        'd': 86400000,
        'h': 3600000,
        'm': 60000,
        's': 1000,
        'ms': 1
    }
    total = 0
    for num_str, unit in re.findall(r'(\d+)\s*(ms|[dhms])', text):
        total += int(num_str) * unit_map[unit]
    return total
```


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，检查括号 ()[]{} 是否配对。单引号或双引号内部的括号忽略；反斜杠会转义引号。输入字符串可以包含普通字符。

Traceback (most recent call last):
  File "/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-lu3xh3fg/test_solution.py", line 3, in <module>
    assert solution.solve('{a:[(1)]}') is True
           ^^^^^^^^^^^^^^
AttributeError: module 'solution' has no attribute 'solve'


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: list[dict]) -> list[dict]:
    best = {}
    for row in rows:
        user = row['user']
        if user not in best or row['ts'] >= best[user]['ts']:
            best[user] = row
    return sorted(best.values(), key=lambda x: x['user'])
```


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

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

Output:
### 根因
1.  核心问题是多余的`iter()`包装将列表转为了**单遍迭代器**：迭代器是有内部状态的一次性可迭代对象，`sum()`遍历会持续推进迭代器指针直到耗尽所有元素，计算完total后迭代器已无剩余元素，再次读取自然得到空结果。
2.  叠加Python默认参数的特性：默认参数在函数定义阶段仅求值一次，所有无参调用共享同一个默认对象，首次调用耗尽迭代器后，后续调用会持续复用这个已耗尽的迭代器，进一步导致跨调用返回空结果。
### 最小修复
移除默认值外层多余的`iter()`包装，直接使用列表`[1, 2, 3]`作为默认参数。列表是可重复迭代的序列容器，遍历时会生成临时迭代器访问元素，不会修改原列表本身的状态，既解决了同一次调用中sum后读取为空的问题，也避免了迭代器复用导致的跨调用异常。
FIX: def summarize(items=[1, 2, 3]):


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` 在为不存在的用户键生成默认值时，始终返回**全局唯一的 `shared` 字典对象的引用**，导致所有用户在 `counts` 中映射到的是同一个字典实例，共享内部的 `seen` 列表。任意用户追加事件时，实际修改的是所有用户共用的全局 `seen` 列表，因此不同用户的计数会互相干扰。
### 最小修复
让默认工厂在每次遇到新用户时，创建独立的全新字典实例（包含专属的空 `seen` 列表），而非返回全局共享的 `shared` 对象。

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 分析
Python 中 `range` 的结束边界是**开区间**（迭代值不会包含边界本身），原代码错误将 range 的上界设为 `len(items) - page_size`，导致最后一个合法的分页起始索引被排除在迭代范围外：不仅会漏掉末尾不足 `page_size` 的尾页，当 items 总长度恰好是 `page_size` 的整数倍时，甚至会漏掉最后一个满额页。
Python 切片天然支持结束索引超出序列长度时自动截断到序列末尾，无需手动调整上界做尾页适配。

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


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

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

Output:
### Bug 说明
Python 内置的 `sorted()` 对字符串元素默认按**字典序**（逐字符比较 Unicode 码点）排序，原代码没有指定数值维度的排序规则，因此数字字符串不会按实际数值大小排序（例如`"10"`会因首字符`'1' < '2'`排在`"2"`前面）。
### 最小修复
仅需为`sorted()`传入`key=int`参数，指定排序时将每个元素转换为整数作为比较依据，无需改动其他逻辑。

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__`，完全没有将调用时传入的位置参数`args`、关键字参数`kwargs`纳入键的计算逻辑，导致同一个函数无论传入什么参数，都映射到同一个缓存条目：第一次调用的结果会被后续所有不同参数的调用直接返回，造成不同参数调用的结果混淆。
（注：未对关键字参数排序会导致相同键值对但传入顺序不同的kwargs生成不同键，仅影响缓存命中率不影响正确性，属于键生成的细节优化；同名函数缓存冲突是原有全局cache设计的次要问题，不属于题目描述的「不同参数调用混在一起」的核心bug。）

### 最小修复
保留原有函数名作为函数标识，将位置参数、按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()` 修改列表结构时，本质是操作二者共享的原列表对象，导致原列表被同步修改，完全没有实现“浅拷贝后独立追加”的预期。
浅拷贝仅要求外层容器是独立新对象、内部元素复用原引用即可，这种场景下对新列表的追加操作只会修改新列表自身结构，不会影响原列表，符合需求。
### 最小修复
无需额外导入模块，使用列表切片语法即可创建原列表的浅拷贝，改动最小、兼容性强，创建的新列表和原列表结构独立，追加操作不会影响原列表。

FIX: copied = items[:]


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

```python
import json

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

Output:
### Bug 说明
`json.loads()` 的作用是把**JSON格式的字符串/字节/字节数组**反序列化为Python对象（如dict），它不接受dict类型作为入参。当前代码没有对入参类型做判断，当传入的`payload`已经是dict时，调用`json.loads(payload)`会抛出`TypeError: the JSON object must be str, bytes or bytearray, not dict`，导致报错。

### 最小修复思路
仅修改`data`的赋值逻辑：如果入参已经是dict就直接使用，否则再走`json.loads`反序列化，不改动其余代码逻辑。

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 的`try/finally`控制流语义规定：当`try`块执行到`return`时，会先暂存待返回值，再强制执行`finally`块逻辑；如果`finally`块中存在显式`return`语句，会直接丢弃`try`中暂存的返回值，将`finally`的返回值作为函数最终结果（还会吞掉`try`中未处理的异常）。本代码在`finally`中写了`return None`，直接覆盖了`try`块暂存的返回值42，因此始终返回None。
### 最小修复
移除`finally`块中会覆盖返回值的`return None`语句；由于Python语法要求`finally`后必须跟非空代码块，若无实际清理操作，将该行替换为`pass`占位即可（若有清理逻辑则编写无return的清理代码），此时执行完`finally`后会正常返回`try`中的42。

FIX: 将finally块中的`return None`替换为`pass`（或无return的清理逻辑），移除finally内的return语句避免覆盖try块返回值

人工复核通过：模型明确指出 finally 中的 return None 会覆盖 try 的返回值，并给出将其替换为 pass/无 return 清理逻辑的最小修复；原 contains_any scorer 未覆盖该等价表达。


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: 现有给定资料未说明DracoBench v0.2未将LLM-as-judge作为默认判分方式的原因，仅明确提及两项相关规则：一是该版本不会默认使用LLM-as-judge；二是开放中文写作题只做少量规则校验和人工抽检。


Beta 成本 延迟 判断

Alpha 更适合
多模态更强

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

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

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

Output:
1. 资料更支持选择模型Beta：模型Beta成本为0.02美元，低于模型Alpha的0.08美元，符合低成本要求；同时模型Beta平均延迟为3秒，短于模型Alpha的9秒，更适配高吞吐的服务需求。
2. 两者的多模态表现无法判断，因为资料没有给出两个模型在多模态任务上的表现相关信息。


空输出 输出为空 未输出

Prompt:
只根据资料回答。

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

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

Output:
更公平的文字结论需完整披露全部客观评测信息，不片面截取单一原始结果，不添加无依据的主观推断，可描述为：
本次hard set共50题，K模型原始作答正确47题；原始失分的3题中，2题后续被认定为题面存在歧义，模型在这2题的单独复测中均作答通过；剩余1题的失分原因为模型reasoning tokens用尽产生空输出。

人工复核通过：模型完整描述 hard set 原始 47/50、2 题题面存在歧义且单独复测通过、1 题 reasoning tokens 用尽空输出；原 text_rules 只匹配“题面歧义”字面短语，未覆盖“题面存在歧义”。


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

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

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

Output: 不能。根据资料，报告不包含供应商真实利润率，因此无法从报告判断供应商利润率。


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

Output: {"status":"review","scores":{"coding":85,"debugging":82,"rag":88},"note":"能力表现较为均衡"}


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:
def solve(events: list[dict]) -> dict[str, int]:
    stock = {}
    for event in events:
        user = event["user"]
        op_type = event["type"]
        amount = int(event["amount"])
        if user not in stock:
            stock[user] = 0
        if op_type == "add":
            stock[user] += amount
        elif op_type == "remove":
            stock[user] -= amount
    return {k: v for k, v in sorted(stock.items()) if v != 0}


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

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

Output:
```python
def solve(expr: str) -> int:
    res = 0
    num = 0
    sign = 1
    stack = [1]
    for c in expr:
        if c.isdigit():
            num = num * 10 + int(c)
        elif c in '+-':
            res += sign * num
            num = 0
            sign = stack[-1] * (1 if c == '+' else -1)
        elif c == '(':
            stack.append(sign)
        elif c == ')':
            res += sign * num
            num = 0
            stack.pop()
    res += sign * num
    return res
```


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

Output:
```python
def solve(rows: list[str]) -> list[tuple[str, int]]:
    score_map = {}
    for line in rows:
        parts = line.split()
        if not parts:
            continue
        score = int(parts[-1])
        name = ' '.join(parts[:-1])
        if name not in score_map or score > score_map[name]:
            score_map[name] = score
    return sorted(score_map.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)
    i = j = 0
    star = -1
    match = 0
    while j < n:
        if i < m and (pattern[i] == text[j] or pattern[i] == '?'):
            i += 1
            j += 1
        elif i < m and pattern[i] == '*':
            star = i
            match = j
            i += 1
        elif star != -1:
            i = star + 1
            match += 1
            j = match
        else:
            return False
    while i < m and pattern[i] == '*':
        i += 1
    return i == m
```


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

Output:
```python
def solve(tree: dict) -> list[str]:
    res = []
    def dfs(node, path_parts):
        for key, value in node.items():
            new_parts = path_parts + [str(key)]
            if isinstance(value, dict):
                dfs(value, new_parts)
            else:
                res.append(f"{'.'.join(new_parts)}={value}")
    dfs(tree, [])
    return sorted(res)
```


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，可以全为负数。

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


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

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

Output:
### Bug 说明
代码按逗号分割字符串后，仅对每个分段做了首尾空白去除，但没有过滤掉经`strip()`处理后为空字符串的分段。这类空分段来源于三种场景：字符串以逗号开头/结尾时`split`产生的首尾空串、连续逗号之间无内容产生的中间空串、逗号之间仅含空白字符经`strip()`后变为空串，最终导致结果中保留了不符合预期的空字段。
### 最小修复
仅需在原有列表推导式中增加过滤条件，保留`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']`的原始字符串值作为排序键，按字符串字典序逐字符比较大小，而非按UTC时间戳对应的数值大小（即实际时间先后）比较。对于字符串形式的数值型UTC时间戳，当字符串长度不一致时（如2001年9月前的秒级时间戳为9位，之后为10位），字典序与数值序不匹配（例如字符串比较下`"999999999" > "1700000000"`，但数值上后者对应时间更晚），最终导致排序结果不符合时间先后预期。
### 最小修复
将排序键从原始字符串转换为整数（时间戳常规存储形式），通过数值大小比较实现正确的时间先后排序。

FIX: rows.sort(key=lambda r: int(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中`or`是短路逻辑运算符，左操作数为布尔假值时会直接返回右操作数。`0`是合法的limit输入，但属于布尔假值，因此显式传入`limit=0`时，`0 or 10`会错误返回默认值10，该逻辑无法区分「未传参（limit为默认值None）」和「传入有效假值0」的场景。
### 最小修复思路
放弃真值判断，显式检查参数是否为默认哨兵值`None`，仅当未传入参数（limit为None）时使用默认值10，其余所有显式传入的值（包括0）均保留用户输入。

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)` 执行的是**浅拷贝**：仅创建了新的顶层字典，顶层存储的嵌套可变对象（比如这里的 `db` 子字典）仍然是原配置中同一个对象的引用，副本和原配置共享所有内层嵌套结构。因此修改 `copied['db']['host']` 时，实际改动的是双方共享的子字典，导致原配置被意外篡改。
### 修复说明
使用标准库 `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()`传入了做筛选的生成器，未指定无匹配时的兜底返回值：当不存在名称匹配的用户时，生成器无元素可产出，会把底层迭代异常直接暴露给上层调用，不符合查找函数的预期行为（无匹配时应返回未找到标识，而非抛出迭代相关异常）。
最小修复利用`next()`原生的默认值能力，指定无匹配时返回`None`（Python惯例的无结果标识）；由于`next()`此时需要传入两个参数，作为第一个参数的生成器表达式需要包裹括号避免语法错误，无需额外异常捕获，改动量最小。

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`的调用会共享同一个列表实例：
1.  跨请求状态污染：不同请求的日志会持续追加到共享列表中，出现历史日志残留，默认调用时无法得到仅包含当前请求ID的独立日志；
2.  违背设计预期：函数本应支持调用者传入自定义日志列表、按请求调用顺序追加记录，而隐式共享的默认列表会让无参调用的日志意外混在一起，破坏日志隔离性。

### 最小修复
将默认参数替换为不可变哨兵值`None`，在函数体内判断：若未传入`logs`参数（即`logs is None`），则初始化一个新的空列表，既保留传入外部列表时按顺序追加日志的能力，也避免可变默认值的共享问题。

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: 120


Prompt:
只根据资料回答。

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

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

Output:
1. 讨论“模型真实能力”应优先引用ability mode，根据资料给出的报告建议，ability mode的定位就是用于能力判断。
2. 讨论“低预算可用性”应优先引用efficiency mode，根据资料给出的报告建议，efficiency mode的定位是用于成本相关判断，该模式下成本仅0.04美元，成本更低，契合低预算的评估维度。


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

Prompt:
只根据资料回答。

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

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

Output: 这次失败的根因是模型擅自补类型假设：模型擅自对key的类型做出了整型的假设，输出了`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:
现有资料未表明DracoBench的HTML报告已支持图表功能。
依据：资料明确说明，DracoBench的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": [
    "输出内容需严格遵守相关法律法规及公序良俗要求",
    "需严格按照指定格式输出内容，不得额外添加无关信息"
  ]
}

输出内容需严格遵守相关法律法规及公序良俗要求 需严格按照指定格式输出内容，不得额外添加无关信息


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

Output:
| 模式 | 用途 | 风险 |
| --- | --- | --- |
| ability mode | 释放模型全量能力上限，适配复杂逻辑推理、多步任务规划、高精度专业内容生成、高难度问题求解等对输出质量要求严苛的场景，通过全链路深度推理保障结果的准确性、完整性与创造性 | 算力资源消耗量大，响应延迟较高，高并发场景下易出现服务排队拥堵，部分场景可能因过度关联推理产生冗余信息、内容发散偏离核心需求的问题 |
| efficiency mode | 优先保障推理响应速度与资源利用效率，适配简单事实问答、实时交互反馈、批量低复杂度文本处理、高频轻量请求等对时延敏感的场景，通过轻量化推理链路压缩计算开销、缩短返回时长 | 复杂任务场景下推理精度明显下降，易出现事实错误、逻辑断层、内容细节缺失的问题，对多轮深度推理、专业级创作等高要求任务的支撑能力不足 |


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

Output: 本期小结：我们坚持同步展示原题、模型输出与错误解释，既完整呈现模型作答的全逻辑链路，也把错漏根源拆解透亮，所有内容可复查、可对照，帮你清晰摸透模型能力边界，不被片面截取的信息误导，看得明白、学得扎实。


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: 可满足


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: 5


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: 8


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",,x') == ['a"b', '', 'x']

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

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

Traceback (most recent call last):
  File "/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-_v5kirzd/test_solution.py", line 3, in <module>
    assert solution.solve('a,"b,c",d') == ['a', 'b,c', 'd']
           ^^^^^^^^^^^^^^
AttributeError: module 'solution' has no attribute 'solve'


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 []
    sorted_intervals = sorted(intervals, key=lambda x: x[0])
    merged = [sorted_intervals[0]]
    for curr_s, curr_e in sorted_intervals[1:]:
        last_s, last_e = merged[-1]
        if curr_s <= last_e + 1:
            merged[-1] = (last_s, max(last_e, curr_e))
        else:
            merged.append((curr_s, curr_e))
    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 deque

def solve(events: list[tuple[str, int]], window: int, limit: int) -> list[bool]:
    user_records = {}
    result = []
    for user_id, ts in events:
        if user_id not in user_records:
            user_records[user_id] = deque()
        dq = user_records[user_id]
        threshold = ts - window
        while dq and dq[0] <= threshold:
            dq.popleft()
        if len(dq) < limit:
            dq.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:
```python
def solve(path: str) -> str:
    stack = []
    for part in path.split('/'):
        if part == '' or part == '.':
            continue
        elif part == '..':
            if stack:
                stack.pop()
        else:
            stack.append(part)
    return '/' if not stack else '/' + '/'.join(stack)
```


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
def solve(words: list[str]) -> list[list[str]]:
    groups = {}
    result = []
    for word in words:
        key = ''.join(sorted(word))
        if key not in groups:
            groups[key] = []
            result.append(groups[key])
        groups[key].append(word)
    return result
```


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.splitlines()
    if not lines or lines[0] != '---':
        return {}

    end_idx = None
    for i in range(1, len(lines)):
        if lines[i] == '---':
            end_idx = i
            break
    if end_idx is None:
        return {}

    result = {}
    for line in lines[1:end_idx]:
        if ':' not in line:
            continue
        key_part, value_part = line.split(':', 1)
        key = key_part.strip()
        value_str = value_part.strip()

        if value_str.startswith('[') and value_str.endswith(']'):
            inner = value_str[1:-1].strip()
            value = [item.strip() for item in inner.split(',')] if inner else []
        else:
            value = value_str

        result[key] = value
    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]:
    counts = {}
    first_occur = {}
    for idx, item in enumerate(items):
        if item not in counts:
            counts[item] = 0
            first_occur[item] = idx
        counts[item] += 1
    sorted_unique = sorted(counts.keys(), key=lambda x: (-counts[x], first_occur[x]))
    return sorted_unique[: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
import copy

def solve(config: dict, overrides: dict[str, object]) -> dict:
    result = copy.deepcopy(config)
    for dot_path, value in overrides.items():
        parts = dot_path.split('.')
        if value is None:
            current = result
            valid = True
            for part in parts[:-1]:
                if not isinstance(current, dict) or part not in current:
                    valid = False
                    break
                current = current[part]
            if valid and 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_plus

def solve(query: str) -> dict[str, list[str]]:
    result = {}
    if not query:
        return result
    for part in query.split('&'):
        kv_parts = part.split('=', 1)
        key_raw = kv_parts[0]
        value_raw = kv_parts[1] if len(kv_parts) == 2 else ''
        key = unquote_plus(key_raw, encoding='utf-8')
        value = unquote_plus(value_raw, encoding='utf-8')
        if key not in result:
            result[key] = []
        result[key].append(value)
    return result
```


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

Output:
```python
import re

def solve(html: str) -> bool:
    stack = []
    tags = re.findall(r'<[^>]+>', html)
    for tag in tags:
        if tag.endswith('/>'):
            continue
        if tag.startswith('</'):
            if not stack:
                return False
            current_name = tag[2:-1]
            if stack.pop() != current_name:
                return False
        else:
            stack.append(tag[1:-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:
    rows = len(grid)
    if rows == 0:
        return -1
    cols = len(grid[0])
    start = None
    for i in range(rows):
        for j in range(cols):
            if grid[i][j] == 'S':
                start = (i, j)
                break
        if start:
            break
    if not start:
        return -1
    dirs = [(-1, 0), (1, 0), (0, -1), (0, 1)]
    q = deque([(start[0], start[1], 0)])
    visited = [[False] * cols for _ in range(rows)]
    visited[start[0]][start[1]] = True
    while q:
        x, y, dist = q.popleft()
        for dx, dy in dirs:
            nx, ny = x + dx, y + dy
            if 0 <= nx < rows and 0 <= ny < cols:
                if grid[nx][ny] == 'E':
                    return dist + 1
                if grid[nx][ny] == '.' and not visited[nx][ny]:
                    visited[nx][ny] = True
                    q.append((nx, ny, dist + 1))
    return -1
```


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

Output:
```python
import bisect

def solve(nums: list[int], k: int) -> list[float]:
    if not nums or k <= 0 or len(nums) < k:
        return []
    window = sorted(nums[:k])
    res = []
    mid = k // 2
    if k % 2 == 1:
        res.append(float(window[mid]))
    else:
        res.append((window[mid - 1] + window[mid]) / 2.0)
    for i in range(k, len(nums)):
        left_val = nums[i - k]
        del_idx = bisect.bisect_left(window, left_val)
        window.pop(del_idx)
        bisect.insort(window, nums[i])
        if k % 2 == 1:
            res.append(float(window[mid]))
        else:
            res.append((window[mid - 1] + window[mid]) / 2.0)
    return res
```


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 version_key(v: str) -> tuple:
        core_part, *label_parts = v.split("-", 1)
        major, minor, patch = map(int, core_part.split("."))
        if label_parts:
            return (major, minor, patch, 0, label_parts[0])
        return (major, minor, patch, 1, "")
    return sorted(versions, key=version_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
from collections import defaultdict, deque
def solve(deps: dict[str, list[str]], changed: list[str]) -> list[str]:
    reverse_deps = defaultdict(list)
    for pkg, dependencies in deps.items():
        for dep in dependencies:
            reverse_deps[dep].append(pkg)
    visited = set(changed)
    queue = deque(changed)
    while queue:
        current = queue.popleft()
        for dependent in reverse_deps.get(current, []):
            if dependent not in visited:
                visited.add(dependent)
                queue.append(dependent)
    return sorted(visited)
```


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

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方案，需在现有50题基础上新增50道题，早期草案提及的新增20道题为早期未最终确定的内容。
不应该立刻跑模型：新增题应先生成审题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:
资料更支持选择模型B，原因如下：
1.  稳定性维度：模型A、B均无超时失败，模型C存在3次API超时，属于服务调用层面的稳定性故障，首先排除C。
2.  低延迟维度：模型B平均延迟仅4秒，远低于模型C的9秒、模型A的20秒，是三个模型中延迟最低的，且无超时问题，服务运行稳定，符合低延迟且稳定的选型要求。


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

Prompt:
只根据资料回答。

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

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

Output: 不会。根据资料，DracoBench当前scoring policy中，text_rules的max_chars/min_chars只作为诊断信息记录，length_scored为false，仅缺少required、required_any或出现forbidden才会导致失败，因此该情形不会因为长度直接扣分。


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

Prompt:
只根据资料回答。

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

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

Output:
应写46/50。
根据资料说明，总览index使用rescored JSONL作为展示结果，而修正评分规则后的rescored结果为46/50，因此引用总览结果时应使用46/50。


Prompt:
只根据资料回答。

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

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

Output:
复现评测主要依赖记录中为复现benchmark留存的以下字段：model、case_id、prompt_hash、parameters、scorer details、output、latency_ms、usage。
记录中不包含的chain of thought（思维链）、训练数据不属于可依赖的复现记录字段。

人工复核通过：模型列出了 model、case_id/prompt_hash、parameters、scorer details、output、latency_ms、usage 等复现字段，并明确说明 chain of thought 和训练数据不属于可依赖字段；原 forbidden 规则没有处理否定语境。


Prompt:
只根据资料回答。

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

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

Output: 当前总览页对应的token limit是16384 max_tokens，依据是当前总览页只展示ability16384的结果，而该设置下ability mode的max_tokens为16384。


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

Prompt:
只根据资料回答。

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

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

Output:
由评分规则本身不完善（如规则未将int类型视作“整数”的同义表达）引发的失败更需要人工复查评分规则，rag-006就属于这类需要人工复查修正规则的情况。
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 判断供应商利润率，并说明缺少真实利润率和内部成本；原 required_any 只接受“不包含/没有”的字面表达，未覆盖“不具备/无法据此判断”的等价表达。


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

Prompt:
只根据资料回答。

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

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

Output:
根据资料明确的显示规则：
1. index页不展示旧版本结果，之前的版本结果不在index页的显示范围内。
2. 当前index页的展示范围为：仅显示最后这版50道题的v0.2-challenge50结果，所展示结果的token limit统一为ability16384；之前的版本结果、ability4096结果均不显示在index页。


Prompt:
只根据资料回答。

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

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

Output: 这次失败不属于算法逻辑错误，归因如下：模型响应的finish_reason为length，即输出因长度限制被截断，最终输出为空，没能形成可执行的solve函数，进而触发了"module has no attribute solve"的测试报错。


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:
### 根因
Python闭包采用**晚绑定（延迟绑定）**机制：lambda表达式中引用的自由变量`i`不会在函数定义时捕获循环迭代的瞬时值，而是在函数实际调用时才向外层作用域查找`i`的当前值。循环结束后外层作用域的`i`已固定为终值2，因此三个lambda调用时均获取到i=2，不符合预期。
### 最小修复逻辑
利用Python函数默认参数在**函数定义时立即求值**的特性，将每次循环的`i`瞬时值作为默认参数绑定到对应lambda上，让每个函数实例独立持有定义时刻的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 说明
Python 上下文管理器协议规定：`__exit__` 方法返回**真值（truthy）**时，解释器会判定 with 块抛出的异常已被处理，会抑制异常向外传播；只有返回**假值（falsy，如`False`/`None`）**时，异常才会正常向外抛出。当前实现固定返回`True`，会吞掉 with 块内所有异常，不符合异常继续抛出的预期。
### 最小修复
仅需将返回值从`True`改为`False`即可：无异常场景下`__exit__`的返回值会被解释器忽略，无副作用；有异常时返回假值，异常会正常向外传播。

FIX: return False


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

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

Output:
### Bug 说明
原代码中`items`是定义在类作用域的**类属性**，归属于`Bag`类本身，会被所有`Bag`实例共享。当通过`self.items`访问列表时，若实例自身没有同名属性，就会直接引用这个类级别的共享列表，导致所有实例调用`add`方法时都修改同一个列表对象，不同实例的items互相干扰，无法实现每个实例持有独立列表的预期。
### 最小修复
为`Bag`添加`__init__`实例构造方法，在每次创建实例时，为当前实例绑定专属的独立空列表作为实例属性`items`，实例属性会优先于同名类属性被访问，从而实现实例间items隔离。（可删除类层面冗余的`items = []`以清理无用代码，不影响功能正确性）
FIX: self.items = []


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

```python
from datetime import datetime

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

Output:
### Bug 说明
Python 函数默认参数采用**定义时求值**机制：默认参数值会在函数定义（通常是模块加载阶段）时仅计算一次，之后绑定到函数对象的`__defaults__`属性中，后续调用若不传对应参数会直接复用这个提前计算好的固定值，不会在每次调用时重新求值。
本代码中`ts=datetime.utcnow()`仅会在`mark`函数定义时执行一次，得到一个固定的时间对象，后续所有不传`ts`的调用都会永久复用这个定义时刻的时间，完全无法实现“不传参时使用调用时刻当前时间”的预期。

### 最小修复
使用`None`作为默认参数的哨兵值，在函数内部增加判断：当`ts`为`None`（即调用方未传参）时，实时调用`datetime.utcnow()`获取当前UTC时间，原有返回逻辑保持不变即可。

FIX: def mark(ts=None):


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

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

Output:
### Bug 说明
`lower` 是 Python 字符串的内置实例方法，代码中仅引用了该方法对象本身，没有添加`()`执行方法调用，因此最终返回的是绑定方法对象，而非调用方法后得到的小写字符串结果。

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":2,"active":false}]}


推理题 边界条件 人工复查

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

Output: 本周更新的v0.3版本，我们把题库扩容到了100题：新增了大量考察完整逻辑链路的推理题，补齐了容易让模型“翻车”的各类边界条件场景，所有题目都经过多轮交叉人工复查校准，只为更精准锚定模型真实能力，减少单题偏差，给大家更靠谱的实测参考。