DeepSeek V4.1 Flash 1017 实测:速度、价格与代码边界

36 次官方 API 实测:默认与关闭思考的短文本各 15/15,正文首响中位数 1.113 秒与 0.661 秒;公开两次代码失败、完整参数和原始回答。

更新日期:2026-10-18

TOKRACE 原创测试与分析 · 实测日期:2026 年 10 月 18 日。

先看结论:短题可靠,代码边界仍需检查

TOKRACE 于 2026 年 10 月 18 日直接调用 DeepSeek 官方 API,对同一组 15 道中文短文本题分别开启默认思考、关闭思考,再测试 3 道 JavaScript 函数题,共 36 次请求。没有重试或丢弃失败记录。

两组短文本均为 15/15;默认思考正文首响中位数 1.113 秒,关闭思考 0.661 秒。代码任务两组均为 2/3:金额解析题分别出现预算耗尽与前导零处理错误。短题通过率不能代表复杂推理、完整项目开发或 Agent 能力。

实际使用建议:固定格式抽取可先尝试关闭思考;代码必须用业务边界测试验收,并为思考预算不足设置明确的失败处理。这是基于本次小样本的分析,不是普遍排名。

DeepSeek V4.1 Flash 1017 是什么?

这是 2026 年 10 月 17 日的 V4.1 Flash 更新。官方 API 继续使用 deepseek-flash;本次响应也只返回该别名。1017 的版本归属依据官方更新日志,不能通过这个可变别名永久锁定同一检查点。

官方规格列出 1M 上下文、384K 最大输出、图片输入与工具调用;权重仓库采用 MIT 许可。这里的规格属于来源信息,本次只验证短文本与函数输出。官方规格 · 官方模型卡

不要把本站 9 月的临时预览 ID deepseek-v4.1-flash-expires-on-0910 当作这次正式接口。旧预览页保留历史说明,当前入口见模型页。

官方公布了哪些变化?

下面是厂商模型卡公布的成绩,不是 TOKRACE 复现结果。

基准9 月版本1017 版本
Terminal-Bench 4.031.242.3
DeepSWE v1.174.277.0
ProgramBench20.329.1

官方还表示任务耗时与输出长度下降。Terminal-Bench 使用 Claude Code,DeepSWE 使用 Mini-SWE-V2;框架和题目影响结果。本站没有可固定调用的 9 月基线,因此不能从本次测试得出“比旧版快多少”。数据来源与评测注释

测试怎么跑:参数、路径与计时口径

文本题采用 tasks-2026-09-26.1 固定任务:JSON 信息抽取、严格格式约束、基于材料的问答,各 5 题。每题每模式仅调用一次,两模式先后顺序按题交替;题目、期望值和检查规则在调用前确定。代码题检查金额解析、特殊键去重、区间合并。

从本地 macOS 客户端直连 https://api.deepseek.com/v1/chat/completions,串行流式请求,单次超时 120 秒。网络出口与服务区域未确认;这些结果不混入香港节点标准报告或社区测速排行榜。

提交 temperature=0、文本 max_tokens=2048、代码 max_tokens=4096;默认组省略思考参数,另一组提交 thinking: {type: "disabled"}。官方默认开启思考、effort 为 high,且思考模式忽略 temperature,所以不能把默认组称为确定性采样。参数说明

正文首响从发起请求计时到第一段非空正文,不把思考内容计作正文;总耗时到流结束。短输出容易受网络和缓冲影响,因此不从总 completion token 推算正文 tok/s。缓存未预热或清空,服务负载未控制。

实测结果:通过率、首响与 token

短文本指标(每组 15 次)默认思考关闭思考
JSON 抽取5/55/5
格式约束5/55/5
材料问答5/55/5
正文首响中位数1.113 秒0.661 秒
请求总耗时中位数1.153 秒0.780 秒
completion token 合计1145214
API 报告的思考 token 合计920关闭;未返回此字段

