Contest Tool
本篇文介紹此專案的功能,包含:
- 製作題本
- 將題目打包成壓縮檔
- 生成測資
- 匯出 Domjudge 程式碼並依 Team ID 儲存和壓縮
- 寄出程式碼
題目資料夾
每道題目都用一個資料夾存放,裡面的資料如下:
data
:測資。sample
為範例測資,secret
為隱藏測資。- 輸入為
in
檔,輸出為ans
檔。
domjudge-problem.ini
: Domjudge 設定檔。*.tex
:題本。statment
:題目敘述。input
:輸入說明。output
:輸出說明。spec
:測資範圍說明。
generate.py
:生測資工具。submissions
:範例程式,程式碼的命名不拘,子資料夾名稱如下:accecpted
:預設結果AC
。wrong_answer
:預設結果WA
。time_limit_exceeded
:預設結果TLE
。run_time_error
:預設結果RE
。
詳細結構
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
詳細請參考 sample
資料夾,script/folderGenerator.py
可以複製一個題目資料夾以供使用。
1 |
|
製作題本
tex
檔用來製作題本,需要學習基本 latex
語法,當準備好題目資料夾,請到 main.tex
,找到註解起來的 problemList
和 problem
指令,取消註解並使用。
1 2 3 4 |
|
其他可以調整設定標題的 title
,設定頁首與頁尾的 fancypagestyle
,還有封面的內容,調整好後就可生成 pdf 檔。
使用 GNU make
生成,要確認在主機上安裝好 xelatex
以及相關套件。
1 |
|
使用 docker-compose
生成,只要使用 pdfMaker
這個服務即可。
1 2 |
|
將題目打包成壓縮檔
script/folderCompressor.py
負責將題目資料夾壓縮,預設會將所有檔案壓縮,-d
則預設壓縮成 domjudge
格式的壓縮檔,包含 data
、domjudge-problem.ini
和 submissions
。
1 2 |
|
生成測資
script/testdataGenerator.py
提供的辦法如下:
- 範例程式存在
submissions/accepted/1.cpp
。 - 生測資檔案存在
generate.py
,generate.py
可利用 CYaRon。 - 測資會在
data/secret
。
1 2 |
|
匯出 Domjudge 程式碼並依 Team ID 儲存和壓縮
在 script/domjudgeExportSubmissions.py
設定以下參數。
1 2 3 4 5 6 7 |
|
設定完請執行。
1 |
|
成功後會生成一個資料夾名稱為 submit
,每個有繳交紀錄的 Team 有一個對應 ID 的資料夾和壓縮檔。
寄出程式碼
在 script/sendEmail.py
設定以下參數,self.password
請參考註解內容取得。text_template
和 html_template
需修改。
1 2 3 4 5 6 7 8 9 |
|
設定完請執行。執行的輸入格式為 email teamid passwd
,如果 teamid
有對應的壓縮檔 submit/teamid.zip
會當成附件寄出。
1 |
|
如果一次寄太多信,可能會遇到部分信件無法寄出,請稍後再寄。