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 文件查看使用效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章