completion token 包含思考消耗,不能全部算成用户看到的答案。两组使用相同题目,但上下文封装和 token 记账可能随模式不同;这不是严格隔离的性能实验。15 道题只覆盖少量短文本模式,也没有多次采样来估计稳定性。

代码题:两次金额解析失败值得看

任务默认思考关闭思考
金额字符串转整数分截断,无代码完成,但未通过
按 id 保序去重通过通过
闭区间合并与不可变输入通过通过

关闭思考的金额题:输入 "0001.02" 应返回 102,模型的正则只接受单个零或非零开头的整数,因此返回 null。题目没有禁止前导零。这是自行增加约束造成的实际错误。查看原题、代码与检查

默认思考的金额题:finish_reason=length,4096 个 completion token 全部记为 reasoning,18.646 秒后结束,正文为空。18 项金额检查均未执行;这证明本次 4096 token 预算下未完成,不证明提高预算后仍不能解决。查看完整记录

每个模式预设 26 项检查:金额 18、去重 3、区间 5。检查脚本遇到首个错误即停止,不能把后续未执行检查算成通过。两组各有 2 道完整通过的函数题;这里报告任务级 2/3,而不制造逐断言通过率。

API 价格与这次测试花费

官方称此次升级价格不变。下面单位均为 美元 / 百万 token,查询日期为 2026-10-18。

计费类型非高峰高峰
缓存命中输入0.0030.006
缓存未命中输入0.150.30
输出0.601.20

这 36 次调用发生在周日,按官方非高峰价和 API 返回的缓存、输入、输出 usage 估算,共 $0.004595,包括截断失败请求。它是计算值,不是账户账单;未调用 Search/Fetch。官方时段与计费规则

TOKRACE 体验额度与上游收费不同。页面的免费复测沿用本站现有额度;API 消费仍由对应凭据承担。

常见问题与复测建议

API model 应该填什么? 填 deepseek-flash,完整展示名 DeepSeek-V4.1-Flash-1017 不是本次请求使用的 model 字段。

能证明新版本比旧版更强吗? 不能。官方成绩与本站小任务首测分开呈现;本次没有旧版配对基线,没有验证百万上下文、视觉、工具调用或完整仓库开发。

怎样复测? 下方按钮带入第一道抽取题、默认思考配置和官方接入点,在竞速场点击开始才会调用。本站共享入口使用服务端默认思考配置;要复现关闭思考组,请使用自己的官方 API Key,并提交 JSON 中记录的 thinking.type=disabled。完整题目、参数、usage、原始正文和代码检查均可下载。

查看测试方法与限制、全部实测报告和模型身份页。

原题、原始回答与代码检查

下载全部 36 次请求记录(JSON)

联系信息抽取 1 · 默认思考 · 通过

2026-10-18T01:55:12.653Z · 总耗时:1.421s · 正文首响:1.293s · 输入 / 总输出 / 思考 token:105 / 136 / 117 · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:林桐,28 岁,目前居住在杭州。未提供电子邮件。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"林桐","age":28,"city":"杭州","email":null}
联系信息抽取 1 · 关闭思考 · 通过

2026-10-18T01:55:14.076Z · 总耗时:0.764s · 正文首响:0.646s · 输入 / 总输出 / 思考 token:79 / 18 / — · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:林桐,28 岁,目前居住在杭州。未提供电子邮件。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"林桐","age":28,"city":"杭州","email":null}
联系信息抽取 2 · 关闭思考 · 通过

2026-10-18T01:55:14.841Z · 总耗时:0.658s · 正文首响:0.513s · 输入 / 总输出 / 思考 token:81 / 20 / — · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:李明,36 岁,目前居住在成都。电子邮件为 li@example.test。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"李明","age":36,"city":"成都","email":"li@example.test"}
联系信息抽取 2 · 默认思考 · 通过

