vloj
skillLibreOJ题目抓取与解题工作流。用户输入形如loj1/loj001或https://loj.ac/p/1 等题号或URL时触发;创建以题号命名的空文件夹,使用Chrome DevTools MCP读取题面并保存为md文件,最后用C++、C、C#、Python、Java、Kotlin、Pascal、Rust、Go、Haskell生成解答文件。
apm::install
apm install @majiayu000/vlojapm::skill.md
---
name: vloj
description: LibreOJ题目抓取与解题工作流。用户输入形如loj1/loj001或https://loj.ac/p/1 等题号或URL时触发;创建以题号命名的空文件夹,使用Chrome DevTools MCP读取题面并保存为md文件,最后用C++、C、C#、Python、Java、Kotlin、Pascal、Rust、Go、Haskell生成解答文件。
---
# vloj
## 目标
- 解析题号,创建以题号命名的空文件夹。
- 访问对应题目页面,抓取题面并写入Markdown。
- 编写C++、C、C#、Python、Java、Kotlin、Pascal、Rust、Go、Haskell解答文件。
## 触发与解析
- 支持输入示例:`loj1`、`loj001`、`https://loj.ac/p/1`、`http://loj.ac/p/123`。
- 提取连续数字作为题号,去除前导零后作为规范题号。
- 题目URL格式固定为:`https://loj.ac/p/<id>`。
## 工作流
1. **创建空文件夹**
- 在当前工作区根目录创建以题号命名的文件夹:`<id>/`。
- 若文件夹不存在,直接创建。
- 若文件夹已存在且非空,先请求用户确认是否清空;确认后删除内容并保持空文件夹。
2. **读取题面(Chrome DevTools MCP)**
- 打开题目URL并等待页面加载完成。
- 使用页面快照或脚本评估获取题面主体文本:
- 优先抓取页面主内容区域(常见为 `main`、`article`、或含“题目描述/输入格式/输出格式/样例”文本的容器)。
- 无法精准定位时,回退使用 `document.body.innerText`,再按标题/小节进行整理。
- 需要确保包含题目标题、描述、输入输出、样例与提示(如存在)。
3. **写入Markdown**
- 在题号文件夹中创建 `problem.md`。
- 内容结构:
- 标题:`# <题号> <题目标题>`
- URL:`原始URL`
- 题面正文分节整理(保留原有小节标题)。
4. **编写C++解答**
- 在题号文件夹中创建 `solution.cpp`。
- 使用 C++11 标准,包含必要头文件与 `main()`。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
5. **编写C解答**
- 在题号文件夹中创建 `solution.c`。
- 使用 C11 标准,包含必要头文件与 `main()`。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
6. **编写Python解答**
- 在题号文件夹中创建 `solution.py`。
- 使用 Python 3.10,包含必要的输入输出处理。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
7. **编写Java解答**
- 在题号文件夹中创建 `solution.java`。
- 使用 Java 8 标准,类名为 `Main`,包含 `main()` 方法。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
8. **编写Kotlin解答**
- 在题号文件夹中创建 `solution.kt`。
- 使用 Kotlin 1.8 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
9. **编写Pascal解答**
- 在题号文件夹中创建 `solution.pas`。
- 使用 Free Pascal 3.2 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
10. **编写Rust解答**
- 在题号文件夹中创建 `solution.rs`。
- 使用 Rust 2021 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
11. **编写Go解答**
- 在题号文件夹中创建 `solution.go`。
- 使用 Go 1.x 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
12. **编写Haskell解答**
- 在题号文件夹中创建 `solution.hs`。
- 使用 Haskell 2010 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
13. **编写C#解答**
- 在题号文件夹中创建 `solution.cs`。
- 使用 C# 9 (.NET 5) 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
## 输出约束
- 仅创建 `problem.md`、`solution.c`、`solution.cpp`、`solution.cs`、`solution.py`、`solution.java`、`solution.kt`、`solution.pas`、`solution.rs`、`solution.go` 与 `solution.hs`,不生成额外文件。
- 保持文件夹为空创建流程的前置步骤,先建目录再抓取题面。