DracoBench Report: tencent/hy3-preview

tencent/hy3-preview
Pass rate
85.0%
Cases
85/100
Avg latency
19290 ms
Total time
32m 10s
Total cost
$0.048706
Prompt tokens
9930
Completion tokens
180894
Reasoning tokens
142453
Errors
0

By Suite

SuiteCasesPassedPass rateAvg latencyCost
chinese_writing44100.0%9891 ms$0.001167
coding282175.0%27420 ms$0.016859
debugging191578.9%17378 ms$0.007722
instruction_following66100.0%11175 ms$0.001711
rag_long_context181688.9%8911 ms$0.005308
reasoning252392.0%22562 ms$0.015940

Failure Examples

challenge-coding-004

Suite: coding
Finish: stop
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。
Standard Answer / Scoring Expectation
Reference tests:
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]
Mistake Analysis
Failure type: runtime_type_assumption
题目里的 cache key 是字符串,例如 `a`、`b`、`c`,但模型把 key 强行写成 `int(parts[1])`。测试一遇到 `put a 1` 就在解析 `a` 时抛出 ValueError。根因是模型擅自补了“key 是整数”的类型假设。
Scorer Details
{
  "returncode": 1,
  "stdout": "",
  "stderr": "Traceback (most recent call last):\n  File \"/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-jj4u8zsh/test_solution.py\", line 4, in <module>\n    assert solution.solve(2, ops) == [1, -1, 1, 3]\n           ^^^^^^^^^^^^^^^^^^^^^^\n  File \"/private/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-jj4u8zsh/solution.py\", line 23, in solve\n    key = int(parts[1])\n          ^^^^^^^^^^^^^\nValueError: invalid literal for int() with base 10: 'a'\n"
}
Output
```python
from collections import OrderedDict

def solve(capacity: int, ops: list[str]) -> list[int]:
    results = []
    if capacity == 0:
        for op in ops:
            parts = op.split()
            if parts[0] == 'get':
                results.append(-1)
        return results
    
    cache = OrderedDict()
    for op in ops:
        parts = op.split()
        if parts[0] == 'get':
            key = int(parts[1])
            if key in cache:
                cache.move_to_end(key)
                results.append(cache[key])
            else:
                results.append(-1)
        else:
            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 results
```

challenge-debugging-001

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

```python
def summarize(items=iter([1, 2, 3])):
    return sum(items)
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*def\s+summarize\(items=None\)\s*:
Mistake Analysis
Failure type: regex_miss
模型正确指出默认参数里的 iterator 会在第一次调用后被耗尽,但最后的 `FIX:` 行写成了 `def summarize(items=[1, 2, 3])`。当前 benchmark 期望的最小修复是把函数头改成 `def summarize(items=None):`,再在函数体内创建默认列表/迭代器。根因是模型修复了症状,但最终修复行没有采用标准的 None sentinel 写法,也引入了不推荐的可变默认参数形式。
Scorer Details
{
  "pattern": "FIX:\\s*`?\\s*def\\s+summarize\\(items=None\\)\\s*:"
}
Output
根因:默认参数 `items=iter([1, 2, 3])` 是一个迭代器对象,它在函数定义时创建,并在第一次调用时被消耗。后续调用中,同一个迭代器已经耗尽,因此 `sum(items)` 返回 0。

最小修复:将默认参数改为可重复迭代的列表 `[1, 2, 3]`,这样每次调用都能重新迭代。

FIX: def summarize(items=[1, 2, 3])

challenge-debugging-003

Suite: debugging
Finish: stop
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
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*for\s+start\s+in\s+range\(0,\s*len\(items\),\s*page_size\)\s*:
Mistake Analysis
Failure type: regex_miss
模型已经定位到 `range` 的 stop 参数应从 `len(items) - page_size` 改为 `len(items)`,核心 bug 判断正确。但题目要求最后单独输出“修复后的 range 行”,当前 regex 期望完整代码行 `for start in range(0, len(items), page_size):`;模型只写了 `FIX: range(0, len(items), page_size)`,缺少 `for start in` 和结尾冒号,因此被判为 regex miss。根因是最终 FIX 行格式不完整,而不是分页逻辑没看懂。
Scorer Details
{
  "pattern": "FIX:\\s*`?\\s*for\\s+start\\s+in\\s+range\\(0,\\s*len\\(items\\),\\s*page_size\\)\\s*:"
}
Output
原代码中的 `range(0, len(items) - page_size, page_size)` 错误地使用了 `len(items) - page_size` 作为停止参数,这会导致循环跳过最后可能不足一页的元素。具体来说,当 `len(items)` 不是 `page_size` 的整数倍时,剩余元素被遗漏;即使 `len(items)` 是 `page_size` 的整数倍,最后一页也会被排除(因为停止参数不包含最后一页的起始索引)。修复方法是将停止参数改为 `len(items)`,这样 `range` 会生成所有有效的起始索引,而切片操作能自动处理末尾不足一页的情况。

FIX: range(0, len(items), page_size)

challenge-debugging-005

Suite: debugging
Finish: stop
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
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*key\s*=\s*\(fn\.__name__,\s*args,\s*(?:tuple\(sorted\(kwargs\.items\(\)\)\)|frozenset\(kwargs\.items\(\)\))\)\s*`?
Mistake Analysis
Failure type: regex_miss
模型正确知道缓存 key 必须包含调用参数,也把 kwargs 排序后放进 key 里;失败点在最终 key 形式。当前标准答案期望 `key = (fn.__name__, args, tuple(sorted(kwargs.items())))` 或等价 frozenset 写法,模型输出的是 `key = (fn, args, tuple(sorted(kwargs.items())))`。用函数对象 `fn` 在很多场景下也能区分函数,但没有命中本题的固定 regex。根因更偏评分模式未覆盖这个等价实现,而不是模型完全没修好缓存参数混淆。
Scorer Details
{
  "pattern": "FIX:\\s*`?\\s*key\\s*=\\s*\\(fn\\.__name__,\\s*args,\\s*(?:tuple\\(sorted\\(kwargs\\.items\\(\\)\\)\\)|frozenset\\(kwargs\\.items\\(\\)\\))\\)\\s*`?"
}
Output
原装饰器的 bug 在于:使用 `fn.__name__` 作为缓存键,导致所有针对同一函数的调用(无论参数是否相同)都共享同一个缓存结果,从而将不同参数的调用混在一起。

最小修复方案是修改键的生成逻辑,使其包含函数标识和调用参数,确保不同参数(包括关键字参数)对应不同的缓存键。具体做法是:将键设为包含函数对象、位置参数和关键字参数(排序后转为元组)的元组。这样既区分了不同函数,又区分了不同参数。

修复后的 `key` 赋值行如下:

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

challenge-debugging-008

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

```python
def read_value():
    try:
        return 42
    finally:
        return None
```
Standard Answer / Scoring Expectation
Accepted answers:
- 删除 finally 中的 return None
- 去掉 finally 的 return None
- 不要在 finally 里 return None
- remove return None
- 去掉 finally 中的 return None
- 删除或替换 finally 中的 return None
- 去掉 finally 中的 `return None`
- 删除或替换 finally 中的 `return None`
- 删除 finally 块中的 `return None`
- 删除 finally 块中的 return None
- 删除 finally 中的 `return None`
- 删除 `finally` 块中的 `return None`
- 删除 `finally` 中的 `return None`
- 删除 `finally: return None`
- 将 `finally:` 中的 `return None` 删除
- finally 中的 return None 删除
- finally: 中的 return None 删除
- 删除 finally 块中的 'return None'
- 删除 finally 子句中的 `return None`
- 删除 finally 子句中的 return None
- delete the line `return None` inside the finally block
- delete the line return None inside the finally block
- finally 块不应包含 return 语句
- finally 块不应包含 return
- finally 不应包含 return
Mistake Analysis
Failure type: missing_accepted_answer
模型正确指出 `finally` 里的 `return None` 会覆盖 `try` 中的 `return 42`,修复方向也是删除这个 return。失败点在最后的 `FIX:` 行只写了 `删除 return None`,没有明确说“删除 finally 中的 return None”。当前 contains_any scorer 只接受包含 finally 位置的固定表达;模型正文里虽解释了 finally,但最终短答案没有命中可接受短语。根因是最终修复说明过短/评分短语覆盖不足,而不是调试判断错误。
Scorer Details
{
  "matched": []
}
Output
在Python 中,当 `try` 块和 `finally` 块同时存在 `return` 语句时,`finally` 块中的 `return` 会覆盖 `try` 块中的返回值。因此,函数 `read_value()` 总是返回 `None` 而不是预期的 42。

最小修复方法是移除 `finally` 块中的 `return None` 语句,这样 `try` 块中的返回值 42 就能正常返回。如果 `finally` 块需要执行清理操作,应确保其不包含任何 `return` 语句。

FIX: 删除 `return None`

challenge-rag-001

Suite: rag_long_context
Finish: stop
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 作为默认判分?
Standard Answer / Scoring Expectation
Required phrases: 人工抽检
At least one from each group: 默认使用 / 默认判分 / 默认采用 / 作为默认判分
Forbidden phrases: 因为成本太高、因为不支持中文
Length guidance (diagnostic only): min=n/a, max=160
Mistake Analysis
Failure type: missing_required_info
问题问的是“为什么 v0.2 不把 LLM-as-judge 作为默认判分”。资料 B 给出的关键依据是:开放中文写作题只做少量规则校验和人工抽检。模型回答 `现有提供的资料中未提及v0.2没有将LLM-as-judge作为默认判分的原因。` 只是复述“不会默认使用”或说资料未说明,没有说出替代判分方式里的“人工抽检”,因此缺少真正解释原因的证据链。
Scorer Details
{
  "missing": [
    "人工抽检"
  ],
  "missing_any": [],
  "present_forbidden": [],
  "char_count": 40,
  "length_ok": true,
  "length_scored": false
}
Output
现有提供的资料中未提及v0.2没有将LLM-as-judge作为默认判分的原因。

challenge-coding-012

Suite: coding
Finish: None
Prompt
只输出 Python 代码,不要解释。实现 solve(pattern: str, text: str) -> bool。pattern 支持 ? 匹配任意单字符,* 匹配任意长度字符串。必须匹配完整 text。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve('a*b?d', 'axxxbc d'.replace(' ','')) is True
assert solution.solve('a*c', 'ab') is False
assert solution.solve('*', '') is True
assert solution.solve('file-??.txt', 'file-ab.txt') is True
Mistake Analysis
Failure type: empty_output
模型正常结束但没有输出任何可评分正文,形成空输出。评分器无法命中答案或关键字段,因此失败。根因是答案生成阶段没有产出内容,而不是评分规则过严。
Scorer Details
{
  "returncode": 1,
  "stdout": "",
  "stderr": "Traceback (most recent call last):\n  File \"/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-43ksbsn1/test_solution.py\", line 3, in <module>\n    assert solution.solve('a*b?d', 'axxxbc d'.replace(' ','')) is True\n           ^^^^^^^^^^^^^^\nAttributeError: module 'solution' has no attribute 'solve'\n"
}
Output

challenge-reasoning-006

Suite: reasoning
Finish: None
Prompt
只回答最终数字:一个队列从左到右是 A,B,C,D,E。依次执行:把第 2 个移到末尾;删除第 3 个;在最前面插入 X;把最后两个反转。最终队列中 C 的位置是第几位?
Standard Answer / Scoring Expectation
Answer: 3
Mistake Analysis
Failure type: empty_output
模型正常结束但没有输出任何可评分正文,形成空输出。评分器无法命中答案或关键字段,因此失败。根因是答案生成阶段没有产出内容,而不是评分规则过严。
Scorer Details
{
  "expected": "3",
  "actual": ""
}
Output

challenge-rag-006

Suite: rag_long_context
Finish: stop
Prompt
只根据资料回答。

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

问题:这次失败的根因是什么?
Standard Answer / Scoring Expectation
Required phrases: key
At least one from each group: 字符串 / 类型不匹配;整数 / int;类型假设 / 假设 key 为整数 / 假设 key 是整数 / key 为整数类型
Length guidance (diagnostic only): min=n/a, max=120
Mistake Analysis
Failure type: missing_required_info
模型回答没有覆盖评分规则要求的完整证据链。每组至少一个依据表达:整数 / int。这通常表示答案方向可能对,但没有把资料依据说清楚。
Scorer Details
{
  "missing": [],
  "missing_any": [
    [
      "整数",
      "int"
    ]
  ],
  "present_forbidden": [],
  "char_count": 60,
  "length_ok": true,
  "length_scored": false
}
Output
这次失败的根因是模型擅自补充了类型假设,将测试数据中本为字符串类型的key错误按整型处理,该问题并非token截断导致。

challenge-reasoning-020

Suite: reasoning
Finish: length
Prompt
只回答最终数字:栈操作从空栈开始。push n 表示入栈;dup 复制栈顶;add 弹出两个数并压入它们的和;swap 交换栈顶两个数;sub 先弹出 x 再弹出 y,并压入 y-x。依次执行:push 2, push 3, dup, add, push 4, swap, sub。最终栈顶是多少?
Standard Answer / Scoring Expectation
Answer: -2
Mistake Analysis
Failure type: empty_output_length
模型耗尽输出预算后没有留下任何正文,形成空输出。评分器无法找到答案或 `solve` 函数,所以失败。这类问题应归因于输出预算/过度生成,而不是某个具体算法步骤写错。
Scorer Details
{
  "expected": "-2",
  "actual": ""
}
Output

challenge-coding-016

Suite: coding
Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(intervals: list[tuple[int, int]]) -> list[tuple[int, int]]。intervals 是整数闭区间,先按起点排序;重叠或端点相邻的区间要合并,例如 [1,2] 和 [3,4] 合并为 [1,4]。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve([(5,7),(1,2),(3,4),(10,10)]) == [(1,7),(10,10)]
assert solution.solve([(1,1),(3,3)]) == [(1,1),(3,3)]
assert solution.solve([]) == []
Mistake Analysis
Failure type: code_syntax_error
区间合并思路本身接近正确,但生成的 Python 缩进坏了:`if start <= current_end + 1:` 下一行 `current_end = max(current_end, end)` 没有缩进到 if 块内,导入 `solution.py` 时直接抛 IndentationError。根因是代码格式/缩进损坏,不是区间合并条件本身被测试击穿。
Scorer Details
{
  "returncode": 1,
  "stdout": "",
  "stderr": "Traceback (most recent call last):\n  File \"/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-x315v9vv/test_solution.py\", line 1, in <module>\n    import solution\n  File \"/private/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-x315v9vv/solution.py\", line 9\n    current_end = max(current_end, end)\nIndentationError: expected an indented block after 'if' statement on line 8\n"
}
Output
```python
def solve(intervals: list[tuple[int, int]]) -> list[tuple[int, int]]:
    if not intervals:
        return []
    intervals.sort(key=lambda x: x[0])
    merged = []
    current_start, current_end = intervals[0]
    for start, end in intervals[1:]:
        if start <= current_end + 1:
current_end = max(current_end, end)
        else:
            merged.append((current_start, current_end))
            current_start, current_end = start, end
    merged.append((current_start, current_end))
    return merged
```

challenge-coding-021

Suite: coding
Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(items: list[str], k: int) -> list[str],返回出现次数最高的前 k 个元素;次数相同按第一次出现的先后排序;k 大于不同元素数量时返回全部。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve(['b','a','b','c','a','b'], 2) == ['b','a']
assert solution.solve(['x','y','z','y','z','x'], 2) == ['x','y']
assert solution.solve(['a'], 5) == ['a']
Mistake Analysis
Failure type: code_assertion_failure
频次统计方向正确,但“第一次出现位置”的记录方式错了。代码用字典推导 `{item: idx for idx, item in enumerate(items)}`,重复元素会被后面的索引覆盖,实际记录的是最后一次出现位置。第二组里 x、y、z 都出现 2 次,正确 tie-break 应按第一次出现得到 `[x, y]`;模型按最后出现位置排序成 `[y, z]`。根因是 tie-break 状态记录错,应只在元素第一次出现时写入索引。
Scorer Details
{
  "returncode": 1,
  "stdout": "",
  "stderr": "Traceback (most recent call last):\n  File \"/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-nnsbo7j6/test_solution.py\", line 4, in <module>\n    assert solution.solve(['x','y','z','y','z','x'], 2) == ['x','y']\nAssertionError\n"
}
Output
```python
from collections import Counter

def solve(items: list[str], k: int) -> list[str]:
    if not items:
        return []
    
    # 统计频率并记录首次出现顺序
    freq = Counter(items)
    first_occurrence = {item: idx for idx, item in enumerate(items)}
    
    # 排序:先按频率降序,再按首次出现顺序升序
    sorted_items = sorted(
        freq.keys(),
        key=lambda x: (-freq[x], first_occurrence[x])
    )
    
    # 返回前k个或全部
    return sorted_items[:k]
```

challenge-coding-024

Suite: coding
Finish: None
Prompt
只输出 Python 代码,不要解释。实现 solve(html: str) -> bool,校验简化 HTML 标签是否配对。标签形如 <a>、</a>、<br/>,标签名只含小写字母;自闭合标签不入栈;普通文本忽略。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve('<div><br/><p>x</p></div>') is True
assert solution.solve('<a><b></a></b>') is False
assert solution.solve('text<a><b/></a>') is True
Mistake Analysis
Failure type: empty_output
模型正常结束但没有输出任何可评分正文,形成空输出。评分器无法命中答案或关键字段,因此失败。根因是答案生成阶段没有产出内容,而不是评分规则过严。
Scorer Details
{
  "returncode": 1,
  "stdout": "",
  "stderr": "Traceback (most recent call last):\n  File \"/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-bxnkcvq4/test_solution.py\", line 3, in <module>\n    assert solution.solve('<div><br/><p>x</p></div>') is True\n           ^^^^^^^^^^^^^^\nAttributeError: module 'solution' has no attribute 'solve'\n"
}
Output

challenge-coding-026

Suite: coding
Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(nums: list[int], k: int) -> list[float],返回每个长度为 k 的滑动窗口中位数。k 为奇数时返回中间值;k 为偶数时返回两个中间值平均数。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve([1,3,-1,-3,5,3,6,7], 3) == [1, -1, -1, 3, 5, 6]
assert solution.solve([1,2,3,4], 2) == [1.5, 2.5, 3.5]
Mistake Analysis
Failure type: code_execution_failure
双堆思路方向正确,但懒删除实现没有维护两个堆的“有效元素数量”。窗口滑动时旧元素只记在 `to_remove`,堆的物理长度仍参与 `balance()`,导致堆大小和真实窗口分布不同步;后半段窗口的中位数被旧元素/错误堆顶影响,第一组期望 `[1,-1,-1,3,5,6]`,模型给出后几项偏小。
Scorer Details
{
  "returncode": 1,
  "stdout": "",
  "stderr": "Traceback (most recent call last):\n  File \"/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-p_ql0eh9/test_solution.py\", line 3, in <module>\n    assert solution.solve([1,3,-1,-3,5,3,6,7], 3) == [1, -1, -1, 3, 5, 6]\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/private/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-p_ql0eh9/solution.py\", line 38, in solve\n    while len(high) - delay.get(high[0], 0) > size // 2:\n                                ~~~~^^^\nIndexError: list index out of range\n"
}
Output
```python
from heapq import *
from collections import defaultdict

def solve(nums: list[int], k: int) -> list[float]:
    def median(low, high, k):
        if k % 2 == 1:
            return -low[0]
        else:
            return (-low[0] + high[0]) / 2

    low = []   # max-heap (store negative)
    high = []  # min-heap
    delay = defaultdict(int)
    res = []
    size = 0

    for i, num in enumerate(nums):
        # insert
        if not low or num <= -low[0]:
            heappush(low, -num)
        else:
            heappush(high, num)
        size += 1

        # remove out-of-window elements lazily
        if i >= k:
            out = nums[i - k]
            delay[out] += 1
            size -= 1

        # balance heaps
        while len(low) - delay.get(-low[0], 0) > size - (size // 2):
            val = -heappop(low)
            delay[val] -= 1
            if delay[val] == 0:
                del delay[val]
            heappush(high, val)
        while len(high) - delay.get(high[0], 0) > size // 2:
            val = heappop(high)
            delay[val] -= 1
            if delay[val] == 0:
                del delay[val]
            heappush(low, -val)

        # clean delayed elements from heap tops
        while low and delay.get(-low[0], 0) > 0:
            val = -heappop(low)
            delay[val] -= 1
            if delay[val] == 0:
                del delay[val]
        while high and delay.get(high[0], 0) > 0:
            val = heappop(high)
            delay[val] -= 1
            if delay[val] == 0:
                del delay[val]

        # compute median
        if size == k:
            res.append(median(low, high, k))

    return res
```

challenge-coding-027

Suite: coding
Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(versions: list[str]) -> list[str],按简化语义版本排序。版本为 major.minor.patch 或 major.minor.patch-label;major/minor/patch 按数字比较;同一数字版本下,带 label 的预发布版本低于正式版本;label 按字典序比较。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve(['1.0.0','1.0.0-alpha','1.0.1','1.0.0-beta','0.9.9']) == ['0.9.9','1.0.0-alpha','1.0.0-beta','1.0.0','1.0.1']
assert solution.solve(['1.0.10','1.0.2']) == ['1.0.2','1.0.10']
Mistake Analysis
Failure type: code_assertion_failure
版本排序方向写反了。题目要求同一数字版本下预发布版低于正式版,但模型的 key 是 `(numeric, 0 if label is None else 1, label)`,升序排序会把正式版 `1.0.0` 放在 `1.0.0-alpha` 和 `1.0.0-beta` 前面。根因是正式版/预发布版的排序标志位取值反了;应让带 label 的版本排在正式版之前,并为正式版使用可比较的占位 label。
Scorer Details
{
  "returncode": 1,
  "stdout": "",
  "stderr": "Traceback (most recent call last):\n  File \"/var/folders/x_/4cht1kfj1_j31gdv5w01sgmw0000gn/T/dracobench-code-snfjey05/test_solution.py\", line 3, in <module>\n    assert solution.solve(['1.0.0','1.0.0-alpha','1.0.1','1.0.0-beta','0.9.9']) == ['0.9.9','1.0.0-alpha','1.0.0-beta','1.0.0','1.0.1']\nAssertionError\n"
}
Output
```python
def solve(versions: list[str]) -> list[str]:
    def parse_version(v: str):
        parts = v.split('-', 1)
        numeric = tuple(map(int, parts[0].split('.')))
        label = parts[1] if len(parts) > 1 else None
        return (numeric, 0 if label is None else 1, label)
    
    return sorted(versions, key=parse_version)
```

All Questions & Answers

challenge-coding-001 PASS
Suite: coding · Latency: 11672 ms · Cost: $0.000256 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(lines: list[str]) -> dict。lines 是简化 INI:空行和以 # 开头的行忽略;[section] 开始新 section;key=value 写入当前 section;key/value 两侧空白要去掉;同一 section 内重复 key 后者覆盖前者。返回嵌套 dict。
Standard Answer / Scoring Expectation
Reference tests:
lines = ['# comment', '[db]', ' host = localhost ', 'port=5432', '', '[feature]', 'enabled=true', 'enabled = false']
assert solution.solve(lines) == {'db': {'host': 'localhost', 'port': '5432'}, 'feature': {'enabled': 'false'}}
assert solution.solve(['[x]', 'a=1', 'a=2', '[y]', 'b = hi']) == {'x': {'a': '2'}, 'y': {'b': 'hi'}}
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(']'):
            section_name = stripped[1:-1].strip()
            current_section = section_name
            if section_name not in result:
                result[section_name] = {}
        else:
            if '=' in stripped:
                key, value = stripped.split('=', 1)
                key = key.strip()
                value = value.strip()
                if current_section is not None:
                    result[current_section][key] = value
    
    return result
```
challenge-coding-002 PASS
Suite: coding · Latency: 16930 ms · Cost: $0.000433 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(events: list[str]) -> int。事件格式:"<id> credit <amount>" 增加余额,"<id> debit <amount>" 减少余额,"rev <id>" 撤销此前尚未撤销过的同 id 事件。重复交易 id 只保留第一次,未知撤销忽略。返回最终余额。
Standard Answer / Scoring Expectation
Reference tests:
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
Output
```python
def solve(events: list[str]) -> int:
    balance = 0
    transactions = {}  # id -> (type, amount, revoked)
    
    for event in events:
        parts = event.split()
        if parts[0] == "rev":
            # 撤销事件
            tid = parts[1]
            if tid in transactions and not transactions[tid][2]:
                typ, amount, _ = transactions[tid]
                if typ == "credit":
                    balance -= amount
                else:  # debit
                    balance += amount
                transactions[tid] = (typ, amount, True)
        else:
            # 交易事件
            tid, typ, amount_str = parts[0], parts[1], parts[2]
            if tid in transactions:
                continue  # 重复id,忽略
            amount = int(amount_str)
            transactions[tid] = (typ, amount, False)
            if typ == "credit":
                balance += amount
            else:  # debit
                balance -= amount
    
    return balance
```
challenge-coding-003 PASS
Suite: coding · Latency: 26987 ms · Cost: $0.000903 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(deps: dict[str, list[str]]) -> list[list[str]]。deps 表示 task -> prerequisites。返回可并行执行的拓扑层,每层任务按字典序排序;如果存在环,返回空列表。所有只出现在 prerequisites 中的任务也要包含。
Standard Answer / Scoring Expectation
Reference tests:
deps = {'build': ['lint', 'test'], 'test': ['install'], 'lint': ['install']}
assert solution.solve(deps) == [['install'], ['lint', 'test'], ['build']]
assert solution.solve({'a': ['b'], 'b': ['a']}) == []
assert solution.solve({'deploy': ['build'], 'build': []}) == [['build'], ['deploy']]
Output
```python
from collections import deque

def solve(deps: dict[str, list[str]]) -> list[list[str]]:
    # 收集所有任务
    all_tasks = set(deps.keys())
    for prereqs in deps.values():
        all_tasks.update(prereqs)
    
    # 构建邻接表和入度
    adj = {task: [] for task in all_tasks}
    in_degree = {task: 0 for task in all_tasks}
    
    for task, prereqs in deps.items():
        for p in prereqs:
            adj[p].append(task)
            in_degree[task] += 1
    
    # 初始化队列,加入所有入度为0的节点(按字典序)
    queue = sorted([task for task in all_tasks if in_degree[task] == 0])
    result = []
    
    while queue:
        current_layer = queue[:]  # 当前层的所有任务
        result.append(current_layer)
        
        next_candidates = []
        for task in current_layer:
            for neighbor in adj[task]:
                in_degree[neighbor] -= 1
                if in_degree[neighbor] == 0:
                    next_candidates.append(neighbor)
        
        # 为下一层排序
        queue = sorted(next_candidates)
    
    # 检查是否有环(所有任务是否都被处理)
    if len(all_tasks) == sum(len(layer) for layer in result):
        return result
    else:
        return []
```
challenge-coding-004 FAIL
Suite: coding · Latency: 18759 ms · Cost: $0.000608 · Finish: stop
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。
Standard Answer / Scoring Expectation
Reference tests:
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]
Mistake Analysis
Failure type: runtime_type_assumption
题目里的 cache key 是字符串,例如 `a`、`b`、`c`,但模型把 key 强行写成 `int(parts[1])`。测试一遇到 `put a 1` 就在解析 `a` 时抛出 ValueError。根因是模型擅自补了“key 是整数”的类型假设。
Output
```python
from collections import OrderedDict

def solve(capacity: int, ops: list[str]) -> list[int]:
    results = []
    if capacity == 0:
        for op in ops:
            parts = op.split()
            if parts[0] == 'get':
                results.append(-1)
        return results
    
    cache = OrderedDict()
    for op in ops:
        parts = op.split()
        if parts[0] == 'get':
            key = int(parts[1])
            if key in cache:
                cache.move_to_end(key)
                results.append(cache[key])
            else:
                results.append(-1)
        else:
            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 results
```
challenge-coding-005 PASS
Suite: coding · Latency: 64912 ms · Cost: $0.001263 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(base: dict, patch: dict) -> dict,执行 JSON Merge Patch:patch 中值为 None 表示删除该 key;两个值都是 dict 时递归合并;其他值覆盖。不能修改输入对象。
Standard Answer / Scoring Expectation
Reference tests:
base = {'a': 1, 'b': {'x': 1, 'y': 2}, 'c': 3}
patch = {'b': {'y': None, 'z': 4}, 'c': None}
assert solution.solve(base, patch) == {'a': 1, 'b': {'x': 1, 'z': 4}}
assert base == {'a': 1, 'b': {'x': 1, 'y': 2}, 'c': 3}
assert solution.solve({'a': {'b': 1}}, {'a': 5}) == {'a': 5}
Output
```python
def solve(base: dict, patch: dict) -> dict:
    result = {}
    
    # Copy all keys from base
    for key in base:
        result[key] = base[key]
    
    # Apply patch
    for key, value in patch.items():
        if value is None:
            # Delete key if exists
            result.pop(key, None)
        elif isinstance(value, dict) and isinstance(result.get(key), dict):
            # Recursive merge
            result[key] = solve(result[key], value)
        else:
            # Overwrite or add
            result[key] = value
    
    return result
```
challenge-coding-006 PASS
Suite: coding · Latency: 12053 ms · Cost: $0.000327 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(text: str) -> int,把时长字符串转换成毫秒。支持整数单位 d、h、m、s、ms,可有空格,单位可重复,顺序任意。例如 "1h 30m 500ms"。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve('1h 30m 500ms') == 5400500
assert solution.solve('2d 1h 2s') == 176402000
assert solution.solve('100ms 2s 3ms') == 2103
Output
```python
import re

def solve(text: str) -> int:
    units = {
        'd': 86400000,
        'h': 3600000,
        'm': 60000,
        's': 1000,
        'ms': 1
    }
    
    total_ms = 0
    pattern = re.compile(r'(\d+)\s*([a-zA-Z]+)')
    matches = pattern.findall(text)
    
    for value, unit in matches:
        unit = unit.lower()
        if unit in units:
            total_ms += int(value) * units[unit]
    
    return total_ms
```
challenge-coding-007 PASS
Suite: coding · Latency: 30432 ms · Cost: $0.001143 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(s: str) -> bool,检查括号 ()[]{} 是否配对。单引号或双引号内部的括号忽略;反斜杠会转义引号。输入字符串可以包含普通字符。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve('{a:[(1)]}') is True
assert solution.solve("{'x': '(]'}") is True
assert solution.solve("['unterminated]") is False
assert solution.solve('([)]') is False
assert solution.solve("\"paren \\\" ) still quoted\"") is True
Output
```python
def solve(s: str) -> bool:
    stack = []
    in_single_quote = False
    in_double_quote = False
    escaped = False
    
    i = 0
    while i < len(s):
        c = s[i]
        
        if escaped:
            escaped = False
            i += 1
            continue
            
        if c == '\\':
            escaped = True
            i += 1
            continue
            
        if c == "'" and not in_double_quote:
            in_single_quote = not in_single_quote
            i += 1
            continue
            
        if c == '"' and not in_single_quote:
            in_double_quote = not in_double_quote
            i += 1
            continue
            
        if not in_single_quote and not in_double_quote:
            if 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 len(stack) == 0
```
challenge-coding-008 PASS
Suite: coding · Latency: 40275 ms · Cost: $0.000345 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(rows: list[dict]) -> list[dict]。每行有 user、ts、value。对每个 user 保留 ts 最大的一行;若 ts 相同,保留在输入中更靠后的行。输出按 user 字典序排序。
Standard Answer / Scoring Expectation
Reference tests:
rows = [{'user':'b','ts':1,'value':'old'}, {'user':'a','ts':2,'value':'x'}, {'user':'b','ts':3,'value':'new'}]
assert solution.solve(rows) == [{'user':'a','ts':2,'value':'x'}, {'user':'b','ts':3,'value':'new'}]
rows = [{'user':'a','ts':1,'value':'first'}, {'user':'a','ts':1,'value':'second'}]
assert solution.solve(rows) == [{'user':'a','ts':1,'value':'second'}]
Output
```python
def solve(rows: list[dict]) -> list[dict]:
    user_max = {}
    for i, row in enumerate(rows):
        user = row["user"]
        ts = row["ts"]
        if user not in user_max or (ts, i) > (user_max[user][0], user_max[user][1]):
            user_max[user] = (ts, i, row)
    result = [user_max[user][2] for user in sorted(user_max)]
    return result
```
challenge-debugging-001 FAIL
Suite: debugging · Latency: 23462 ms · Cost: $0.000851 · Finish: stop
Prompt
下面代码在 total 之后再次读取数据会变成空列表。请指出根因,并给出最小修复。最后单独一行写 FIX: <修复后的第一行函数定义>。