2026-10-18T01:55:15.500Z · 总耗时:1.153s · 正文首响:1.106s · 输入 / 总输出 / 思考 token:107 / 68 / 47 · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:李明,36 岁,目前居住在成都。电子邮件为 li@example.test。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"李明","age":36,"city":"成都","email":"li@example.test"}
联系信息抽取 3 · 默认思考 · 通过

2026-10-18T01:55:16.653Z · 总耗时:0.827s · 正文首响:0.777s · 输入 / 总输出 / 思考 token:105 / 66 / 47 · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:陈夏,22 岁,目前居住在南京。未提供电子邮件。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"陈夏","age":22,"city":"南京","email":null}
联系信息抽取 3 · 关闭思考 · 通过

2026-10-18T01:55:17.481Z · 总耗时:0.675s · 正文首响:0.577s · 输入 / 总输出 / 思考 token:79 / 18 / — · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:陈夏,22 岁,目前居住在南京。未提供电子邮件。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"陈夏","age":22,"city":"南京","email":null}
联系信息抽取 4 · 关闭思考 · 通过

2026-10-18T01:55:18.157Z · 总耗时:0.588s · 正文首响:0.487s · 输入 / 总输出 / 思考 token:83 / 21 / — · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:周舟,41 岁,目前居住在苏州。电子邮件为 zhou@example.test。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"周舟","age":41,"city":"苏州","email":"zhou@example.test"}
联系信息抽取 4 · 默认思考 · 通过

2026-10-18T01:55:18.747Z · 总耗时:1.334s · 正文首响:1.255s · 输入 / 总输出 / 思考 token:109 / 103 / 81 · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:周舟,41 岁,目前居住在苏州。电子邮件为 zhou@example.test。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"周舟","age":41,"city":"苏州","email":"zhou@example.test"}
联系信息抽取 5 · 默认思考 · 通过

2026-10-18T01:55:20.082Z · 总耗时:0.795s · 正文首响:0.734s · 输入 / 总输出 / 思考 token:105 / 63 / 44 · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:吴雨,30 岁,目前居住在武汉。未提供电子邮件。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"吴雨","age":30,"city":"武汉","email":null}
联系信息抽取 5 · 关闭思考 · 通过

2026-10-18T01:55:20.879Z · 总耗时:0.766s · 正文首响:0.575s · 输入 / 总输出 / 思考 token:79 / 18 / — · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:吴雨,30 岁,目前居住在武汉。未提供电子邮件。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"吴雨","age":30,"city":"武汉","email":null}
保序去重 · 关闭思考 · 通过

2026-10-18T01:55:21.645Z · 总耗时:0.701s · 正文首响:0.655s · 输入 / 总输出 / 思考 token:44 / 8 / — · 结束原因:stop

题目

把以下编号去重并保持首次出现的顺序:B2,A1,B2,C3,A1,D4。只输出用英文逗号连接的编号,不要空格、标题或解释。

原始回答

B2,A1,C3,D4
保序去重 · 默认思考 · 通过

2026-10-18T01:55:22.347Z · 总耗时:1.199s · 正文首响:1.169s · 输入 / 总输出 / 思考 token:70 / 49 / 40 · 结束原因:stop

题目

把以下编号去重并保持首次出现的顺序:B2,A1,B2,C3,A1,D4。只输出用英文逗号连接的编号,不要空格、标题或解释。

原始回答

B2,A1,C3,D4
限定字段 · 默认思考 · 通过

2026-10-18T01:55:23.547Z · 总耗时:1.046s · 正文首响:1.019s · 输入 / 总输出 / 思考 token:73 / 39 / 29 · 结束原因:stop

题目

仅输出 JSON 对象,且恰好包含 status 和 count 两个字段。status 的值必须为字符串 "ready",count 必须为数字 3。不要 Markdown、解释或额外字段。

原始回答

{"status":"ready","count":3}
限定字段 · 关闭思考 · 通过

2026-10-18T01:55:24.595Z · 总耗时:0.841s · 正文首响:0.816s · 输入 / 总输出 / 思考 token:47 / 9 / — · 结束原因:stop

题目

