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 是什么?
官方公布了哪些变化?
下面是厂商模型卡公布的成绩,不是 TOKRACE 复现结果。
| 基准 | 9 月版本 | 1017 版本 |
|---|---|---|
| Terminal-Bench 4.0 | 31.2 | 42.3 |
| DeepSWE v1.1 | 74.2 | 77.0 |
| ProgramBench | 20.3 | 29.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/5 | 5/5 |
| 格式约束 | 5/5 | 5/5 |
| 材料问答 | 5/5 | 5/5 |
| 正文首响中位数 | 1.113 秒 | 0.661 秒 |
| 请求总耗时中位数 | 1.153 秒 | 0.780 秒 |
| completion token 合计 | 1145 | 214 |
| 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.003 | 0.006 |
| 缓存未命中输入 | 0.15 | 0.30 |
| 输出 | 0.60 | 1.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、原始正文和代码检查均可下载。
原题、原始回答与代码检查
联系信息抽取 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');}