AI 修复练习
库存幽灵订单
说出你的想法,让 AI 改代码,再用测试检查结果。
正在读取已保存的进度…
读取完成前暂不编辑,防止初始源码覆盖已有进度。
01 / 看懂问题
卖出 4 件,剩下的 4 件去哪了?
仓库原有 8 件商品,卖出 4 件后,本应还剩 4 件。订单乱序、重复到达后,原始程序却显示库存为 0。
你的目标:让库存计算正确。可以先请 AI 找原因,再让它修复并运行测试。
02 / 告诉 AI 怎么修
用一句话,开始修复
AI 会读取代码、尝试修改,再用真实测试验证。
平台模型尚未选择模型正在检查…
只替换 solution.js,保留 replayInventory 入口。修改运行中的源码会取消该次执行。
检查当前源码
测试结果
尚未运行。先运行测试,看看当前代码哪里出了问题。
在浏览器中真实运行,不会调用模型或产生模型费用。公开测试通过不等于正式通关。
正式通关判定正在查询…
服务端通关判定
仅服务器保存的判题结果可确认通关。公开测试与历史通过快照仍是练习证据。
提交后会把当前 solution.js 发送给同站判题接口,并由独立隔离服务执行。隐藏输入、期望值和逐例结果不会返回浏览器。不产生排行或 XP。每人每天最多 30 次新判题,同一源码直接读取已有记录。
当前源码尚无服务端通关记录。
每一步,都能退回
查看文件检查点 · 1 个
当前源码 SHA-256 · 计算中…
保存的是 solution.js 的真实内容。云端保存状态见上方;临时练习离开后会清空,不保存 Key。保留原始源码、最近通过版本及最多 40 个最近检查点;云端还受总大小限制,较旧检查点可能清理。撤回后继续编辑会分出新分支。恢复会停止正在进行的操作;历史通过记录需重新运行才能验证当前版本。
- r0 · 原始源码 · 当前
查看快照内容
function replayInventory({ stock, events, asOf }) { let available = stock; let sold = 0; const active = new Map(); for (const event of events) { if (event.at > asOf) continue; if (event.type === 'reserve' && available >= event.qty) { available -= event.qty; active.set(event.reservationId, { reservationId: event.reservationId, qty: event.qty, expiresAt: event.expiresAt }); } else if (event.type === 'commit' && active.has(event.reservationId)) { sold += active.get(event.reservationId).qty; active.delete(event.reservationId); } else if (event.type === 'cancel' && active.has(event.reservationId)) { available += active.get(event.reservationId).qty; active.delete(event.reservationId); } } for (const [id, hold] of active) { if (hold.expiresAt <= asOf) { available += hold.qty; active.delete(id); } } return { available, sold, active: [...active.values()].sort((a, b) => a.reservationId < b.reservationId ? -1 : a.reservationId > b.reservationId ? 1 : 0) }; }
运行、保存与数据说明
题目版本:inventory-ghost-v1。代码在此浏览器的独立 Worker 中,由 QuickJS / WebAssembly 执行。29 项公开测试与离线题一致;客户端结果不是服务器可信判题,不记排行或 XP。
登录后会自动保存源码、对话摘要、检查点和所选文件;临时练习不会保存。AI 修复 / 源码页签只在当前浏览器标签页中记住,刷新或返回时恢复;新会话默认打开 AI 修复。Key 与AI 设置仅在本页内存,刷新后必须重新输入并确认。启用 AI 前,需要在AI 设置中确认接收方、数据范围与费用。