仅输出 JSON 对象,且恰好包含 status 和 count 两个字段。status 的值必须为字符串 "ready",count 必须为数字 3。不要 Markdown、解释或额外字段。

原始回答

{"status":"ready","count":3}
严格排序 · 关闭思考 · 通过

2026-10-18T01:55:25.437Z · 总耗时:0.780s · 正文首响:0.674s · 输入 / 总输出 / 思考 token:36 / 9 / — · 结束原因:stop

题目

将数值 12、3、25、8 按从小到大排序。只输出 JSON 数组,元素为数字。不要解释或代码围栏。

原始回答

[3,8,12,25]
严格排序 · 默认思考 · 通过

2026-10-18T01:55:26.217Z · 总耗时:1.106s · 正文首响:1.053s · 输入 / 总输出 / 思考 token:62 / 47 / 37 · 结束原因:stop

题目

将数值 12、3、25、8 按从小到大排序。只输出 JSON 数组,元素为数字。不要解释或代码围栏。

原始回答

[3,8,12,25]
大小写与换行 · 默认思考 · 通过

2026-10-18T01:55:27.325Z · 总耗时:1.058s · 正文首响:1.053s · 输入 / 总输出 / 思考 token:66 / 37 / 28 · 结束原因:stop

题目

按原顺序将 apple、pear、plum 转为英文大写,每行一个单词。总共三行,不要编号、标点、空行或解释。

原始回答

APPLE
PEAR
PLUM
大小写与换行 · 关闭思考 · 通过

2026-10-18T01:55:28.383Z · 总耗时:0.838s · 正文首响:0.716s · 输入 / 总输出 / 思考 token:40 / 8 / — · 结束原因:stop

题目

按原顺序将 apple、pear、plum 转为英文大写,每行一个单词。总共三行,不要编号、标点、空行或解释。

原始回答

APPLE
PEAR
PLUM
指定分隔符 · 关闭思考 · 通过

2026-10-18T01:55:29.221Z · 总耗时:0.628s · 正文首响:0.515s · 输入 / 总输出 / 思考 token:54 / 11 / — · 结束原因:stop

题目

提取下面三个工单号,保持顺序:工单 TX-103 已关闭;工单 TX-207 正在处理;工单 TX-309 待分配。只用英文竖线连接三个编号,不要空格或解释。

原始回答

TX-103|TX-207|TX-309
指定分隔符 · 默认思考 · 通过

2026-10-18T01:55:29.850Z · 总耗时:1.476s · 正文首响:1.471s · 输入 / 总输出 / 思考 token:80 / 84 / 72 · 结束原因:stop

题目

提取下面三个工单号,保持顺序:工单 TX-103 已关闭;工单 TX-207 正在处理;工单 TX-309 待分配。只用英文竖线连接三个编号,不要空格或解释。

原始回答

TX-103|TX-207|TX-309
材料问答 1 · 默认思考 · 通过

2026-10-18T01:55:31.328Z · 总耗时:1.336s · 正文首响:1.334s · 输入 / 总输出 / 思考 token:130 / 95 / 80 · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:北区仓库今天收到 12 件货物,其中 3 件损坏,不可使用。下一次送货安排在周二。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":9,"nextDelivery":"周二","manager":null}
材料问答 1 · 关闭思考 · 通过

2026-10-18T01:55:32.665Z · 总耗时:0.870s · 正文首响:0.866s · 输入 / 总输出 / 思考 token:104 / 14 / — · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:北区仓库今天收到 12 件货物,其中 3 件损坏,不可使用。下一次送货安排在周二。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":9,"nextDelivery":"周二","manager":null}
材料问答 2 · 关闭思考 · 通过

2026-10-18T01:55:33.537Z · 总耗时:0.826s · 正文首响:0.697s · 输入 / 总输出 / 思考 token:103 / 18 / — · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:南区仓库今天收到 20 件货物,其中 4 件损坏,不可使用。下一次送货安排在周三。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable": 16, "nextDelivery": "周三", "manager": null}
材料问答 2 · 默认思考 · 通过

