本地练习加题技能
SkillDev toolsBatch-adds problem descriptions, code templates, test cases, and wiring logic for the Zero2Leetcode local practice page. Suitable for scanning for missing problems, writing them in batches to `assets/js/playground-extra/` based on currently available concurrency, and finally wiring them into `playgr
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the 本地练习加题技能 skill
What this skill tells your AI
The instructions your AI receives, as published by ranxi2001/zero2leetcode in .agents/skills/local-practice-problem-adder/SKILL.md and read by ahel’s review.
你是 Zero2Leetcode 的本地练习加题助手。你的任务是把 Hot 100 题目逐步补进本地练习页,使题目既能通过 playground.html?id=<id> 直接打开,也尽可能支持本地运行测试。
除非用户明确指定别的做法,否则默认按本技能执行。
适用场景
当用户出现以下需求时,使用本技能:
- “为本地练习加题”
- “给 playground 补题目描述和测试用例”
- “把剩下的题接入本地练习”
- “用并行代理补本地 OJ”
- “让
playground.html?id=xx支持更多题” - “把缺失的题详情补进本地练习页”
关键文件
assets/js/problems-data.js题目元数据总表,包含 id、标题、难度、分类、LeetCode 链接、部分博客链接。assets/js/playground.js本地练习核心逻辑,已有部分详细题目对象、辅助数据结构 setup、运行器与比较函数。playground.html页面脚本加载顺序与入口。assets/js/playground-extra/并行代理写入的批次文件目录。每个代理只负责一个batch-*.js。.claude/skills/cnblogs-publisher/published_links_*.json若该文件存在且problems-data.js的blogUrl不全,可从这里补齐已发布博客链接;不要假设日期后缀或文件一定存在。
默认工作流
1. 先盘点缺口
读取 assets/js/problems-data.js 与 assets/js/playground.js:
- 找出已经在
problems-data.js中存在,但在playground.js里没有详细对象的题目 id - 优先补已经发布博客、已经被外部链接引用、或用户点名的题目
2. 按当前可用并发动态分工
如果缺口很多,可使用并行代理分批处理,但并发数必须根据当前运行环境动态决定:
- 先检查当前可用并发槽位与正在运行的任务,不硬编码代理数量
- 没有额外并发能力时改为主线程顺序处理
- 每个代理只拥有一个独立输出文件
- 不要让多个代理同时编辑
assets/js/playground.js或playground.html
推荐分工方式:
- 代理只写
assets/js/playground-extra/batch-N.js - 当前仓库已加载
batch-1.js到batch-8.js;新增批次使用未占用的编号,不覆盖现有文件 - 主线程最后统一修改
playground.html和assets/js/playground.js
批次文件规范
每个批次文件必须是合法 JS,格式固定为:
window.PLAYGROUND_EXTRA_PROBLEMS = (window.PLAYGROUND_EXTRA_PROBLEMS || []).concat([
{
id: 128,
title: 'LC 128 - Longest Consecutive Sequence',
difficulty: 'Medium',
tags: ['哈希表'],
description: `...`,
template: `...`,
functionName: 'longest_consecutive',
testCases: [
{ input: [[100, 4, 200, 1, 3, 2]], expected: 4 },
],
compareFunc: 'equal',
solutionUrl: 'https://leetcode.cn/problems/longest-consecutive-sequence/solutions/',
blogUrl: 'https://www.cnblogs.com/ranxi169/p/xxxx.html',
},
]);
每题对象必须包含
idtitledifficultytagsdescriptiontemplatefunctionNametestCasescompareFuncsolutionUrlblogUrl
按题型补充字段
链表题按需使用:
setup: LINKED_LIST_SETUPargWrappersreturnWrapper
二叉树题按需使用:
setup: BINARY_TREE_SETUPargWrappersreturnWrapper
可直接参考 assets/js/playground.js 中已有链表题、树题对象的写法。
题目内容约束
描述
- 使用中文
- 适合直接展示在页面里
- 与现有
playground.js风格保持一致 - 用 HTML 字符串,包含标题、难度、示例、提示
模板
- 使用 Python 模板
- 函数名与
functionName对齐 - 如果题目依赖结构体,模板中保留 LeetCode 风格注释
测试用例
- 尽量给 3 到 5 组有效测试
- 用例优先覆盖基础情况、边界情况、常见坑点
- 比较函数通常为
equal、sorted、sorted_nested
以下类型允许暂时不接本地测试,但题目对象仍要完整:
- random 指针链表
- 数据流/缓存/前缀树等类设计题
- “返回环入口节点”这类在当前运行模型下不方便稳定校验的题
这类题可写:
testCases: [],
compareFunc: 'equal',
并在描述中明确“当前暂未接入本地测试”。
接线原则
1. 批次脚本加载顺序
如果批次文件中引用了 LINKED_LIST_SETUP 或 BINARY_TREE_SETUP,则:
- 批次脚本必须放在
assets/js/playground.js之后加载 - 但要在页面初始化前加载完成
推荐顺序:
<script src="assets/js/problems-data.js"></script>
<script src="assets/js/playground.js"></script>
<script src="assets/js/playground-extra/batch-1.js"></script>
<script src="assets/js/playground-extra/batch-2.js"></script>
<script src="assets/js/playground-extra/batch-3.js"></script>
<script src="assets/js/playground-extra/batch-4.js"></script>
<script src="assets/js/playground-extra/batch-5.js"></script>
<script src="assets/js/playground-extra/batch-6.js"></script>
<script src="assets/js/playground-extra/batch-7.js"></script>
<script src="assets/js/playground-extra/batch-8.js"></script>
<script src="assets/js/ai-assistant.js"></script>
2. playground.js 的合并方式
不要要求并行代理直接改 DETAILED_PROBLEMS。
主线程统一把额外题目并进详细题目集合,例如:
const EXTRA_DETAILED_PROBLEMS =
(typeof window !== 'undefined' && Array.isArray(window.PLAYGROUND_EXTRA_PROBLEMS))
? window.PLAYGROUND_EXTRA_PROBLEMS
: [];
const ALL_DETAILED_PROBLEMS = [...DETAILED_PROBLEMS, ...EXTRA_DETAILED_PROBLEMS];
然后用 ALL_DETAILED_PROBLEMS 构建最终的题目映射。
3. 不要破坏 fallback
即使某题暂时没有本地测试,也要保留基于 problems-data.js 的 fallback 能力,保证:
playground.html?id=<id>能打开正确题目- 没有本地测试时页面能给出提示,而不是报错
并行代理提示词模板
给单个代理时,建议使用下面的结构:
你负责 `assets/js/playground-extra/batch-N.js`,只改这一个文件。
你不是独自在代码库里工作,不要回滚别人的改动,也不要编辑其他文件。
任务:为以下题目生成本地练习题详情对象并写入该文件:
<题号列表>
输出文件格式必须是:
window.PLAYGROUND_EXTRA_PROBLEMS = (window.PLAYGROUND_EXTRA_PROBLEMS || []).concat([
...题目对象...
]);
要求:
1. 参考 `assets/js/playground.js` 现有题目对象风格。
2. 参考 `assets/js/problems-data.js` 的标题、难度、url、blogUrl。
3. 每题必须包含:id,title,difficulty,tags,description,template,functionName,testCases,compareFunc,solutionUrl,blogUrl。
4. 链表题/树题按需使用 `LINKED_LIST_SETUP`、`BINARY_TREE_SETUP`、`argWrappers`、`returnWrapper`。
5. 对不适合当前本地 OJ 的题,允许 `testCases: []`,但不能写错题目对象结构。
6. 输出必须是合法 JS。
完成后只回复你改了哪个文件。
验收清单
完成一轮加题后,至少检查以下内容:
assets/js/playground-extra/batch-*.js都存在且是合法 JSplayground.html已加载这些批次文件assets/js/playground.js已合并额外详细题目- 下拉列表能显示新增题目
- 直接访问
playground.html?id=<id>能定位到对应题目 - 有测试用例的题可以正常运行
- 无测试用例的题会显示“暂未接入本地测试”,而不是崩溃
执行策略
- 小批量改动时,可以手工补到
playground.js - 大批量改动时,优先使用
playground-extra/+ 主线程接线 - 如果用户要求并行,按当前可用并发槽位分工,并保证每个代理只编辑自己的批次文件
- 若发现已有未提交改动,理解并兼容,不要回滚用户的修改
Signals
- GitHub stars
- 125
- Forks
- 10
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
local-practice-problem-adder- Source
- github.com/ranxi2001/zero2leetcode