HydroOJ 从入门到入土(17)批量转化其他格式题库到 HydroOJ 格式(Python)

新题库,新快乐,新痛苦。

一、想法

有了多种题库之后,常常会遇到大量题库无法转化到自己的 OJ 上。每次都要重新手写解析器,非常浪费时间,于是抽出了这个工具。

本工具可以将抽取好的信息自动组装成符合 HydroOJ 格式的题目并自动压缩,解决后半部分的转化工作。

二、实现

1. 准备包和相应环境

包:https://github.com/15921483570/hydrolizer (有用可以点个star)

环境:在包内执行 pip install -r requirements.txt

2. 使用

只需导入本包后,按照范例,将所需信息以字典形式传入 Hydrolizer() 即可。

如需将 Hydrolizer.hpath 目录内的所有题目文件夹打包,可以直接调用 Hydrolizer.zipzip()。打包好的文件可以直接上传 HydroOJ 使用。

至于源文件的信息抽取,很遗憾,因源文件种类多样,无法统一写解析,只能根据实际情况,自行另写一个解析器以完成前半部分工作,本工具仅能实现后半部分工作。

3. 例子

import hydrolizer

fname = "testttt"
pid = 1
data_src = os.path.join('test', 'data')

d = {
    # 基本属性
    "fname": fname,  # 必填
    "data_src": data_src,  # 评测数据源文件夹路径,默认值为'',如无数据会报警告

    # 下载外部文件所需信息
    "headers": {},  # 默认值为 '',如无数据可删除此行
    "cookies": {},  # 默认值为 {},如无数据可删除此行
    "ignore": [],  # 屏蔽网址关键词列表, 格式为['屏蔽词1', '屏蔽词2', ...],默认值为 [],如无数据可删除此行

    # problem.md, 文字部分会自动从 html 格式转为 Markdown
    "bg": "背景",  # 默认值为 '',如无数据可删除此行
    "desc": "题目描述 ![](https://abc.com/123.png)",  # 默认值为 '',如无数据会报警告,如存在外部图片链接会自动下载并整理
    "infmt": "输入格式",  # 默认值为 '',如无数据可删除此行
    "outfmt": "输出格式",  # 默认值为 '',如无数据可删除此行
    "trans": "题目大意",  # 默认值为 '',如无数据可删除此行
    "samples": [['1', '2'], ['2', '3']],  # 必填,格式为:[第1组数据[输入,输出], 第2组数据[输入,输出], ...]
    # 如无样例数据会报 ValueError, 如某次输入输出均为空会报警告
    "hint": "提示",  # 默认值为 '',如无数据可删除此行

    # problem.yaml
    "pid": f"P{pid}",  # 数字或字符串,默认值为'P1000'
    "owner": 2,  # 默认值为 2,如无特别要求可删除此行
    "title": "买笔",  # 必填,如无数据会报 ValueError
    "tags": ['选择'],  # 默认值为 None,格式为['标签1','标签2', ...],如无特别要求可删除此行
    "difficulty": 1,  # 默认值为 0,如无特别要求可删除此行

    # ./testdata/config.yaml
    "tp": 'default',  # 题目类型,默认值为 'default',如无特别要求可删除此行
    "tm": 1000,  # 限制时间,默认值为 1000,如无特别要求可删除此行
    "mem": 256,  # 限制内存,默认值为 256,如无特别要求可删除此行
    # 以上三项若全部为默认值,则不会生成 config.yaml 文件,评测时 oj 会自动处理
}

Hydrolizer.DEFAULT_MEMORY = 256  # 可根据题目实际情况调整默认限制内存,减少生成大量无效 config.yaml
Hydrolizer(**d)  #
Hydrolizer.zipzip()  # 打包 Hydrolizer.hpath 目录内的所有文件夹到 Hydrolizer.hpath/000.zip

三、提示

包内自带一个 test 用例,可以直接运行 __init__.py 文件查看使用效果。

posted @ 2024-04-29 22:54  Bowen404  阅读(156)  评论(0编辑  收藏  举报