2026-10-18T01:55:34.364Z · 总耗时:1.315s · 正文首响:1.260s · 输入 / 总输出 / 思考 token:129 / 130 / 115 · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:南区仓库今天收到 20 件货物,其中 4 件损坏,不可使用。下一次送货安排在周三。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":16,"nextDelivery":"周三","manager":null}
材料问答 3 · 默认思考 · 通过

2026-10-18T01:55:35.680Z · 总耗时:1.044s · 正文首响:1.020s · 输入 / 总输出 / 思考 token:130 / 58 / 43 · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:东区仓库今天收到 18 件货物,其中 6 件损坏,不可使用。下一次送货安排在周四。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":12,"nextDelivery":"周四","manager":null}
材料问答 3 · 关闭思考 · 通过

2026-10-18T01:55:36.726Z · 总耗时:0.819s · 正文首响:0.661s · 输入 / 总输出 / 思考 token:104 / 14 / — · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:东区仓库今天收到 18 件货物,其中 6 件损坏,不可使用。下一次送货安排在周四。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":12,"nextDelivery":"周四","manager":null}
材料问答 4 · 关闭思考 · 通过

2026-10-18T01:55:37.546Z · 总耗时:1.166s · 正文首响:1.022s · 输入 / 总输出 / 思考 token:104 / 14 / — · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:西区仓库今天收到 25 件货物,其中 5 件损坏,不可使用。下一次送货安排在周五。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":20,"nextDelivery":"周五","manager":null}
材料问答 4 · 默认思考 · 通过

2026-10-18T01:55:38.713Z · 总耗时:1.136s · 正文首响:1.113s · 输入 / 总输出 / 思考 token:130 / 67 / 52 · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:西区仓库今天收到 25 件货物,其中 5 件损坏,不可使用。下一次送货安排在周五。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":20,"nextDelivery":"周五","manager":null}
材料问答 5 · 默认思考 · 通过

2026-10-18T01:55:39.850Z · 总耗时:2.686s · 正文首响:2.672s · 输入 / 总输出 / 思考 token:130 / 103 / 88 · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:中区仓库今天收到 16 件货物,其中 2 件损坏,不可使用。下一次送货安排在周一。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":14,"nextDelivery":"周一","manager":null}
材料问答 5 · 关闭思考 · 通过

2026-10-18T01:55:42.538Z · 总耗时:0.887s · 正文首响:0.772s · 输入 / 总输出 / 思考 token:104 / 14 / — · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:中区仓库今天收到 16 件货物,其中 2 件损坏,不可使用。下一次送货安排在周一。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":14,"nextDelivery":"周一","manager":null}
金额转换:拒绝非法输入,避免浮点误差 · 关闭思考 · 未通过 · 18 项预定检查

2026-10-18T01:55:43.425Z · 总耗时:1.034s · 正文首响:0.938s · 结束原因:stop

输入 / 总输出 / 思考 token:106 / 141 / —

题目

写 JavaScript 函数 parseCents(value)。value 必须是字符串:允许两端空白;只接受非负十进制金额,整数部分至少一位,小数最多两位;拒绝指数写法、符号、千分位、Infinity、空串、超过两位小数。返回整数分数,超过 Number.MAX_SAFE_INTEGER 则返回 null。非法类型或格式返回 null。不能把非法值四舍五入成合法值。只输出函数代码,不要 Markdown 或解释。

原始代码

function parseCents(value) {
  if (typeof value !== "string") return null;
  const s = value.trim();
  if (s === "") return null;
  if (!/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/.test(s)) return null;
  const parts = s.split(".");
  const whole = parts[0];
  const frac = parts[1] || "";
  const centsStr = whole + (frac + "00").slice(0, 2);
  const cents = Number(centsStr);
  if (!Number.isSafeInteger(cents)) return null;
  return cents;
}

可执行检查

