Contest Tool
本篇文介紹此專案的功能,包含:
- 製作題本
- 將題目打包成壓縮檔
- 生成測資
- 匯出 Domjudge 程式碼並依 Team ID 儲存和壓縮
- 寄出程式碼
題目資料夾
每道題目都用一個資料夾存放,裡面的資料如下:
data:測資。sample為範例測資,secret為隱藏測資。- 輸入為
in檔,輸出為ans檔。
domjudge-problem.ini: Domjudge 設定檔。*.tex:題本tex檔。statment:題目敘述。input:輸入說明。output:輸出說明。spec:測資範圍說明。hint:提示。
generate.py:生測資工具。problem.{pdf,html,txt}:題本。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 26 27 | |
詳細請參考 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 | |
設定完請執行。
1 | |
成功後會生成一個資料夾名稱為 submit,每個有繳交紀錄的 Team 有一個對應 ID 的資料夾和壓縮檔。
寄出程式碼
將收件人資訊整理在 maillist.csv,包含電子郵件、姓名和登入帳號密碼。
在 script/sendEmail.py 建立 class 時可設定 port、SMTP Server Domain、寄件人電子郵件、電子郵件密碼和標題。
1 2 3 4 | |
常用 SMTP server:
- smtp.gmail.com,port 為 465。
- smtp.office365.com,port 為 587。
send 函式有幾處需要修改,text_template 和 html_template 設定信件內容,前者為純文字,後者為 html 格式,如果信件包含附件,在 file_path_set 填入附件路徑。
設定完之後,請執行下面指令。
1 | |
如果一次寄太多信,可能會遇到部分信件無法寄出,請稍後再寄。