```python
def summarize(items=iter([1, 2, 3])):
    return sum(items)
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*def\s+summarize\(items=None\)\s*:
Mistake Analysis
Failure type: regex_miss
模型正确指出默认参数里的 iterator 会在第一次调用后被耗尽,但最后的 `FIX:` 行写成了 `def summarize(items=[1, 2, 3])`。当前 benchmark 期望的最小修复是把函数头改成 `def summarize(items=None):`,再在函数体内创建默认列表/迭代器。根因是模型修复了症状,但最终修复行没有采用标准的 None sentinel 写法,也引入了不推荐的可变默认参数形式。
Output
根因:默认参数 `items=iter([1, 2, 3])` 是一个迭代器对象,它在函数定义时创建,并在第一次调用时被消耗。后续调用中,同一个迭代器已经耗尽,因此 `sum(items)` 返回 0。

最小修复:将默认参数改为可重复迭代的列表 `[1, 2, 3]`,这样每次调用都能重新迭代。

FIX: def summarize(items=[1, 2, 3])
challenge-debugging-002 PASS
Suite: debugging · Latency: 6341 ms · Cost: $0.000142 · Finish: stop
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]
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*counts\s*=\s*defaultdict\(lambda\s*:\s*\{'seen'\s*:\s*\[\]\}\)\s*`?
Output
根因:所有用户共享同一个字典 `shared`,因为 `defaultdict` 的默认工厂函数返回的是同一个对象,导致每个用户的 `'seen'` 列表实际上是同一个列表,互相影响。

最小修复:将 `defaultdict` 的默认工厂改为每次返回一个新的字典,使每个用户拥有独立的 `'seen'` 列表。

FIX: counts = defaultdict(lambda: {'seen': []})
challenge-debugging-003 FAIL
Suite: debugging · Latency: 14875 ms · Cost: $0.000404 · Finish: stop
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
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*for\s+start\s+in\s+range\(0,\s*len\(items\),\s*page_size\)\s*:
Mistake Analysis
Failure type: regex_miss
模型已经定位到 `range` 的 stop 参数应从 `len(items) - page_size` 改为 `len(items)`,核心 bug 判断正确。但题目要求最后单独输出“修复后的 range 行”,当前 regex 期望完整代码行 `for start in range(0, len(items), page_size):`;模型只写了 `FIX: range(0, len(items), page_size)`,缺少 `for start in` 和结尾冒号,因此被判为 regex miss。根因是最终 FIX 行格式不完整,而不是分页逻辑没看懂。
Output
原代码中的 `range(0, len(items) - page_size, page_size)` 错误地使用了 `len(items) - page_size` 作为停止参数,这会导致循环跳过最后可能不足一页的元素。具体来说,当 `len(items)` 不是 `page_size` 的整数倍时,剩余元素被遗漏;即使 `len(items)` 是 `page_size` 的整数倍,最后一页也会被排除(因为停止参数不包含最后一页的起始索引)。修复方法是将停止参数改为 `len(items)`,这样 `range` 会生成所有有效的起始索引,而切片操作能自动处理末尾不足一页的情况。

FIX: range(0, len(items), page_size)
challenge-debugging-004 PASS
Suite: debugging · Latency: 7383 ms · Cost: $0.000209 · Finish: stop
Prompt
下面代码期望把数字字符串按数值排序,但结果是字典序。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的 return 行>。

```python
def order(ids):
    return sorted(ids)
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*return\s+sorted\(ids,\s*key\s*=\s*int\)\s*`?
Output
代码中的 `sorted(ids)` 默认按照字符串的字典序进行排序,而不是按照字符串所代表的数值大小排序。这就是 bug 所在。

最小修复方法是在 `sorted` 函数中指定 `key` 参数为 `int`,从而按数值排序。

FIX: return sorted(ids, key=int)
challenge-debugging-005 FAIL
Suite: debugging · Latency: 17203 ms · Cost: $0.000641 · Finish: stop
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
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*key\s*=\s*\(fn\.__name__,\s*args,\s*(?:tuple\(sorted\(kwargs\.items\(\)\)\)|frozenset\(kwargs\.items\(\)\))\)\s*`?
Mistake Analysis
Failure type: regex_miss
模型正确知道缓存 key 必须包含调用参数,也把 kwargs 排序后放进 key 里;失败点在最终 key 形式。当前标准答案期望 `key = (fn.__name__, args, tuple(sorted(kwargs.items())))` 或等价 frozenset 写法,模型输出的是 `key = (fn, args, tuple(sorted(kwargs.items())))`。用函数对象 `fn` 在很多场景下也能区分函数,但没有命中本题的固定 regex。根因更偏评分模式未覆盖这个等价实现,而不是模型完全没修好缓存参数混淆。
Output
原装饰器的 bug 在于:使用 `fn.__name__` 作为缓存键,导致所有针对同一函数的调用(无论参数是否相同)都共享同一个缓存结果,从而将不同参数的调用混在一起。

最小修复方案是修改键的生成逻辑,使其包含函数标识和调用参数,确保不同参数(包括关键字参数)对应不同的缓存键。具体做法是:将键设为包含函数对象、位置参数和关键字参数(排序后转为元组)的元组。这样既区分了不同函数,又区分了不同参数。

修复后的 `key` 赋值行如下:

FIX: key = (fn, args, tuple(sorted(kwargs.items())))
challenge-debugging-006 PASS
Suite: debugging · Latency: 4983 ms · Cost: $0.000139 · Finish: stop
Prompt
下面代码期望浅拷贝列表后独立追加,但原列表也被修改。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的 copy 行>。

```python
def append_copy(items, value):
    copied = items
    copied.append(value)
    return copied
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*copied\s*=\s*(?:items\.copy\(\)|items\[:\]|list\(items\))\s*`?
Output
代码中的 bug 在于 `copied = items` 并没有创建列表的副本,而是将变量 `copied` 指向了同一个列表对象。因此,对 `copied` 调用 `append` 方法会直接修改原列表 `items`。

最小修复是使用浅拷贝来创建 `items` 的独立副本。可以通过 `items.copy()` 方法或 `items[:]` 切片实现。

FIX: copied = items.copy()
challenge-debugging-007 PASS
Suite: debugging · Latency: 10210 ms · Cost: $0.000307 · Finish: stop
Prompt
下面代码期望解析 JSON 字符串,但传入已经是 dict 时会报错。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的 data 赋值行>。

```python
import json

def load(payload):
    data = json.loads(payload)
    return data['id']
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*data\s*=\s*(payload\s+if\s+isinstance\(payload,\s*dict\)\s+else\s+json\.loads\(payload\)|json\.loads\(payload\)\s+if\s+isinstance\(payload,\s*\(str,\s*bytes,\s*bytearray\)\)\s+else\s+payload|json\.loads\(payload\)\s+if\s+isinstance\(payload,\s*str\)\s+else\s+payload)\s*`?
Output
Bug: `json.loads()` 要求输入参数为字符串类型,当传入的 `payload` 已经是字典时,会引发 `TypeError` 异常。

最小修复:在解析前检查 `payload` 的类型,如果是字符串则调用 `json.loads()` 解析,否则直接使用。

FIX: data = json.loads(payload) if isinstance(payload, str) else payload
challenge-debugging-008 FAIL
Suite: debugging · Latency: 10243 ms · Cost: $0.000311 · Finish: stop
Prompt
下面代码期望 finally 后仍保留 try 中返回值,但实际总是返回 None。请指出 bug,并给出最小修复。最后单独一行写 FIX: <要删除或替换的 finally 行说明>。

```python
def read_value():
    try:
        return 42
    finally:
        return None
