Skip to content

v0.1 它是如何工作的

陈鼫RWHTYFZ edited this page Aug 19, 2022 · 1 revision

工作逻辑

contest.py/problem.py

  1. 通过模拟网页请求获取比赛页面
  2. 通过oiTerminal/platforms的具体实现提取 题目描述和样例
  3. 生成文件dist/比赛平台名/比赛id/题目号.{in/out}.测试点号
  4. 生成文件dist/比赛平台名/比赛id-语言/题目号.语言文件后缀 (相关配置见lang.jsonconfig.json,如果你需要定义语言模板,应该把模板代码放在template/文件夹中,且温建平和lang.json中的template字段保持一致
  5. 生成文件dist/比赛平台名/比赛id-语言/state.json 目前包含oj,contestID,本地语言lang,oj的语言标识up_lang 例如:{"oj": "Codeforces", "contestId": "1153", "lang": "C++17", "up_lang": "54"}
  6. 建立测试提交脚本的软链接
  7. 跳转到生成的代码文件

使用示例: ./contest.py cf 1104

lang.py

  1. 不带参数,获取lang.json中的本地语言支持的配置(相关配置config.jsonlang字段)
  2. --oj参数,例如--oj cf,模拟网页请求cf,获取语言支持 键值对。(相关配置config.jsonup_lang字段)

使用示例:

  1. ./lang.py
  2. ./lang.py --oj cf

test.py

  1. 读取contest.py/problem.py生成的state.json(见上)只关心contestIdlang字段
  2. 创建TEST文件夹,把代码复制到TEST中,例如A.cpp复制到TEST/Main.cpp
  3. 调用 编译 运行 命令,配置见lang.json 我这里C++配置的是clang++,如果你需要使用g++gcc作为编译工具请自行替换为相应的编译命令,其它语言同理
  4. 获取运行时间,比较结果,如果结果不同调用diff展示差异

使用示例(注意需要在具体的dist/<OJ>/<contest>/目录下使用): ./test.py A

submit.py

  1. 模拟网页请求,获得页面,模拟填表,完成登录。(相关配置和文件,config.json中的用户名和密码,生成的state.jsonoj)
  2. 跳转到对应题目页面,模拟填表,完成提交。(相关配置和文件,state.json中配置的contestId,命令行传入的题目号)
  3. 获取结果,模拟请求结果页,或这访问网站提供的结果查询api(如cf是提供的api),分析返回数据。

使用示例(注意需要在具体的dist/<OJ>/<contest>/目录下使用): ./submit.py A

reg.py

  1. <oj> <contest id> 模拟网页请求,获得页面,模拟填表,完成比赛的报名。

使用示例: ./reg.py cf 1104

Clone this wiki locally