const cases=[['0',0],[' 12.30 ',1230],['0.29',29],['1.2',120],['0001.02',102],['1.234',null],['-1',null],['+1',null],['1e3',null],['',null],['.5',null],['1.',null],['Infinity',null],['1,000',null],[null,null],[1,null],['90071992547409.91',9007199254740991],['90071992547409.92',null]]; for (const [input,want] of cases) if(parseCents(input)!==want) throw Error('Failed '+JSON.stringify(input));

Failed "0001.02"

金额转换:拒绝非法输入,避免浮点误差 · 默认思考 · 输出截断,未执行检查 · 18 项预定检查

2026-10-18T01:55:44.464Z · 总耗时:18.646s · 正文首响:— · 结束原因:length

输入 / 总输出 / 思考 token:132 / 4096 / 4096

题目

写 JavaScript 函数 parseCents(value)。value 必须是字符串:允许两端空白;只接受非负十进制金额,整数部分至少一位,小数最多两位;拒绝指数写法、符号、千分位、Infinity、空串、超过两位小数。返回整数分数,超过 Number.MAX_SAFE_INTEGER 则返回 null。非法类型或格式返回 null。不能把非法值四舍五入成合法值。只输出函数代码,不要 Markdown 或解释。

原始代码

可执行检查

const cases=[['0',0],[' 12.30 ',1230],['0.29',29],['1.2',120],['0001.02',102],['1.234',null],['-1',null],['+1',null],['1e3',null],['',null],['.5',null],['1.',null],['Infinity',null],['1,000',null],[null,null],[1,null],['90071992547409.91',9007199254740991],['90071992547409.92',null]]; for (const [input,want] of cases) if(parseCents(input)!==want) throw Error('Failed '+JSON.stringify(input));

Incomplete response; checks not run

保序去重:安全处理特殊键且不修改输入 · 默认思考 · 通过 · 3 项预定检查

2026-10-18T01:56:03.112Z · 总耗时:1.421s · 正文首响:1.263s · 结束原因:stop

输入 / 总输出 / 思考 token:102 / 228 / 164

题目

写 JavaScript 函数 uniqueById(items)。items 是对象数组,每个对象有字符串 id 字段。保留每个 id 首次出现的原对象和原顺序,不修改输入或任何对象;空数组返回空数组。id 可为 __proto__、constructor 或空字符串。只输出函数代码,不要 Markdown 或解释。

原始代码

function uniqueById(items) {
  const seen = new Map();
  const result = [];
  for (const item of items) {
    const id = item.id;
    if (!seen.has(id)) {
      seen.set(id, true);
      result.push(item);
    }
  }
  return result;
}

可执行检查

const a={id:'__proto__',value:1},b={id:'constructor'},c={id:''},d={id:'x'};const input=Object.freeze([a,b,{id:'__proto__'},c,{id:''},d,{id:'constructor'}]);const got=uniqueById(input);if(got.length!==4||got[0]!==a||got[1]!==b||got[2]!==c||got[3]!==d)throw Error('Wrong identity or order');if(uniqueById([]).length!==0)throw Error('Empty');if(input.length!==7||a.value!==1)throw Error('Mutation');
保序去重:安全处理特殊键且不修改输入 · 关闭思考 · 通过 · 3 项预定检查

2026-10-18T01:56:04.536Z · 总耗时:0.633s · 正文首响:0.528s · 结束原因:stop

输入 / 总输出 / 思考 token:76 / 61 / —

题目

写 JavaScript 函数 uniqueById(items)。items 是对象数组,每个对象有字符串 id 字段。保留每个 id 首次出现的原对象和原顺序,不修改输入或任何对象;空数组返回空数组。id 可为 __proto__、constructor 或空字符串。只输出函数代码,不要 Markdown 或解释。

原始代码

function uniqueById(items) {
  const seen = new Set();
  const result = [];
  for (const item of items) {
    const id = item.id;
    if (!seen.has(id)) {
      seen.add(id);
      result.push(item);
    }
  }
  return result;
}