```
Standard Answer / Scoring Expectation
Accepted answers:
- 删除 finally 中的 return None
- 去掉 finally 的 return None
- 不要在 finally 里 return None
- remove return None
- 去掉 finally 中的 return None
- 删除或替换 finally 中的 return None
- 去掉 finally 中的 `return None`
- 删除或替换 finally 中的 `return None`
- 删除 finally 块中的 `return None`
- 删除 finally 块中的 return None
- 删除 finally 中的 `return None`
- 删除 `finally` 块中的 `return None`
- 删除 `finally` 中的 `return None`
- 删除 `finally: return None`
- 将 `finally:` 中的 `return None` 删除
- finally 中的 return None 删除
- finally: 中的 return None 删除
- 删除 finally 块中的 'return None'
- 删除 finally 子句中的 `return None`
- 删除 finally 子句中的 return None
- delete the line `return None` inside the finally block
- delete the line return None inside the finally block
- finally 块不应包含 return 语句
- finally 块不应包含 return
- finally 不应包含 return
Mistake Analysis
Failure type: missing_accepted_answer
模型正确指出 `finally` 里的 `return None` 会覆盖 `try` 中的 `return 42`,修复方向也是删除这个 return。失败点在最后的 `FIX:` 行只写了 `删除 return None`,没有明确说“删除 finally 中的 return None”。当前 contains_any scorer 只接受包含 finally 位置的固定表达;模型正文里虽解释了 finally,但最终短答案没有命中可接受短语。根因是最终修复说明过短/评分短语覆盖不足,而不是调试判断错误。
Output
在Python 中,当 `try` 块和 `finally` 块同时存在 `return` 语句时,`finally` 块中的 `return` 会覆盖 `try` 块中的返回值。因此,函数 `read_value()` 总是返回 `None` 而不是预期的 42。

最小修复方法是移除 `finally` 块中的 `return None` 语句,这样 `try` 块中的返回值 42 就能正常返回。如果 `finally` 块需要执行清理操作,应确保其不包含任何 `return` 语句。

FIX: 删除 `return None`
challenge-reasoning-001 PASS
Suite: reasoning · Latency: 4295 ms · Cost: $0.000102 · Finish: stop
Prompt
只回答最终数字:有 A、B、C、D 四个服务。A 每分钟处理 6 个请求,B 比 A 少 2 个,C 是 B 的 2 倍,D 是 A 和 C 的平均值。四个服务 5 分钟一共处理多少请求?
Standard Answer / Scoring Expectation
Answer: 125
Output
125
challenge-reasoning-002 PASS
Suite: reasoning · Latency: 41169 ms · Cost: $0.001576 · Finish: stop
Prompt
只回答一个字母:五个任务 A、B、C、D、E 排队。A 必须在 B 前,B 必须在 C 前;D 不能在两端;E 必须紧挨在 C 后面。在所有满足条件的队列中,按字典序最小的队列第三个任务是谁?
Standard Answer / Scoring Expectation
Answer: D
Output
D
challenge-reasoning-003 PASS
Suite: reasoning · Latency: 8445 ms · Cost: $0.000263 · Finish: stop
Prompt
只回答最终数字:一个 4 位二进制数从 1011 开始,先左移一位并只保留低 4 位,再与 0110 做异或,最后转成十进制。结果是多少?
Standard Answer / Scoring Expectation
Answer: 0
Output
0
challenge-reasoning-004 PASS
Suite: reasoning · Latency: 5730 ms · Cost: $0.000139 · Finish: stop
Prompt
只回答最终数字:一个集合最初为 {1,2,3,4,5}。依次执行:删除所有偶数;加入 6 和 7;把每个元素乘以 2;删除大于 10 的元素。最终集合元素之和是多少?
Standard Answer / Scoring Expectation
Answer: 18
Output
18
challenge-reasoning-005 PASS
Suite: reasoning · Latency: 9423 ms · Cost: $0.000368 · Finish: stop
Prompt
只回答“可满足”或“不可满足”:有三个布尔变量 x、y、z。约束为:x 或 y 为真;如果 x 为真则 z 为假;如果 y 为真则 z 为真;x 和 y 不能同时为真。是否存在赋值满足全部约束?
Standard Answer / Scoring Expectation
Answer: 可满足
Output
可满足
challenge-rag-001 FAIL
Suite: rag_long_context · Latency: 8902 ms · Cost: $0.000257 · Finish: stop
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 作为默认判分?
Standard Answer / Scoring Expectation
Required phrases: 人工抽检
At least one from each group: 默认使用 / 默认判分 / 默认采用 / 作为默认判分
Forbidden phrases: 因为成本太高、因为不支持中文
Length guidance (diagnostic only): min=n/a, max=160
Mistake Analysis
Failure type: missing_required_info
问题问的是“为什么 v0.2 不把 LLM-as-judge 作为默认判分”。资料 B 给出的关键依据是:开放中文写作题只做少量规则校验和人工抽检。模型回答 `现有提供的资料中未提及v0.2没有将LLM-as-judge作为默认判分的原因。` 只是复述“不会默认使用”或说资料未说明,没有说出替代判分方式里的“人工抽检”,因此缺少真正解释原因的证据链。
Output
现有提供的资料中未提及v0.2没有将LLM-as-judge作为默认判分的原因。
challenge-rag-002 PASS
Suite: rag_long_context · Latency: 8368 ms · Cost: $0.000301 · Finish: stop
Prompt
只根据资料回答,不要自行补充。

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

问题:如果要写低成本高吞吐摘要服务,资料更支持选择哪个模型?另外,多模态表现能否判断?
Standard Answer / Scoring Expectation
Required phrases: Beta、成本、延迟、判断
Forbidden phrases: Alpha 更适合、多模态更强
Length guidance (diagnostic only): min=n/a, max=180
Output
### 模型选择结论
资料更支持选择模型Beta。模型Beta的成本(0.02美元)低于模型Alpha(0.08美元),且平均延迟(3秒)低于模型Alpha(9秒),平均延迟更低意味着单位时间可处理更多请求,更符合低成本、高吞吐的要求。

### 多模态表现判断结论
不能判断,因为资料未给出两者在多模态任务上的表现。
challenge-rag-003 PASS
Suite: rag_long_context · Latency: 35678 ms · Cost: $0.001750 · Finish: stop
Prompt
只根据资料回答。

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

问题:更公平的文字结论应该如何描述 K 模型这次 hard set 表现?
Standard Answer / Scoring Expectation
Required phrases: 题面歧义
At least one from each group: 47/50 / 47 题 / 47题;空输出 / 输出为空 / 未输出
Forbidden phrases: 满分、完全失败
Length guidance (diagnostic only): min=n/a, max=240
Output
K模型本次hard set评测原始通过率为94%(47/50),其中2道未通过的试题被认定为题面歧义,经单独复测后模型均通过,可证明模型具备对应解答能力;另有1道未通过的试题因reasoning tokens用尽导致空输出,该结果无法反映模型真实能力。若排除题面歧义干扰,模型在hard set上的通过率为98%(49/50)。
challenge-rag-004 PASS
Suite: rag_long_context · Latency: 4746 ms · Cost: $0.000149 · Finish: stop
Prompt
只根据资料回答,不要使用资料外知识。

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

问题:根据资料,能否从报告判断供应商利润率?
Standard Answer / Scoring Expectation
Required phrases: 不能、不包含、利润率
Forbidden phrases: 可以判断、训练数据
Length guidance (diagnostic only): min=n/a, max=100
Output
不能。根据资料,报告不包含供应商真实利润率,且所列的报告字段均不涉及与供应商利润率相关的内容,因此无法从报告判断供应商利润率。
challenge-if-001 PASS
Suite: instruction_following · Latency: 5365 ms · Cost: $0.000113 · Finish: stop
Prompt
只输出 JSON 对象,不要 Markdown。字段 status 必须是 "review";字段 scores 必须是对象,包含 coding、debugging、rag 三个整数;字段 note 必须是不超过 12 个汉字的中文字符串。
Standard Answer / Scoring Expectation
Expected JSON schema:
{
  "type": "object",
  "required": [
    "status",
    "scores",
    "note"
  ],
  "additionalProperties": false,
  "properties": {
    "status": {
      "type": "string",
      "const": "review"
    },
    "scores": {
      "type": "object",
      "required": [
        "coding",
        "debugging",
        "rag"
      ],
      "additionalProperties": false,
      "properties": {
        "coding": {
          "type": "integer"
        },
        "debugging": {
          "type": "integer"
        },
        "rag": {
          "type": "integer"
        }
      }
    },
    "note": {
      "type": "string"
    }
  }
}
Output
{"status":"review","scores":{"coding":90,"debugging":88,"rag":91},"note":"整体表现良好待提升"}
challenge-if-002 PASS
Suite: instruction_following · Latency: 4793 ms · Cost: $0.000129 · Finish: stop
Prompt
只输出 4 行,不要解释。第 1 行是 BEGIN,第 4 行是 END。第 2 行必须包含“模型评测”,第 3 行必须包含“HTML报告”。不能出现任何项目符号。
Standard Answer / Scoring Expectation
Expected regex pattern:
^\s*BEGIN\s*\n[^\n]*模型评测[^\n]*\n[^\n]*HTML报告[^\n]*\nEND\s*$
Output
BEGIN
本次进行的是DracoBench对应的模型评测任务
评测完成后会生成对应的HTML报告
END
challenge-if-003 PASS
Suite: instruction_following · Latency: 14001 ms · Cost: $0.000433 · Finish: stop
Prompt
只输出一个中文句子,不能超过 28 个汉字。必须同时包含“难题”和“区分度”,不能包含“最强”“吊打”“遥遥领先”。
Standard Answer / Scoring Expectation
Required phrases: 难题、区分度
Forbidden phrases: 最强、吊打、遥遥领先
Length guidance (diagnostic only): min=n/a, max=28
Output
本次竞赛的难题设置很有区分度,能很好筛选不同水平的选手。
challenge-zh-writing-001 PASS
Suite: chinese_writing · Latency: 11071 ms · Cost: $0.000326 · Finish: stop
Prompt
写一段不超过 120 个汉字的公众号结论,主题是“模型在简单题满分不代表真实强”。必须包含“简单题”“真实能力”“失败样例”,不能出现“吊打”。
Standard Answer / Scoring Expectation
Required phrases: 简单题、真实能力、失败样例
Forbidden phrases: 吊打
Length guidance (diagnostic only): min=n/a, max=120
Output
不少小伙伴看到模型在简单题上拿满分就觉得它无所不能,其实这根本不能代表它的真实能力。遇到复杂场景、逻辑嵌套的失败样例时,模型短板就会立刻暴露。别被表面的简单题高分迷惑,理性看待模型的实际表现。
challenge-zh-writing-002 PASS
Suite: chinese_writing · Latency: 7306 ms · Cost: $0.000187 · Finish: stop
Prompt
把下面口语句改写成专业表达,不超过 80 个汉字:这个模型看起来很猛,但一遇到复杂调试就开始掉链子。必须包含“复杂调试”和“稳定性”,不能包含“猛”“掉链子”。
Standard Answer / Scoring Expectation
Required phrases: 复杂调试、稳定性
Forbidden phrases: 猛、掉链子
Length guidance (diagnostic only): min=n/a, max=80
Output
该模型基础性能表现优异,但在复杂调试场景下稳定性不足,难以适配高复杂度任务的实际运行需求。
challenge-coding-009 PASS
Suite: coding · Latency: 9049 ms · Cost: $0.000253 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(events: list[dict]) -> dict[str, int]。每个事件包含 user、type、amount;type 为 "add" 或 "remove"。按 user 汇总 add 减 remove 后的库存,结果中去掉库存为 0 的用户,按 key 字典序返回普通 dict。amount 可能是字符串数字。
Standard Answer / Scoring Expectation
Reference tests:
events=[{'user':'b','type':'add','amount':'5'},{'user':'a','type':'add','amount':3},{'user':'b','type':'remove','amount':2},{'user':'a','type':'remove','amount':3}]
assert solution.solve(events) == {'b': 3}
assert solution.solve([]) == {}
assert solution.solve([{'user':'x','type':'remove','amount':'2'}]) == {'x': -2}
Output
```python
def solve(events: list[dict]) -> dict[str, int]:
    from collections import defaultdict
    
    inventory = defaultdict(int)
    
    for event in events:
        user = event["user"]
        amount = int(event["amount"])
        if event["type"] == "add":
            inventory[user] += amount
        else:  # "remove"
            inventory[user] -= amount
    
    # 过滤掉库存为0的用户,并按字典序排序
    result = {user: stock for user, stock in sorted(inventory.items()) if stock != 0}
    return result
```
challenge-coding-010 PASS
Suite: coding · Latency: 38860 ms · Cost: $0.001099 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(expr: str) -> int。expr 只包含非负整数、+、-、空格和括号,计算表达式结果。不要使用 eval。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve('1 + 2 - 3') == 0
assert solution.solve('10 - (2 + 3) + 4') == 9
assert solution.solve('(1+(4+5+2)-3)+(6+8)') == 23
Output
```python
def solve(expr: str) -> int:
    stack = []
    result = 0
    number = 0
    sign = 1  # 1 for positive, -1 for negative
    
    for char in expr:
        if char.isdigit():
            number = number * 10 + int(char)
        elif char == '+':
            result += sign * number
            number = 0
            sign = 1
        elif char == '-':
            result += sign * number
            number = 0
            sign = -1
        elif char == '(':
            stack.append(result)
            stack.append(sign)
            result = 0
            sign = 1
            number = 0
        elif char == ')':
            result += sign * number
            number = 0
            result *= stack.pop()  # pop sign
            result += stack.pop()  # pop previous result
        elif char == ' ':
            continue
    
    if number != 0:
        result += sign * number
    
    return result
```
challenge-coding-011 PASS
Suite: coding · Latency: 4758 ms · Cost: $0.000096 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(rows: list[str]) -> list[tuple[str, int]]。每行格式为 "name score",空白数量不定;同名保留最高分;输出按分数降序、同分按 name 升序。忽略空行。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve(['alice 10','bob   12','alice 15','','bob 11']) == [('alice',15),('bob',12)]
assert solution.solve(['x -1','a -1','b 0']) == [('b',0),('a',-1),('x',-1)]
Output
```python
def solve(rows: list[str]) -> list[tuple[str, int]]:
    max_scores = {}
    for line in rows:
        if not line.strip():
            continue
        parts = line.split()
        name, score_str = parts[0], parts[-1]
        score = int(score_str)
        if name not in max_scores or score > max_scores[name]:
            max_scores[name] = score
    result = list(max_scores.items())
    result.sort(key=lambda x: (-x[1], x[0]))
    return result
```
challenge-coding-012 FAIL
Suite: coding · Latency: 86437 ms · Cost: $0.000000 · Finish: None
Prompt
只输出 Python 代码,不要解释。实现 solve(pattern: str, text: str) -> bool。pattern 支持 ? 匹配任意单字符,* 匹配任意长度字符串。必须匹配完整 text。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve('a*b?d', 'axxxbc d'.replace(' ','')) is True
assert solution.solve('a*c', 'ab') is False
assert solution.solve('*', '') is True
assert solution.solve('file-??.txt', 'file-ab.txt') is True
Mistake Analysis
Failure type: empty_output
模型正常结束但没有输出任何可评分正文,形成空输出。评分器无法命中答案或关键字段,因此失败。根因是答案生成阶段没有产出内容,而不是评分规则过严。
Output

  
challenge-coding-013 PASS
Suite: coding · Latency: 5728 ms · Cost: $0.000106 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(tree: dict) -> list[str]。tree 是嵌套字典,叶子是字符串或数字。返回所有叶子的路径,路径用点连接,按字典序排序。例如 {'a': {'b': 1}} -> ['a.b=1']。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve({'a': {'b': 1, 'c': 'x'}, 'd': 2}) == ['a.b=1','a.c=x','d=2']
assert solution.solve({'z': {'a': {'b': 3}}}) == ['z.a.b=3']
assert solution.solve({}) == []
Output
```python
def solve(tree: dict) -> list[str]:
    result = []
    
    def dfs(node, path):
        if isinstance(node, dict):
            for key, value in node.items():
                dfs(value, path + [key])
        else:
            result.append(f"{'.'.join(path)}={node}")
    
    dfs(tree, [])
    return sorted(result)
```
challenge-coding-014 PASS
Suite: coding · Latency: 74383 ms · Cost: $0.002759 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(nums: list[int]) -> int。返回删除恰好一个元素后,剩余数组的最大连续子数组和。nums 长度至少为 2,可以全为负数。
Standard Answer / Scoring Expectation
Reference tests:
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
Output
```python
from typing import List

def solve(nums: List[int]) -> int:
    n = len(nums)
    # dp_left[i]: 以 i 结尾的最大子数组和
    dp_left = [0] * n
    dp_left[0] = nums[0]
    for i in range(1, n):
        dp_left[i] = max(nums[i], dp_left[i-1] + nums[i])
    
    # dp_right[i]: 以 i 开头的最大子数组和
    dp_right = [0] * n
    dp_right[-1] = nums[-1]
    for i in range(n-2, -1, -1):
        dp_right[i] = max(nums[i], nums[i] + dp_right[i+1])
    
    # left_best[i]: 前缀 [0..i] 的最大子数组和
    left_best = [0] * n
    left_best[0] = dp_left[0]
    for i in range(1, n):
        left_best[i] = max(left_best[i-1], dp_left[i])
    
    # right_best[i]: 后缀 [i..n-1] 的最大子数组和
    right_best = [0] * n
    right_best[-1] = dp_right[-1]
    for i in range(n-2, -1, -1):
        right_best[i] = max(right_best[i+1], dp_right[i])
    
    ans = -float('inf')
    for i in range(n):
        candidate = -float('inf')
        if i > 0:
            candidate = max(candidate, left_best[i-1])
        if i < n-1:
            candidate = max(candidate, right_best[i+1])
        if i > 0 and i < n-1:
            candidate = max(candidate, dp_left[i-1] + dp_right[i+1])
        ans = max(ans, candidate)
    
    return ans
