Vloj
AI-powered LibreOJ problem scraper and solution tool
npx -y skills add zym9863/Vibe-LibreOJ --skill vlojAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
LibreOJ题目抓取与解题工作流。用户输入形如loj1/loj001或https://loj.ac/p/1 等题号或URL时触发;创建以题号命名的空文件夹,使用Chrome DevTools MCP读取题面并保存为md文件,最后用C++、C、C#、Python、Java、Kotlin、Pascal、Rust、Go、Haskell、F#生成解答文件。
SKILL.md
4.6 KB, as published. Nobody here has run it
vloj
目标
- 解析题号,创建以题号命名的空文件夹。
- 访问对应题目页面,抓取题面并写入Markdown。
- 编写C++、C、C#、Python、Java、Kotlin、Pascal、Rust、Go、Haskell、F#解答文件。
触发与解析
- 支持输入示例:
loj1、loj001、https://loj.ac/p/1、http://loj.ac/p/123。 - 提取连续数字作为题号,去除前导零后作为规范题号。
- 题目URL格式固定为:
https://loj.ac/p/<id>。
工作流
-
创建空文件夹
- 在当前工作区根目录的
loj/目录下创建以题号命名的文件夹:loj/<id>/。 - 若文件夹不存在,直接创建。
- 若文件夹已存在且非空,先请求用户确认是否清空;确认后删除内容并保持空文件夹。
- 在当前工作区根目录的
-
读取题面(Chrome DevTools MCP)
- 打开题目URL并等待页面加载完成。
- 使用页面快照或脚本评估获取题面主体文本:
- 优先抓取页面主内容区域(常见为
main、article、或含“题目描述/输入格式/输出格式/样例”文本的容器)。 - 无法精准定位时,回退使用
document.body.innerText,再按标题/小节进行整理。
- 优先抓取页面主内容区域(常见为
- 需要确保包含题目标题、描述、输入输出、样例与提示(如存在)。
-
写入Markdown
- 在
loj/下的题号文件夹中创建problem.md。 - 内容结构:
- 标题:
# <题号> <题目标题> - URL:
原始URL - 题面正文分节整理(保留原有小节标题)。
- 标题:
- 在
-
编写C++解答
- 在
loj/<id>/下创建solution.cpp。 - 使用 C++11 标准,包含必要头文件与
main()。 - 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
-
编写C解答
- 在
loj/<id>/下创建solution.c。 - 使用 C11 标准,包含必要头文件与
main()。 - 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
-
编写Python解答
- 在
loj/<id>/下创建solution.py。 - 使用 Python 3.10,包含必要的输入输出处理。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
-
编写Java解答
- 在
loj/<id>/下创建solution.java。 - 使用 Java 8 标准,类名为
Main,包含main()方法。 - 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
-
编写Kotlin解答
- 在
loj/<id>/下创建solution.kt。 - 使用 Kotlin 1.8 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
-
编写Pascal解答
- 在
loj/<id>/下创建solution.pas。 - 使用 Free Pascal 3.2 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
-
编写Rust解答
- 在
loj/<id>/下创建solution.rs。 - 使用 Rust 2021 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
-
编写Go解答
- 在
loj/<id>/下创建solution.go。 - 使用 Go 1.x 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
-
编写Haskell解答
- 在
loj/<id>/下创建solution.hs。 - 使用 Haskell 2010 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
-
编写C#解答
- 在
loj/<id>/下创建solution.cs。 - 使用 C# 9 (.NET 5) 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
-
编写F#解答
- 在
loj/<id>/下创建solution.fs。 - 使用 F# 5.0 (.NET 5) 标准。
- 依据题意实现可通过的解法,并在顶部用简短注释说明思路与复杂度。
- 在
输出约束
- 仅在
loj/<id>/下创建problem.md、solution.c、solution.cpp、solution.cs、solution.fs、solution.py、solution.java、solution.kt、solution.pas、solution.rs、solution.go与solution.hs,不生成额外文件。 - 保持文件夹为空创建流程的前置步骤,先在
loj/下建目录再抓取题面。