可执行检查

const a={id:'__proto__',value:1},b={id:'constructor'},c={id:''},d={id:'x'};const input=Object.freeze([a,b,{id:'__proto__'},c,{id:''},d,{id:'constructor'}]);const got=uniqueById(input);if(got.length!==4||got[0]!==a||got[1]!==b||got[2]!==c||got[3]!==d)throw Error('Wrong identity or order');if(uniqueById([]).length!==0)throw Error('Empty');if(input.length!==7||a.value!==1)throw Error('Mutation');
区间合并:乱序、相邻区间与输入不可变 · 关闭思考 · 通过 · 5 项预定检查

2026-10-18T01:56:05.173Z · 总耗时:1.370s · 正文首响:0.826s · 结束原因:stop

输入 / 总输出 / 思考 token:81 / 178 / —

题目

写 JavaScript 函数 mergeIntervals(intervals)。输入为有限数字组成的闭区间 [start,end] 数组,保证 start<=end,输入可能乱序。返回按 start 排序的合并闭区间,相接区间也合并;不要修改输入或任何内层数组,空数组返回空数组。只输出函数代码,不要 Markdown 或解释。

原始代码

function mergeIntervals(intervals) {
  if (!Array.isArray(intervals) || intervals.length === 0) return [];
  const sorted = intervals
    .map(([start, end]) => [start, end])
    .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
  const result = [];
  for (const [start, end] of sorted) {
    if (result.length === 0) {
      result.push([start, end]);
    } else {
      const last = result[result.length - 1];
      if (start <= last[1]) {
        if (end > last[1]) last[1] = end;
      } else {
        result.push([start, end]);
      }
    }
  }
  return result;
}

可执行检查

const cases=[[[[5,7],[1,3],[3,5]],[[1,7]]],[[[1,4],[2,3]],[[1,4]]],[[[0,0],[2,2]],[[0,0],[2,2]]],[[[-3,-1],[-2,0],[3,4]],[[-3,0],[3,4]]],[[],[]]];for(const [input,want] of cases){input.forEach(Object.freeze);Object.freeze(input);if(JSON.stringify(mergeIntervals(input))!==JSON.stringify(want))throw Error('Wrong merge');}
区间合并:乱序、相邻区间与输入不可变 · 默认思考 · 通过 · 5 项预定检查

2026-10-18T01:56:06.547Z · 总耗时:3.999s · 正文首响:3.507s · 结束原因:stop

输入 / 总输出 / 思考 token:107 / 777 / 605

题目

写 JavaScript 函数 mergeIntervals(intervals)。输入为有限数字组成的闭区间 [start,end] 数组,保证 start<=end,输入可能乱序。返回按 start 排序的合并闭区间,相接区间也合并;不要修改输入或任何内层数组,空数组返回空数组。只输出函数代码,不要 Markdown 或解释。

原始代码

function mergeIntervals(intervals) {
  if (intervals.length === 0) return [];

  const sorted = intervals
    .map(([start, end]) => [start, end])
    .sort((a, b) => a[0] - b[0] || a[1] - b[1]);

  const merged = [];

  for (const [start, end] of sorted) {
    if (merged.length === 0) {
      merged.push([start, end]);
    } else {
      const last = merged[merged.length - 1];
      if (start <= last[1]) {
        if (end > last[1]) last[1] = end;
      } else {
        merged.push([start, end]);
      }
    }
  }

  return merged;
}

可执行检查

const cases=[[[[5,7],[1,3],[3,5]],[[1,7]]],[[[1,4],[2,3]],[[1,4]]],[[[0,0],[2,2]],[[0,0],[2,2]]],[[[-3,-1],[-2,0],[3,4]],[[-3,0],[3,4]]],[[],[]]];for(const [input,want] of cases){input.forEach(Object.freeze);Object.freeze(input);if(JSON.stringify(mergeIntervals(input))!==JSON.stringify(want))throw Error('Wrong merge');}