```
challenge-debugging-009 PASS
Suite: debugging · Latency: 10915 ms · Cost: $0.000276 · Finish: stop
Prompt
下面代码期望把输入按逗号拆分并去掉空白,但会把空字段也保留下来。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的 return 行>。

```python
def parse(s):
    return [part.strip() for part in s.split(',')]
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*return\s+\[part\.strip\(\)\s+for\s+part\s+in\s+s\.split\('\,'\)\s+if\s+part\.strip\(\)\]\s*`?
Output
当前代码的 bug 是:使用 `split(',')` 拆分字符串后,如果原字符串中包含连续逗号或首尾逗号,会产生空字符串字段,经过 `strip()` 后仍然为空字符串,这些空字段会被保留在结果列表中。通常期望在去掉空白后忽略空字段。

最小修复:在列表推导式中增加条件,只保留非空字符串(即 `strip()` 后长度大于 0 的字符串)。

FIX: return [part.strip() for part in s.split(',') if part.strip()]
challenge-debugging-010 PASS
Suite: debugging · Latency: 50728 ms · Cost: $0.001647 · Finish: stop
Prompt
下面代码期望用 UTC 时间戳排序,但字符串排序会错。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的 sort 行>。

```python
rows.sort(key=lambda r: r['ts'])
```
Standard Answer / Scoring Expectation
Accepted answers:
- datetime.fromisoformat
- dateutil.parser
- 解析 ts 后排序
- parse ts
- fromisoformat
- int(r['ts'])
- float(r['ts'])
- key=lambda r: int(r['ts'])
- key=lambda r: float(r['ts'])
Output
###Bug 原因
当前代码直接将`r['ts']`的字符串值作为排序键,字符串的字典序与UTC时间的先后顺序不一致,导致排序错误。典型场景:当`ts`为Unix时间戳的数字字符串时,`"10"`的字典序小于`"9"`,但前者对应的时间更晚,会出现排序颠倒;若`ts`为非补零的日期格式、带未补零小数的时间格式,也会出现同类问题。

### 最小修复方案
若`ts`是UTC Unix时间戳的字符串(秒/毫秒级整数),只需将字符串转换为整数即可保证排序正确,改动最小;若时间戳带小数精度,可转换为浮点数。若`ts`是ISO 8601格式的UTC时间字符串,需先解析为时区感知的datetime对象再排序。

FIX: rows.sort(key=lambda r: int(r['ts']))
challenge-debugging-011 PASS
Suite: debugging · Latency: 9977 ms · Cost: $0.000282 · Finish: stop
Prompt
下面代码在输入包含 0 时会误判为默认值 10。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的 limit 赋值行>。

```python
def query(limit=None):
    limit = limit or 10
    return list(range(limit))
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*(?:limit\s*=\s*10\s+if\s+limit\s+is\s+None\s+else\s+limit|limit\s*=\s*limit\s+if\s+limit\s+is\s+not\s+None\s+else\s+10|if\s+limit\s+is\s+None\s*:\s*limit\s*=\s*10)\s*`?
Output
代码中的 bug 在于使用了 `limit = limit or 10` 这种写法。当 `limit` 的值为 0 时,由于 0 在布尔上下文中被视为 `False`,因此 `limit or 10` 会返回 10,导致错误地将 0 替换为默认值 10。

最小修复方法是显式检查 `limit` 是否为 `None`,仅当 `limit` 为 `None` 时才设置默认值为 10,从而保留 0 等有效输入。

修复后的 `limit` 赋值行如下:

FIX: limit = 10 if limit is None else limit
challenge-debugging-012 PASS
Suite: debugging · Latency: 10267 ms · Cost: $0.000258 · Finish: stop
Prompt
下面代码期望复制嵌套配置后修改副本,但原配置也被修改。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的 copied 赋值行>。

```python
def update(config):
    copied = dict(config)
    copied['db']['host'] = 'localhost'
    return copied
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*copied\s*=\s*(?:copy\.deepcopy\(config\)|__import__\(['\"]copy['\"]\)\.deepcopy\(config\))\s*`?
Output
Bug: 使用 `dict(config)` 只进行了浅拷贝,嵌套的字典(如 `config['db']`)没有被复制,而是共享引用,因此修改 `copied['db']['host']` 也会影响原配置。

最小修复: 使用 `copy.deepcopy` 进行深拷贝,确保复制所有嵌套的可变对象。注意需要先导入 `copy` 模块。

FIX: copied = copy.deepcopy(config)
challenge-debugging-013 PASS
Suite: debugging · Latency: 10390 ms · Cost: $0.000287 · Finish: stop
Prompt
下面代码期望找到第一个匹配项,但找不到时会抛 StopIteration。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的 return 行>。

```python
def find_user(users, name):
    return next(u for u in users if u['name'] == name)
```
Standard Answer / Scoring Expectation
Expected regex pattern:
\*{0,2}FIX\*{0,2}:\*{0,2}\s*`?\s*return\s+next\(\(u\s+for\s+u\s+in\s+users\s+if\s+u\['name'\]\s*==\s*name\),\s*None\)\s*`?
Output
Bug: 当 `users` 中没有匹配 `name` 的用户时,`next()` 会引发 `StopIteration` 异常,这可能导致调用者未妥善处理异常。

最小修复:为 `next()` 提供默认值 `None`,使函数在找不到匹配项时返回 `None` 而不是抛出异常。

FIX: return next((u for u in users if u['name'] == name), None)
challenge-debugging-014 PASS
Suite: debugging · Latency: 10740 ms · Cost: $0.000319 · Finish: stop
Prompt
下面代码期望按请求顺序记录日志,但默认参数导致多次调用共用同一个列表。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的函数定义行>。

```python
def log_request(req, logs=[]):
    logs.append(req['id'])
    return logs
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*(?:```(?:python)?\s*)?`?\s*def\s+log_request\(req,\s*logs=None\)\s*:
Output
Bug: 默认参数 `logs=[]` 在函数定义时创建了一个列表对象,该对象在所有未显式传递 `logs` 参数的调用中共享。这会导致多次调用 `log_request` 时,日志被追加到同一个列表,而不是每次调用都从新的空列表开始。

最小修复: 将默认参数改为 `None`,在函数内部检查若为 `None` 则创建新列表。

修复后的代码:
```python
def log_request(req, logs=None):
    if logs is None:
        logs = []
    logs.append(req['id'])
    return logs
```

FIX: def log_request(req, logs=None):
challenge-reasoning-006 FAIL
Suite: reasoning · Latency: 72846 ms · Cost: $0.000000 · Finish: None
Prompt
只回答最终数字:一个队列从左到右是 A,B,C,D,E。依次执行:把第 2 个移到末尾;删除第 3 个;在最前面插入 X;把最后两个反转。最终队列中 C 的位置是第几位?
Standard Answer / Scoring Expectation
Answer: 3
Mistake Analysis
Failure type: empty_output
模型正常结束但没有输出任何可评分正文,形成空输出。评分器无法命中答案或关键字段,因此失败。根因是答案生成阶段没有产出内容,而不是评分规则过严。
Output

  
challenge-reasoning-007 PASS
Suite: reasoning · Latency: 3966 ms · Cost: $0.000055 · Finish: stop
Prompt
只回答最终数字:某缓存命中率从 60% 提升到 75%。如果总请求数为 800,未命中请求减少了多少个?
Standard Answer / Scoring Expectation
Answer: 120
Output
120
challenge-rag-005 PASS
Suite: rag_long_context · Latency: 4568 ms · Cost: $0.000116 · Finish: stop
Prompt
只根据资料回答。

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

问题:如果文章讨论“模型真实能力”,应该优先引用哪个模式?如果讨论“低预算可用性”,应该优先引用哪个模式?
Standard Answer / Scoring Expectation
Required phrases: ability mode、efficiency mode、真实能力、低预算
Forbidden phrases: 只看一个模式
Length guidance (diagnostic only): min=n/a, max=180
Output
1. 讨论“模型真实能力”应优先引用ability mode,报告明确建议该模式用于能力判断。
2. 讨论“低预算可用性”应优先引用efficiency mode,该模式成本仅0.04美元,远低于ability mode的0.12美元,且报告建议该模式用于成本和稳定性判断。
challenge-rag-006 FAIL
Suite: rag_long_context · Latency: 14585 ms · Cost: $0.000325 · Finish: stop
Prompt
只根据资料回答。

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

问题:这次失败的根因是什么?
Standard Answer / Scoring Expectation
Required phrases: key
At least one from each group: 字符串 / 类型不匹配;整数 / int;类型假设 / 假设 key 为整数 / 假设 key 是整数 / key 为整数类型
Length guidance (diagnostic only): min=n/a, max=120
Mistake Analysis
Failure type: missing_required_info
模型回答没有覆盖评分规则要求的完整证据链。每组至少一个依据表达:整数 / int。这通常表示答案方向可能对,但没有把资料依据说清楚。
Output
这次失败的根因是模型擅自补充了类型假设,将测试数据中本为字符串类型的key错误按整型处理,该问题并非token截断导致。
challenge-rag-007 PASS
Suite: rag_long_context · Latency: 9033 ms · Cost: $0.000192 · Finish: stop
Prompt
只根据资料回答,不要自行补充。

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

问题:报告是否已经支持图表?回答时说明依据。
Standard Answer / Scoring Expectation
Required phrases: 图表、资料
At least one from each group: 提到 / 提及
Forbidden phrases: 已经支持、折线图、柱状图
Length guidance (diagnostic only): min=n/a, max=100
Output
报告目前不支持图表。
依据:提供的资料仅提及DracoBench的HTML报告目前展示Summary、By Suite、Failure Examples和Case Details,且明确说明资料没有提到图表功能,无相关支持图表的内容。
challenge-if-004 PASS
Suite: instruction_following · Latency: 4573 ms · Cost: $0.000077 · Finish: stop
Prompt
只输出 JSON 对象。字段 mode 必须是 "ability";字段 limits 必须是对象,包含 max_tokens:4096 和 temperature:0;字段 warnings 必须是正好两个字符串组成的数组。不要 Markdown。
Standard Answer / Scoring Expectation
Expected JSON schema:
{
  "type": "object",
  "required": [
    "mode",
    "limits",
    "warnings"
  ],
  "additionalProperties": false,
  "properties": {
    "mode": {
      "type": "string",
      "const": "ability"
    },
    "limits": {
      "type": "object",
      "required": [
        "max_tokens",
        "temperature"
      ],
      "additionalProperties": false,
      "properties": {
        "max_tokens": {
          "type": "integer",
          "const": 4096
        },
        "temperature": {
          "type": "integer",
          "const": 0
        }
      }
    },
    "warnings": {
      "type": "array",
      "minItems": 2,
      "maxItems": 2,
      "items": {
        "type": "string"
      }
    }
  }
}
Output
{
    "mode": "ability",
    "limits": {
        "max_tokens": 4096,
        "temperature": 0
    },
    "warnings": [
        "本输出仅用于模型能力评估,不构成任何专业建议",
        "请勿将本输出内容用于非法或违规场景"
    ]
}
challenge-if-005 PASS
Suite: instruction_following · Latency: 32571 ms · Cost: $0.000840 · Finish: stop
Prompt
只输出 Markdown 表格,必须有 3 列:模式、用途、风险。必须包含 ability mode 和 efficiency mode 两行。不能添加表格外说明。
Standard Answer / Scoring Expectation
Expected regex pattern:
^\s*\|\s*模式\s*\|\s*用途\s*\|\s*风险\s*\|\s*\n\s*\|\s*-+\s*\|\s*-+\s*\|\s*-+\s*\|[\s\S]*ability mode[\s\S]*efficiency mode[\s\S]*$
Output
|模式 | 用途 | 风险 |
| --- | --- | --- |
| ability mode | 用于DracoBench中模型全能力维度评估,覆盖复杂任务处理、多领域适配等能力验证 | 全量能力测试用例可能导致评估耗时较长,极端边缘用例或触发模型异常输出 |
| efficiency mode | 用于DracoBench中模型运行效率评估,覆盖推理速度、资源占用等性能指标验证 | 侧重效率优化可能简化部分能力测试流程,低资源场景下模型稳定性或不足 |
challenge-zh-writing-003 PASS
Suite: chinese_writing · Latency: 12250 ms · Cost: $0.000402 · Finish: stop
Prompt
写一段不超过 140 个汉字的公众号小结,主题是“为什么要同时展示原题、模型输出和错误解释”。必须包含“原题”“错误解释”“可复查”,不能出现“玄学”。
Standard Answer / Scoring Expectation
Required phrases: 原题、错误解释、可复查
Forbidden phrases: 玄学
Length guidance (diagnostic only): min=n/a, max=140
Output
本期公众号解答「为什么要同时展示原题、模型输出和错误解释」的问题:三类内容同屏呈现能帮大家清晰定位模型偏差根源,所有内容支持可复查,方便对照验证,避免盲目采信结果,让AI使用更透明可控。
challenge-reasoning-008 PASS
Suite: reasoning · Latency: 8363 ms · Cost: $0.000348 · Finish: stop
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 等于多少?
Standard Answer / Scoring Expectation
Answer: 15
Output
15
challenge-reasoning-009 PASS
Suite: reasoning · Latency: 29112 ms · Cost: $0.001248 · Finish: stop
Prompt
只回答一个字母:任务 A、B、C、D、E、F 排列。C 必须紧挨在 A 后面;B 必须在 D 前;D 必须在 F 前;F 必须最后;E 不能第一。在所有满足条件的排列中字典序最小的排列,第三个任务是谁?
Standard Answer / Scoring Expectation
Answer: B
Output
B
challenge-reasoning-010 PASS
Suite: reasoning · Latency: 10309 ms · Cost: $0.000360 · Finish: stop
Prompt
只回答“可满足”或“不可满足”:布尔变量 x、y、z 满足:x 和 y 恰好一个为真;如果 x 为真则 z 为真;如果 y 为真则 z 为假;z 为真。是否存在赋值满足全部约束?
Standard Answer / Scoring Expectation
Answer: 可满足
Output
可满足
challenge-reasoning-011 PASS
Suite: reasoning · Latency: 5962 ms · Cost: $0.000152 · Finish: stop
Prompt
只回答最终数字:列表 [2,4,6,8] 中每个数先减去它的位置编号(从 1 开始),然后删除所有奇数,再把剩余数平方,最后求和。结果是多少?
Standard Answer / Scoring Expectation
Answer: 20
Output
20
challenge-reasoning-012 PASS
Suite: reasoning · Latency: 20207 ms · Cost: $0.000986 · Finish: stop
Prompt
只回答最终数字:一个 5 位二进制数 10110 先循环右移 1 位,再与 00111 做异或,最后转成十进制。结果是多少?
Standard Answer / Scoring Expectation
Answer: 12
Output
12
challenge-reasoning-013 PASS
Suite: reasoning · Latency: 5529 ms · Cost: $0.000111 · Finish: stop
Prompt
只回答一个字母:模型 A 通过 18 题、成本 0.06;模型 B 通过 20 题、成本 0.10;模型 C 通过 16 题、成本 0.04。按“通过题数/成本”最高选择,应该选哪个模型?
Standard Answer / Scoring Expectation
Answer: C
Output
C
challenge-reasoning-014 PASS
Suite: reasoning · Latency: 7091 ms · Cost: $0.000120 · Finish: stop
Prompt
只回答最终数字:同一套 100 道题中,失败题数从 12 降到 7。错误率降低了多少个百分点?
Standard Answer / Scoring Expectation
Answer: 5
Output
5
challenge-reasoning-015 PASS
Suite: reasoning · Latency: 9500 ms · Cost: $0.000402 · Finish: stop
Prompt
只回答最终数字:集合 S 初始为 {a,b,c,d}。删除字母序在 c 之前的元素;加入 e 和 b;再删除所有元音字母。最终集合有几个元素?
Standard Answer / Scoring Expectation
Answer: 3
Output
3
challenge-reasoning-016 PASS
Suite: reasoning · Latency: 48610 ms · Cost: $0.001876 · Finish: stop
Prompt
只回答最终数字:3x3 矩阵按行是 1 2 3 / 4 5 6 / 7 8 9。顺时针旋转 90 度后,第二行元素之和是多少?
Standard Answer / Scoring Expectation
Answer: 15
Output
15
challenge-reasoning-017 PASS
Suite: reasoning · Latency: 17736 ms · Cost: $0.000760 · Finish: stop
Prompt
只回答最终数字:依赖关系为 a 无依赖;b 依赖 a;c 依赖 a;d 依赖 b 和 c;e 依赖 b;f 依赖 d 和 e;g 依赖 a。按可并行执行的拓扑层划分,第二层有几个任务?
Standard Answer / Scoring Expectation
Answer: 3
Output
3
challenge-reasoning-018 PASS
Suite: reasoning · Latency: 5483 ms · Cost: $0.000163 · Finish: stop
Prompt
只回答星期几:第 0 天是星期二。每 7 天循环一次。第 17 天是星期几?
Standard Answer / Scoring Expectation
Answer: 星期五
Output
星期五
challenge-reasoning-019 PASS
Suite: reasoning · Latency: 13902 ms · Cost: $0.000493 · Finish: stop
Prompt
只回答最终数字:用 A、B、C 组成长度为 3 的字符串,要求恰好包含一个 A,并且最后一个字符不能是 C。满足条件的字符串有多少个?
Standard Answer / Scoring Expectation
Answer: 8
Output
8
challenge-reasoning-020 FAIL
Suite: reasoning · Latency: 170583 ms · Cost: $0.004268 · Finish: length
Prompt
只回答最终数字:栈操作从空栈开始。push n 表示入栈;dup 复制栈顶;add 弹出两个数并压入它们的和;swap 交换栈顶两个数;sub 先弹出 x 再弹出 y,并压入 y-x。依次执行:push 2, push 3, dup, add, push 4, swap, sub。最终栈顶是多少?
Standard Answer / Scoring Expectation
Answer: -2
Mistake Analysis
Failure type: empty_output_length
模型耗尽输出预算后没有留下任何正文,形成空输出。评分器无法找到答案或 `solve` 函数,所以失败。这类问题应归因于输出预算/过度生成,而不是某个具体算法步骤写错。
Output

  
challenge-reasoning-021 PASS
Suite: reasoning · Latency: 31109 ms · Cost: $0.001120 · Finish: stop
Prompt
只回答最终数字:三个队列 Q1、Q2、Q3 初始长度分别为 2、1、0。每一轮先从所有非空队列各处理 1 个元素,然后向 Q3 加入 2 个元素。执行 3 轮后,三个队列总长度是多少?
Standard Answer / Scoring Expectation
Answer: 4
Output
4
challenge-reasoning-022 PASS
Suite: reasoning · Latency: 14092 ms · Cost: $0.000466 · Finish: stop
Prompt
只回答最终数字:映射初始为 {a:1, b:2}。依次执行:设置 c=a+b;设置 a=c-b;删除 b;设置 d=a+c。最终所有 value 之和是多少?
Standard Answer / Scoring Expectation
Answer: 8
Output
8
challenge-reasoning-023 PASS
Suite: reasoning · Latency: 10203 ms · Cost: $0.000329 · Finish: stop
Prompt
只回答“甲”“乙”或“丙”:甲说“乙说的是真话”;乙说“丙说的是假话”;丙说“甲说的是假话”。如果恰好一人说真话,说真话的人是谁?
Standard Answer / Scoring Expectation
Answer: 丙
Output
challenge-reasoning-024 PASS
Suite: reasoning · Latency: 6329 ms · Cost: $0.000155 · Finish: stop
Prompt
只回答一个字母:综合分 = 通过率百分数 - 成本乘以 10。模型 A 通过率 92%、成本 0.20;模型 B 通过率 88%、成本 0.05;模型 C 通过率 90%、成本 0.10。综合分最高的是哪个模型?
Standard Answer / Scoring Expectation
Answer: A
Output
A
challenge-reasoning-025 PASS
Suite: reasoning · Latency: 4054 ms · Cost: $0.000079 · Finish: stop
Prompt
只回答最终三位数:一个三位数的百位为 a、十位为 b、个位为 c。已知 a+b+c=13,a=c+1,b=2c。这个三位数是多少?
Standard Answer / Scoring Expectation
Answer: 463
Output
463
challenge-coding-015 PASS
Suite: coding · Latency: 9927 ms · Cost: $0.000262 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(line: str) -> list[str],解析一行简化 CSV:逗号分隔;字段可以用双引号包裹;引号内逗号保留;引号内两个连续双引号表示一个双引号;空字段保留;空格是普通字符,不要自动 trim。
Standard Answer / Scoring Expectation
Reference tests:
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  ']
Output
```python
def solve(line: str) -> list[str]:
    fields = []
    current_field = []
    in_quotes = False
    i = 0
    n = len(line)
    
    while i < n:
        char = line[i]
        if char == '"':
            if not in_quotes:
                in_quotes = True
            else:
                if i + 1 < n and line[i + 1] == '"':
                    current_field.append('"')
                    i += 1
                else:
                    in_quotes = False
        elif char == ',' and not in_quotes:
            fields.append(''.join(current_field))
            current_field = []
        else:
            current_field.append(char)
        i += 1
    
    fields.append(''.join(current_field))
    return fields
```
challenge-coding-016 FAIL
Suite: coding · Latency: 27866 ms · Cost: $0.000527 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(intervals: list[tuple[int, int]]) -> list[tuple[int, int]]。intervals 是整数闭区间,先按起点排序;重叠或端点相邻的区间要合并,例如 [1,2] 和 [3,4] 合并为 [1,4]。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve([(5,7),(1,2),(3,4),(10,10)]) == [(1,7),(10,10)]
assert solution.solve([(1,1),(3,3)]) == [(1,1),(3,3)]
assert solution.solve([]) == []
Mistake Analysis
Failure type: code_syntax_error
区间合并思路本身接近正确,但生成的 Python 缩进坏了:`if start <= current_end + 1:` 下一行 `current_end = max(current_end, end)` 没有缩进到 if 块内,导入 `solution.py` 时直接抛 IndentationError。根因是代码格式/缩进损坏,不是区间合并条件本身被测试击穿。
Output
```python
def solve(intervals: list[tuple[int, int]]) -> list[tuple[int, int]]:
    if not intervals:
        return []
    intervals.sort(key=lambda x: x[0])
    merged = []
    current_start, current_end = intervals[0]
    for start, end in intervals[1:]:
        if start <= current_end + 1:
current_end = max(current_end, end)
        else:
            merged.append((current_start, current_end))
            current_start, current_end = start, end
    merged.append((current_start, current_end))
    return merged
```
challenge-coding-017 PASS
Suite: coding · Latency: 6650 ms · Cost: $0.000145 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(events: list[tuple[str, int]], window: int, limit: int) -> list[bool],模拟按用户限流。events 按时间非降序排列。某用户在当前事件时间 ts 的窗口 (ts-window, ts] 内,已放行事件数少于 limit 才放行;被拒绝的事件不计入窗口。
Standard Answer / Scoring Expectation
Reference tests:
events=[('a',1),('a',2),('a',3),('a',4),('a',8)]
assert solution.solve(events, 5, 2) == [True, True, False, False, True]
assert solution.solve([('x',10),('x',11),('x',16)], 5, 1) == [True, False, True]
Output
```python
from collections import defaultdict

def solve(events: list[tuple[str, int]], window: int, limit: int) -> list[bool]:
    user_windows = defaultdict(list)  # 每个用户存储放行的事件时间戳
    result = []
    
    for user, ts in events:
        # 清理该用户窗口外的时间戳
        valid_timestamps = [t for t in user_windows[user] if t > ts - window]
        user_windows[user] = valid_timestamps
        
        if len(valid_timestamps) < limit:
            result.append(True)
            user_windows[user].append(ts)
        else:
            result.append(False)
    
    return result
```
challenge-coding-018 PASS
Suite: coding · Latency: 13249 ms · Cost: $0.000471 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(path: str) -> str,规范化绝对 Unix 路径:处理重复斜杠、.、..;.. 在根目录时仍留在根目录;返回结果必须以 / 开头且除根目录外不能以 / 结尾。不要使用 os.path。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve('/a//b/./c/../') == '/a/b'
assert solution.solve('/../../x') == '/x'
assert solution.solve('/') == '/'
Output
```python
def solve(path: str) -> str:
    parts = path.split('/')
    stack = []
    for part in parts:
        if part == '' or part == '.':
            continue
        elif part == '..':
            if stack and stack[-1] != '':
                stack.pop()
        else:
            stack.append(part)
    if not stack:
        return '/'
    return '/' + '/'.join(stack)
```
challenge-coding-019 PASS
Suite: coding · Latency: 12757 ms · Cost: $0.000353 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(words: list[str]) -> list[list[str]],按变位词分组。大小写敏感;组内保持输入顺序;组的顺序按该组第一个单词在输入中出现的位置。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve(['eat','tea','tan','ate','nat','bat']) == [['eat','tea','ate'], ['tan','nat'], ['bat']]
assert solution.solve(['b','B','bb']) == [['b'], ['B'], ['bb']]
Output
```python
def solve(words: list[str]) -> list[list[str]]:
    groups = {}
    order = []
    for word in words:
        key = tuple(sorted(word))
        if key not in groups:
            groups[key] = []
            order.append(key)
        groups[key].append(word)
    return [groups[key] for key in order]
```
challenge-coding-020 PASS
Suite: coding · Latency: 17248 ms · Cost: $0.000574 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(text: str) -> dict,解析 Markdown front matter。只有第一行正好是 --- 时才解析,直到下一行 --- 结束;每行 key: value,key 和 value 两侧 trim;形如 [a, b] 的 value 返回字符串列表;其他 value 返回字符串。没有完整 front matter 返回 {}。
Standard Answer / Scoring Expectation
Reference tests:
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') == {}
Output
```python
import re

def solve(text: str) -> dict:
    lines = text.splitlines()
    if not lines or lines[0].strip() != "---":
        return {}
    
    result = {}
    end_found = False
    i = 1
    
    while i < len(lines):
        line = lines[i].strip()
        if line == "---":
            end_found = True
            break
        
        if ":" in line:
            key, value = line.split(":", 1)
            key = key.strip()
            value = value.strip()
            
            # 处理列表格式 [a, b]
            list_match = re.match(r'^\[(.*)\]$', value)
            if list_match:
                items = [item.strip() for item in list_match.group(1).split(",")]
                result[key] = items
            else:
                result[key] = value
        
        i += 1
    
    return result if end_found else {}
```
challenge-coding-021 FAIL
Suite: coding · Latency: 7754 ms · Cost: $0.000210 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(items: list[str], k: int) -> list[str],返回出现次数最高的前 k 个元素;次数相同按第一次出现的先后排序;k 大于不同元素数量时返回全部。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve(['b','a','b','c','a','b'], 2) == ['b','a']
assert solution.solve(['x','y','z','y','z','x'], 2) == ['x','y']
assert solution.solve(['a'], 5) == ['a']
Mistake Analysis
Failure type: code_assertion_failure
频次统计方向正确,但“第一次出现位置”的记录方式错了。代码用字典推导 `{item: idx for idx, item in enumerate(items)}`,重复元素会被后面的索引覆盖,实际记录的是最后一次出现位置。第二组里 x、y、z 都出现 2 次,正确 tie-break 应按第一次出现得到 `[x, y]`;模型按最后出现位置排序成 `[y, z]`。根因是 tie-break 状态记录错,应只在元素第一次出现时写入索引。
Output
```python
from collections import Counter

def solve(items: list[str], k: int) -> list[str]:
    if not items:
        return []
    
    # 统计频率并记录首次出现顺序
    freq = Counter(items)
    first_occurrence = {item: idx for idx, item in enumerate(items)}
    
    # 排序:先按频率降序,再按首次出现顺序升序
    sorted_items = sorted(
        freq.keys(),
        key=lambda x: (-freq[x], first_occurrence[x])
    )
    
    # 返回前k个或全部
    return sorted_items[:k]
```
challenge-coding-022 PASS
Suite: coding · Latency: 32733 ms · Cost: $0.001048 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(config: dict, overrides: dict[str, object]) -> dict。overrides 的 key 是点号路径;值为 None 表示删除该路径的叶子 key;其他值写入路径,必要时创建中间 dict;不能修改输入 config。
Standard Answer / Scoring Expectation
Reference tests:
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}}
assert solution.solve({'a':1}, {'a.b':2}) == {'a': {'b': 2}}
Output
```python
import copy

def solve(config: dict, overrides: dict[str, object]) -> dict:
    result = copy.deepcopy(config)
    
    for path, value in overrides.items():
        parts = path.split('.')
        current = result
        
        # 遍历到倒数第二个部分
        for i, part in enumerate(parts[:-1]):
            if part not in current:
                if value is None:
                    break  # 要删除但路径不存在,忽略
                current[part] = {}
            elif not isinstance(current[part], dict):
                if value is None:
                    break  # 要删除但路径不存在,忽略
                current[part] = {}
            current = current[part]
        else:  # 只有正常遍历完所有中间部分才执行
            last_part = parts[-1]
            if value is None:
                # 删除操作
                if isinstance(current, dict) and last_part in current:
                    del current[last_part]
            else:
                # 设置操作
                if not isinstance(current, dict):
                    # 如果当前不是dict,需要回溯并转换为dict
                    # 由于不能修改原config,这里需要重建路径
                    # 但根据题目,这种情况应该不会出现,因为overrides是合理的
                    # 为安全起见,我们直接跳过或抛出异常,但这里选择跳过
                    continue
                current[last_part] = value
            continue
        
        # 如果break跳出循环,且value不是None,需要创建完整路径
        if value is not None:
            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
```
challenge-coding-023 PASS
Suite: coding · Latency: 12686 ms · Cost: $0.000332 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(query: str) -> dict[str, list[str]],解析 URL query string。& 分隔参数;没有 = 的参数值为空字符串;+ 表示空格;%XX 需要按 UTF-8 百分号解码;同名 key 保留所有值的列表。可以使用标准库。
Standard Answer / Scoring Expectation
Reference tests:
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']} 
assert solution.solve('') == {}
Output
```python
from urllib.parse import parse_qs, unquote_plus

def solve(query: str) -> dict[str, list[str]]:
    return parse_qs(query, keep_blank_values=True)
```
challenge-coding-024 FAIL
Suite: coding · Latency: 72872 ms · Cost: $0.000000 · Finish: None
Prompt
只输出 Python 代码,不要解释。实现 solve(html: str) -> bool,校验简化 HTML 标签是否配对。标签形如 <a>、</a>、<br/>,标签名只含小写字母;自闭合标签不入栈;普通文本忽略。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve('<div><br/><p>x</p></div>') is True
assert solution.solve('<a><b></a></b>') is False
assert solution.solve('text<a><b/></a>') is True
Mistake Analysis
Failure type: empty_output
模型正常结束但没有输出任何可评分正文,形成空输出。评分器无法命中答案或关键字段,因此失败。根因是答案生成阶段没有产出内容,而不是评分规则过严。
Output

  
challenge-coding-025 PASS
Suite: coding · Latency: 20995 ms · Cost: $0.000673 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(grid: list[str]) -> int。grid 中 S 是起点,E 是终点,# 是墙,. 可走。每步上下左右移动一格,返回从 S 到 E 的最短步数;不可达返回 -1。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve(['S..','##.','..E']) == 4
assert solution.solve(['S#','##','E.']) == -1
assert solution.solve(['SE']) == 1
Output
```python
from collections import deque

def solve(grid: list[str]) -> int:
    rows, cols = len(grid), len(grid[0])
    start = end = None
    for i in range(rows):
        for j in range(cols):
            if grid[i][j] == 'S':
                start = (i, j)
            elif grid[i][j] == 'E':
                end = (i, j)
    if not start or not end:
        return -1
    
    q = deque([(start[0], start[1], 0)])
    visited = [[False] * cols for _ in range(rows)]
    visited[start[0]][start[1]] = True
    dirs = [(0, 1), (0, -1), (1, 0), (-1, 0)]
    
    while q:
        x, y, steps = q.popleft()
        if (x, y) == end:
            return steps
        for dx, dy in dirs:
            nx, ny = x + dx, y + dy
            if 0 <= nx < rows and 0 <= ny < cols and not visited[nx][ny] and grid[nx][ny] != '#':
                visited[nx][ny] = True
                q.append((nx, ny, steps + 1))
    return -1
```
challenge-coding-026 FAIL
Suite: coding · Latency: 66000 ms · Cost: $0.001633 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(nums: list[int], k: int) -> list[float],返回每个长度为 k 的滑动窗口中位数。k 为奇数时返回中间值;k 为偶数时返回两个中间值平均数。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve([1,3,-1,-3,5,3,6,7], 3) == [1, -1, -1, 3, 5, 6]
assert solution.solve([1,2,3,4], 2) == [1.5, 2.5, 3.5]
Mistake Analysis
Failure type: code_execution_failure
双堆思路方向正确,但懒删除实现没有维护两个堆的“有效元素数量”。窗口滑动时旧元素只记在 `to_remove`,堆的物理长度仍参与 `balance()`,导致堆大小和真实窗口分布不同步;后半段窗口的中位数被旧元素/错误堆顶影响,第一组期望 `[1,-1,-1,3,5,6]`,模型给出后几项偏小。
Output
```python
from heapq import *
from collections import defaultdict

def solve(nums: list[int], k: int) -> list[float]:
    def median(low, high, k):
        if k % 2 == 1:
            return -low[0]
        else:
            return (-low[0] + high[0]) / 2

    low = []   # max-heap (store negative)
    high = []  # min-heap
    delay = defaultdict(int)
    res = []
    size = 0

    for i, num in enumerate(nums):
        # insert
        if not low or num <= -low[0]:
            heappush(low, -num)
        else:
            heappush(high, num)
        size += 1

        # remove out-of-window elements lazily
        if i >= k:
            out = nums[i - k]
            delay[out] += 1
            size -= 1

        # balance heaps
        while len(low) - delay.get(-low[0], 0) > size - (size // 2):
            val = -heappop(low)
            delay[val] -= 1
            if delay[val] == 0:
                del delay[val]
            heappush(high, val)
        while len(high) - delay.get(high[0], 0) > size // 2:
            val = heappop(high)
            delay[val] -= 1
            if delay[val] == 0:
                del delay[val]
            heappush(low, -val)

        # clean delayed elements from heap tops
        while low and delay.get(-low[0], 0) > 0:
            val = -heappop(low)
            delay[val] -= 1
            if delay[val] == 0:
                del delay[val]
        while high and delay.get(high[0], 0) > 0:
            val = heappop(high)
            delay[val] -= 1
            if delay[val] == 0:
                del delay[val]

        # compute median
        if size == k:
            res.append(median(low, high, k))

    return res
```
challenge-coding-027 FAIL
Suite: coding · Latency: 10273 ms · Cost: $0.000352 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(versions: list[str]) -> list[str],按简化语义版本排序。版本为 major.minor.patch 或 major.minor.patch-label;major/minor/patch 按数字比较;同一数字版本下,带 label 的预发布版本低于正式版本;label 按字典序比较。
Standard Answer / Scoring Expectation
Reference tests:
assert solution.solve(['1.0.0','1.0.0-alpha','1.0.1','1.0.0-beta','0.9.9']) == ['0.9.9','1.0.0-alpha','1.0.0-beta','1.0.0','1.0.1']
assert solution.solve(['1.0.10','1.0.2']) == ['1.0.2','1.0.10']
Mistake Analysis
Failure type: code_assertion_failure
版本排序方向写反了。题目要求同一数字版本下预发布版低于正式版,但模型的 key 是 `(numeric, 0 if label is None else 1, label)`,升序排序会把正式版 `1.0.0` 放在 `1.0.0-alpha` 和 `1.0.0-beta` 前面。根因是正式版/预发布版的排序标志位取值反了;应让带 label 的版本排在正式版之前,并为正式版使用可比较的占位 label。
Output
```python
def solve(versions: list[str]) -> list[str]:
    def parse_version(v: str):
        parts = v.split('-', 1)
        numeric = tuple(map(int, parts[0].split('.')))
        label = parts[1] if len(parts) > 1 else None
        return (numeric, 0 if label is None else 1, label)
    
    return sorted(versions, key=parse_version)
```
challenge-coding-028 PASS
Suite: coding · Latency: 15508 ms · Cost: $0.000686 · Finish: stop
Prompt
只输出 Python 代码,不要解释。实现 solve(deps: dict[str, list[str]], changed: list[str]) -> list[str]。deps 表示 package -> 直接依赖。返回所有 changed 包,以及直接或间接依赖 changed 包的包,按字典序排序;只出现在依赖列表中的包也要能作为 changed 包返回。
Standard Answer / Scoring Expectation
Reference tests:
deps={'app':['lib','ui'],'ui':['core'],'lib':['core'],'core':[],'docs':[]}
assert solution.solve(deps, ['core']) == ['app','core','lib','ui']
assert solution.solve({'a':['x']}, ['x']) == ['a','x']
assert solution.solve({'a':['b'], 'b':[]}, ['a']) == ['a']
Output
```python
from collections import deque

def solve(deps: dict[str, list[str]], changed: list[str]) -> list[str]:
    # 构建反向依赖图:被依赖包 -> 依赖它的包
    reverse_graph = {}
    # 初始化所有包(出现在deps键或依赖列表中的包)
    all_packages = set(deps.keys())
    for dependencies in deps.values():
        all_packages.update(dependencies)
    
    # 初始化反向依赖图
    for pkg in all_packages:
        reverse_graph[pkg] = []
    
    # 填充反向依赖图
    for pkg, dependencies in deps.items():
        for dep in dependencies:
            reverse_graph[dep].append(pkg)
    
    # BFS遍历获取所有受影响的包
    affected = set()
    queue = deque(changed)
    
    while queue:
        current = queue.popleft()
        if current in affected:
            continue
        affected.add(current)
        # 将当前包的所有直接依赖者加入队列
        for dependent in reverse_graph.get(current, []):
            if dependent not in affected:
                queue.append(dependent)
    
    # 按字典序排序并返回
    return sorted(affected)
```
challenge-rag-008 PASS
Suite: rag_long_context · Latency: 4476 ms · Cost: $0.000119 · Finish: stop
Prompt
只根据资料回答。

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

问题:下一步应该新增多少题?是否应该立刻跑模型?
Standard Answer / Scoring Expectation
Required phrases: 50、审题
At least one from each group: 不跑 / 不要立刻 / 先不跑 / 不应立刻 / 不应该立刻 / 不应立即 / 不应该立即 / 不应立刻跑 / 不应该立刻跑 / 不应立即跑 / 不应该立即跑
Length guidance (diagnostic only): min=n/a, max=160
Output
下一步应该新增50道题。不应该立刻跑模型,新增题应先生成审题HTML,确认后再跑模型,不要立即消耗API。
challenge-rag-009 PASS
Suite: rag_long_context · Latency: 3299 ms · Cost: $0.000060 · Finish: stop
Prompt
只根据资料回答,不要自行补充。

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

问题:能否根据这份报告判断用户满意度?
Standard Answer / Scoring Expectation
Required phrases: 不能、用户满意度
At least one from each group: 没有包含 / 没有提供 / 资料没有 / 未包含
Forbidden phrases: 可以判断
Length guidance (diagnostic only): min=n/a, max=120
Output
不能,该报告未包含用户满意度调查相关内容,无法据此判断用户满意度。
challenge-rag-010 PASS
Suite: rag_long_context · Latency: 4878 ms · Cost: $0.000078 · Finish: stop
Prompt
只根据资料回答。

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

问题:如果要选低延迟且稳定的生产摘要模型,资料更支持选择哪个?
Standard Answer / Scoring Expectation
Required phrases: B、延迟
At least one from each group: 没有超时 / 无超时
Forbidden phrases: 选择 A、选择 C
Length guidance (diagnostic only): min=n/a, max=160
Output
更支持选择模型B。
理由:模型B平均延迟仅4秒,是三个模型中延迟最低的,且和模型A一样没有超时失败,稳定性符合要求;模型A延迟过高,模型C存在3次API超时,稳定性不足。
challenge-rag-011 PASS
Suite: rag_long_context · Latency: 3746 ms · Cost: $0.000069 · Finish: stop
Prompt
只根据资料回答。

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

问题:如果答案超过 max_chars,但 required 都满足且没有 forbidden,会因为长度直接扣分吗?
Standard Answer / Scoring Expectation
Required phrases: 诊断
At least one from each group: 不扣分 / 不会 / 不会因长度 / 不会因此被扣分 / 不会直接导致扣分 / 不会导致扣分 / 不会导致失败或扣分;length_scored / 长度
Forbidden phrases: 直接失败、必须重跑
Length guidance (diagnostic only): min=n/a, max=140
Output
不会。根据资料,text_rules的max_chars仅作为诊断信息记录,length_scored为false,仅缺少required、required_any或出现forbidden才会导致失败,因此这种情况不会因长度直接扣分。
challenge-rag-012 PASS
Suite: rag_long_context · Latency: 4570 ms · Cost: $0.000110 · Finish: stop
Prompt
只根据资料回答。

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

问题:写文章引用总览结果时,应写 45/50 还是 46/50?
Standard Answer / Scoring Expectation
Required phrases: 46/50
Forbidden phrases: 45/50 更合适、原始结果为准
Length guidance (diagnostic only): min=n/a, max=140
Output
应写46/50。
因为总览index使用rescored JSONL作为展示结果,对应的rescored结果为46/50。
challenge-rag-013 PASS
Suite: rag_long_context · Latency: 21855 ms · Cost: $0.000983 · Finish: stop
Prompt
只根据资料回答。

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

问题:复现评测主要应该依赖哪些记录字段?
Standard Answer / Scoring Expectation
Required phrases: model、prompt_hash、parameters、scorer
Forbidden phrases: chain of thought、训练数据
Length guidance (diagnostic only): min=n/a, max=200
Output
复现评测主要依赖的记录字段为:model、case_id、prompt_hash、parameters、scorer details。
其中model指定待复现的模型,case_id对应测试用例保证样本匹配,prompt_hash用于校验输入prompt与原评测完全一致,parameters保证模型推理参数配置与原评测一致,scorer details保证评测打分规则与原评测一致。
challenge-rag-014 PASS
Suite: rag_long_context · Latency: 2984 ms · Cost: $0.000068 · Finish: stop
Prompt
只根据资料回答。

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

问题:当前总览页对应的 token limit 是多少?
Standard Answer / Scoring Expectation
Required phrases: 16384
Forbidden phrases: 4096
Length guidance (diagnostic only): min=n/a, max=100
Output
16384。
依据资料B可知ability mode的16384对应max_tokens为16384,结合资料C当前总览页展示的是ability16384的结果,因此对应token limit为16384。
challenge-rag-015 PASS
Suite: rag_long_context · Latency: 4739 ms · Cost: $0.000116 · Finish: stop
Prompt
只根据资料回答。

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

问题:哪类失败更需要人工复查评分规则?回答时也说明 coding-004 是否属于这种情况。
Standard Answer / Scoring Expectation
Required phrases: 人工复查、coding-004
At least one from each group: rag-006 / 规则 / 评分规则 / 同义表达;不属于 / 不是 / 不需要
Length guidance (diagnostic only): min=n/a, max=180
Output
更需要人工复查评分规则的是规则未将int类型视作“整数”的同义表达导致的失败。coding-004的失败根因是代码运行时将字符串key强转int引发的ValueError,不属于这种情况。
challenge-rag-016 PASS
Suite: rag_long_context · Latency: 3538 ms · Cost: $0.000041 · Finish: stop
Prompt
只根据资料回答。

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

问题:能否从 usage 字段判断供应商利润率?
Standard Answer / Scoring Expectation
Required phrases: 不能、利润率
At least one from each group: 不包含 / 没有
Forbidden phrases: 可以判断
Length guidance (diagnostic only): min=n/a, max=120
Output
不能。
usage字段仅包含prompt_tokens、completion_tokens、reasoning_tokens和cost,没有供应商真实利润率相关数据,也没有供应商内部成本信息,无法据此判断供应商利润率。
challenge-rag-017 PASS
Suite: rag_long_context · Latency: 15947 ms · Cost: $0.000470 · Finish: stop
Prompt
只根据资料回答。

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

问题:index 页是否应该展示旧版本结果?当前展示范围是什么?
Standard Answer / Scoring Expectation
Required phrases: v0.2-challenge50、ability16384
At least one from each group: 不应该 / 不展示 / 未展示 / 不显示 / 均不显示 / 不应展示;旧版本 / 之前的版本
Length guidance (diagnostic only): min=n/a, max=160
Output
1. 现有资料未提及index页是否应该展示旧版本结果的相关判定内容,无法从给定资料得出对应结论。
2. 当前index页的展示范围:仅展示v0.2-challenge50版本的50道题的结果,且相关token limit统一为ability16384,不展示旧版本结果以及token limit为ability4096的结果。
challenge-rag-018 PASS
Suite: rag_long_context · Latency: 4494 ms · Cost: $0.000106 · Finish: stop
Prompt
只根据资料回答。

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

问题:这次失败应如何归因?
Standard Answer / Scoring Expectation
Required phrases: 输出
At least one from each group: 截断 / length / token
Length guidance (diagnostic only): min=n/a, max=140
Output
本次失败应归因为:模型输出因长度限制被截断(finish_reason为length),未生成完整的可执行solve函数,导致测试时模块不存在solve属性触发报错,不属于算法逻辑错误。
challenge-debugging-015 PASS
Suite: debugging · Latency: 89791 ms · Cost: $0.000422 · Finish: stop
Prompt
下面代码期望 funcs[0]()、funcs[1]()、funcs[2]() 分别返回 0、1、2,但实际都会返回 2。请指出根因,并给出最小修复。最后单独一行写 FIX: <修复后的 append 行>。

```python
funcs = []
for i in range(3):
    funcs.append(lambda: i)
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*funcs\.append\(lambda\s+i=i\s*:\s*i\)\s*`?
Output
根因:lambda 函数捕获的是变量 `i` 的引用而非其值。循环结束后 `i` 的值为 2,所有 lambda 在调用时都使用该值,因此返回相同的结果。

最小修复:在定义 lambda 时为参数设置默认值,以捕获当前循环值。

FIX: funcs.append(lambda i=i: i)
challenge-debugging-016 PASS
Suite: debugging · Latency: 10162 ms · Cost: $0.000299 · Finish: stop
Prompt
下面 context manager 期望异常继续向外抛出,但实际异常被吞掉。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的 return 行>。

```python
class Span:
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc, tb):
        return True
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*return(?:\s+False|\s+None)?\s*`?
Output
Bug: `__exit__` 方法返回 `True`,这表示抑制异常,导致异常被吞掉,无法向外抛出。

最小修复:将 `return True` 改为 `return False`,使异常能够正常传播。

FIX: return False
challenge-debugging-017 PASS
Suite: debugging · Latency: 14790 ms · Cost: $0.000456 · Finish: stop
Prompt
下面代码期望每个 Bag 实例都有独立列表,但不同实例会共享 items。请指出 bug,并给出最小修复。最后单独一行写 FIX: <新增到 __init__ 中的赋值行>。

```python
class Bag:
    items = []
    def add(self, x):
        self.items.append(x)
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*self\.items\s*=\s*\[\]\s*`?
Output
Bug: 类属性 `items` 被所有实例共享,导致不同实例操作同一个列表。

最小修复:在类中添加 `__init__` 方法,并在其中为实例初始化 `self.items = []`,同时移除类属性 `items = []`(或保留但不会被实例使用)。

修复后代码:
```python
class Bag:
    def __init__(self):
        self.items = []
    def add(self, x):
        self.items.append(x)
```

FIX: self.items = []
challenge-debugging-018 PASS
Suite: debugging · Latency: 12456 ms · Cost: $0.000381 · Finish: stop
Prompt
下面代码期望每次不传 ts 时使用当前时间,但默认时间只会在函数定义时计算一次。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的函数定义行>。

```python
from datetime import datetime

def mark(ts=datetime.utcnow()):
    return ts.isoformat()
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*def\s+mark\(ts=None\)\s*:
Output
Bug: 默认参数 `ts=datetime.utcnow()` 在函数定义时计算一次,导致所有未传递 `ts` 的调用都使用相同的时间戳(函数定义时的时间),而不是每次调用时的当前时间。

最小修复: 将默认参数改为 `None`,在函数内部检查 `ts` 是否为 `None`,如果是则设置为当前时间。

FIX: def mark(ts=None):
challenge-debugging-019 PASS
Suite: debugging · Latency: 5262 ms · Cost: $0.000090 · Finish: stop
Prompt
下面代码期望返回小写字符串,但实际返回的是方法对象。请指出 bug,并给出最小修复。最后单独一行写 FIX: <修复后的 return 行>。

```python
def normalize(s):
    return s.strip().lower
```
Standard Answer / Scoring Expectation
Expected regex pattern:
FIX:\s*`?\s*return\s+s\.strip\(\)\.lower\(\)\s*`?
Output
### bug说明
`lower`是字符串类型的方法,代码中未对其加调用括号,仅返回了`lower`方法的引用对象,而非调用该方法后得到的小写字符串,因此实际返回的是方法对象而非预期结果。

### 最小修复
给`lower`加上方法调用括号即可。

FIX: return s.strip().lower()
challenge-if-006 PASS
Suite: instruction_following · Latency: 5746 ms · Cost: $0.000117 · Finish: stop
Prompt
只输出 JSON 对象,不要 Markdown。字段 version 必须是 "v0.3";字段 ready 必须是 true;字段 cases 必须是正好两个对象组成的数组。cases 中每个对象只能包含 id、weight、active 三个字段;id 是字符串且匹配 case-1 或 case-2;weight 是整数;active 是布尔值。
Standard Answer / Scoring Expectation
Expected JSON schema:
{
  "type": "object",
  "required": [
    "version",
    "ready",
    "cases"
  ],
  "additionalProperties": false,
  "properties": {
    "version": {
      "type": "string",
      "const": "v0.3"
    },
    "ready": {
      "type": "boolean",
      "const": true
    },
    "cases": {
      "type": "array",
      "minItems": 2,
      "maxItems": 2,
      "items": {
        "type": "object",
        "required": [
          "id",
          "weight",
          "active"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^case-[12]$"
          },
          "weight": {
            "type": "integer"
          },
          "active": {
            "type": "boolean"
          }
        }
      }
    }
  }
}
Output
{"version":"v0.3","ready":true,"cases":[{"id":"case-1","weight":10,"active":true},{"id":"case-2","weight":20,"active":false}]}
challenge-zh-writing-004 PASS
Suite: chinese_writing · Latency: 8937 ms · Cost: $0.000251 · Finish: stop
Prompt
写一段不超过 160 个汉字的公众号小结,主题是“为什么 v0.3 要扩到 100 题”。必须包含“推理题”“边界条件”“人工复查”,不能出现“排行榜”。
Standard Answer / Scoring Expectation
Required phrases: 推理题、边界条件、人工复查
Forbidden phrases: 排行榜
Length guidance (diagnostic only): min=n/a, max=160
Output
各位小伙伴好~本次v0.3版本题库扩容至100题,核心是为了更充分覆盖各类推理题场景,精准捕捉模型在复杂边界条件下的表现差异,避免小样本测试的偶然性。所有新增题目均经过多轮人工复查,确保题型合理、难度梯度清晰,能更真实反映模型能力边界,为后续迭代提供更可靠的参考依据。

Case Details

CaseSuiteStatusFailure TypeScoreLatencyCostFinish
challenge-coding-001codingPASS-1.011672 ms$0.000256stop
challenge-coding-002codingPASS-1.016930 ms$0.000433stop
challenge-coding-003codingPASS-1.026987 ms$0.000903stop
challenge-coding-004codingFAILruntime_type_assumption0.018759 ms$0.000608stop
challenge-coding-005codingPASS-1.064912 ms$0.001263stop
challenge-coding-006codingPASS-1.012053 ms$0.000327stop
challenge-coding-007codingPASS-1.030432 ms$0.001143stop
challenge-coding-008codingPASS-1.040275 ms$0.000345stop
challenge-debugging-001debuggingFAILregex_miss0.023462 ms$0.000851stop
challenge-debugging-002debuggingPASS-1.06341 ms$0.000142stop
challenge-debugging-003debuggingFAILregex_miss0.014875 ms$0.000404stop
challenge-debugging-004debuggingPASS-1.07383 ms$0.000209stop
challenge-debugging-005debuggingFAILregex_miss0.017203 ms$0.000641stop
challenge-debugging-006debuggingPASS-1.04983 ms$0.000139stop
challenge-debugging-007debuggingPASS-1.010210 ms$0.000307stop
challenge-debugging-008debuggingFAILmissing_accepted_answer0.010243 ms$0.000311stop
challenge-reasoning-001reasoningPASS-1.04295 ms$0.000102stop
challenge-reasoning-002reasoningPASS-1.041169 ms$0.001576stop
challenge-reasoning-003reasoningPASS-1.08445 ms$0.000263stop
challenge-reasoning-004reasoningPASS-1.05730 ms$0.000139stop
challenge-reasoning-005reasoningPASS-1.09423 ms$0.000368stop
challenge-rag-001rag_long_contextFAILmissing_required_info0.08902 ms$0.000257stop
challenge-rag-002rag_long_contextPASS-1.08368 ms$0.000301stop
challenge-rag-003rag_long_contextPASS-1.035678 ms$0.001750stop
challenge-rag-004rag_long_contextPASS-1.04746 ms$0.000149stop
challenge-if-001instruction_followingPASS-1.05365 ms$0.000113stop
challenge-if-002instruction_followingPASS-1.04793 ms$0.000129stop
challenge-if-003instruction_followingPASS-1.014001 ms$0.000433stop
challenge-zh-writing-001chinese_writingPASS-1.011071 ms$0.000326stop
challenge-zh-writing-002chinese_writingPASS-1.07306 ms$0.000187stop
challenge-coding-009codingPASS-1.09049 ms$0.000253stop
challenge-coding-010codingPASS-1.038860 ms$0.001099stop
challenge-coding-011codingPASS-1.04758 ms$0.000096stop
challenge-coding-012codingFAILempty_output0.086437 ms$0.000000None
challenge-coding-013codingPASS-1.05728 ms$0.000106stop
challenge-coding-014codingPASS-1.074383 ms$0.002759stop
challenge-debugging-009debuggingPASS-1.010915 ms$0.000276stop
challenge-debugging-010debuggingPASS-1.050728 ms$0.001647stop
challenge-debugging-011debuggingPASS-1.09977 ms$0.000282stop
challenge-debugging-012debuggingPASS-1.010267 ms$0.000258stop
challenge-debugging-013debuggingPASS-1.010390 ms$0.000287stop
challenge-debugging-014debuggingPASS-1.010740 ms$0.000319stop
challenge-reasoning-006reasoningFAILempty_output0.072846 ms$0.000000None
challenge-reasoning-007reasoningPASS-1.03966 ms$0.000055stop
challenge-rag-005rag_long_contextPASS-1.04568 ms$0.000116stop
challenge-rag-006rag_long_contextFAILmissing_required_info0.014585 ms$0.000325stop
challenge-rag-007rag_long_contextPASS-1.09033 ms$0.000192stop
challenge-if-004instruction_followingPASS-1.04573 ms$0.000077stop
challenge-if-005instruction_followingPASS-1.032571 ms$0.000840stop
challenge-zh-writing-003chinese_writingPASS-1.012250 ms$0.000402stop
challenge-reasoning-008reasoningPASS-1.08363 ms$0.000348stop
challenge-reasoning-009reasoningPASS-1.029112 ms$0.001248stop
challenge-reasoning-010reasoningPASS-1.010309 ms$0.000360stop
challenge-reasoning-011reasoningPASS-1.05962 ms$0.000152stop
challenge-reasoning-012reasoningPASS-1.020207 ms$0.000986stop
challenge-reasoning-013reasoningPASS-1.05529 ms$0.000111stop
challenge-reasoning-014reasoningPASS-1.07091 ms$0.000120stop
challenge-reasoning-015reasoningPASS-1.09500 ms$0.000402stop
challenge-reasoning-016reasoningPASS-1.048610 ms$0.001876stop
challenge-reasoning-017reasoningPASS-1.017736 ms$0.000760stop
challenge-reasoning-018reasoningPASS-1.05483 ms$0.000163stop
challenge-reasoning-019reasoningPASS-1.013902 ms$0.000493stop
challenge-reasoning-020reasoningFAILempty_output_length0.0170583 ms$0.004268length
challenge-reasoning-021reasoningPASS-1.031109 ms$0.001120stop
challenge-reasoning-022reasoningPASS-1.014092 ms$0.000466stop
challenge-reasoning-023reasoningPASS-1.010203 ms$0.000329stop
challenge-reasoning-024reasoningPASS-1.06329 ms$0.000155stop
challenge-reasoning-025reasoningPASS-1.04054 ms$0.000079stop
challenge-coding-015codingPASS-1.09927 ms$0.000262stop
challenge-coding-016codingFAILcode_syntax_error0.027866 ms$0.000527stop
challenge-coding-017codingPASS-1.06650 ms$0.000145stop
challenge-coding-018codingPASS-1.013249 ms$0.000471stop
challenge-coding-019codingPASS-1.012757 ms$0.000353stop
challenge-coding-020codingPASS-1.017248 ms$0.000574stop
challenge-coding-021codingFAILcode_assertion_failure0.07754 ms$0.000210stop
challenge-coding-022codingPASS-1.032733 ms$0.001048stop
challenge-coding-023codingPASS-1.012686 ms$0.000332stop
challenge-coding-024codingFAILempty_output0.072872 ms$0.000000None
challenge-coding-025codingPASS-1.020995 ms$0.000673stop
challenge-coding-026codingFAILcode_execution_failure0.066000 ms$0.001633stop
challenge-coding-027codingFAILcode_assertion_failure0.010273 ms$0.000352stop
challenge-coding-028codingPASS-1.015508 ms$0.000686stop
challenge-rag-008rag_long_contextPASS-1.04476 ms$0.000119stop
challenge-rag-009rag_long_contextPASS-1.03299 ms$0.000060stop
challenge-rag-010rag_long_contextPASS-1.04878 ms$0.000078stop
challenge-rag-011rag_long_contextPASS-1.03746 ms$0.000069stop
challenge-rag-012rag_long_contextPASS-1.04570 ms$0.000110stop
challenge-rag-013rag_long_contextPASS-1.021855 ms$0.000983stop
challenge-rag-014rag_long_contextPASS-1.02984 ms$0.000068stop
challenge-rag-015rag_long_contextPASS-1.04739 ms$0.000116stop
challenge-rag-016rag_long_contextPASS-1.03538 ms$0.000041stop
challenge-rag-017rag_long_contextPASS-1.015947 ms$0.000470stop
challenge-rag-018rag_long_contextPASS-1.04494 ms$0.000106stop
challenge-debugging-015debuggingPASS-1.089791 ms$0.000422stop
challenge-debugging-016debuggingPASS-1.010162 ms$0.000299stop
challenge-debugging-017debuggingPASS-1.014790 ms$0.000456stop
challenge-debugging-018debuggingPASS-1.012456 ms$0.000381stop
challenge-debugging-019debuggingPASS-1.05262 ms$0.000090stop
challenge-if-006instruction_followingPASS-1.05746 ms$0.000117stop
challenge-zh-writing-004chinese_writingPASS-1.08937 ms$0.000251stop