leo900807 / tps

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Task Prepare System for CMS

This system is based on Official TPS.
This TPS version is a modified version by baluteshih and me.

TPS 使用說明

Readme file on HackMD

題目結構

一道題目以該題英文名稱為資料夾名稱,且該資料夾包含以下資料夾及檔案

可以使用 tps verify 來驗證資料夾格式是否正確

資料夾

gen/ , scripts/ , solution/ , statement/ , validator/

以下為非必要的資料夾

checker/:若該題需要 special judge 則會有此資料夾

grader/:若該題為互動題,則會有此資料夾

public/:若有需要提供給參賽者的檔案(e.g. 供測試用的 grader、測資)會放置於這個資料夾

需要 Makefile 的資料夾

gen/ , validator/ , checker/

ABN/ 為 special judge 範例資料夾
Egg/ 為互動題範例資料夾
Sudoku/ 為 output only 範例資料夾
Template/ 為空資料夾,可以直接複製成新的題目資料夾

檔案

problem.json , solutions.json , subtasks.json

gen/

測資生成器會放置於這個資料夾

請盡量讓生成器接收同樣的參數時可以產生同樣的測資,避免因為產生非預期的測資而沒卡到要卡的東西,建議可以使用 testlib.h

gen/data

這個檔案是生成測資的指令,詳細撰寫方式請參見 TPS 的說明

這個檔案請勿使用 dos 格式

所有題目都需要一筆只有範例測資的子任務 "samples"

gen/manual/

手動生的測資可以放在這個資料夾讓 gen/data 引入

scripts/

TPS 使用的腳本,基本上不會動到

solution/

這個資料夾存放標程其他解題方法的程式碼(包含需要被 hack 的程式碼)

statement/

題目的 .tex , .pdf 等檔案存放於此

validator/

驗證測資正確性所使用的程式,包含但不限於變數範圍、輸入格式以及所有子任務的限制

若測資正確則 validator 回傳 0,否則回傳非 0 值

checker/

存放一份用來確認選手輸出是否正確的程式碼,會編譯成執行檔 checker 以匯入 CMS

請注意 Makefile 中編譯出來檔案的名稱須為 checker.exe 且在 chmod +x 後須可執行

checker/ 中的 testlib.h 有修改過以符合 CMS,請直接複製 template/ 資料夾中的使用

grader/

本資料夾下應該會有 <lang>/ 的資料夾,資料夾名稱依競賽提供的語言而定,下列為常見語言

  • cpp/
  • c/
  • py/
  • java/

並且資料夾內會有各語言的 grader,下方以 cpp 為例

grader/cpp/prob.h

這個檔案是你希望選手引用的標頭檔,只能有一個檔案,且檔名必須以 prob 命名。

該檔案用來負責宣告所有公開的函式、變數、結構等等,一般來說不會在裡面塞任何邏輯實作。

grader/cpp/grader.cpp

這些檔案是 Judge 端拿來互動的主要程式,會與選手的程式碼一起編譯。

通常在這類題目中,grader 會在修改後提供予選手測試用,而 tps 提供了一個方法可以簡化修改流程

當使用 tps make-public 指令時,tps 會將程式碼中 // BEGIN SECRET// END SECRET 夾住的區塊移除,而生成提供參賽者使用的測試用 grader,詳細可以參考 Egg/grader/ 資料夾中的檔案

此版本的 tps make-public 有更動過,可支援以下內容

  1. 所有介於 # BEGIN SECRET# END SECRET 的區塊將被移除
  2. 所有介於 // BEGIN SECRET// END SECRET 的區塊將被移除
  3. 不在上述兩個區塊內,而在同一行內被 _secretsecret 夾起來的子區間

除此之外,必須注意不能在任何上述以外的地方出現任何「secret」的子字串(不論大小寫),否則 script 會噴錯。

public/

存放要提供給選手的檔案,在這個資料夾的所有東西會被壓縮成一個 .zip 檔放在 CMS 的 Attachment 中

若為互動題則可以提供讓選手測試用的 grader

若為 Output Only 則提供輸入檔

其他也能提供一些檔案,e.g. 較大的範例測資、統合題本

public/files

這個檔案描述了哪些檔案是要公開的,詳細撰寫方式請參見 TPS 的說明

problem.json

題目的設定檔,包含題目的時限與一些 CMS 的設定,詳細撰寫方式請參見範例資料夾或是 TPS 的說明

solutions.json

標程與其他解法的設定檔,其中用來產生輸出檔的標程設定為 "verdict": "model_solution",檔案中只能存在一個 model_solution

其他解法的 verdict 在 tps CLI 中沒有功用,可以選擇性填寫,詳細撰寫方式請參見 TPS 的說明

subtasks.json

子任務分配的設定檔,包含分數及 validator 與子任務的對應關係,詳細撰寫方式請參見 TPS 的說明

請記得包含子任務 "samples"

TPS 指令

tps 使用 Python 執行,請先安裝 Python >= 3.6 及相關套件

$ sudo ./install-tps.sh
$ sudo apt install dos2unix zip \  # for "tps make-public"
  build-essential  # for "make"
$ sudo pip install psutil  # for "tps invoke"

其餘套件詳見 TPS 的說明

verify

在題目資料夾下 tps verify 的指令,可以檢查現在的題目資料夾結構有沒有問題

gen

在題目資料夾下 tps gen 的指令,tps 會自動生成並驗證測資,可選參數可以藉由 tps gen --help 得知

invoke

在題目資料夾下 tps invoke <solution-file> 測試該程式碼的輸出與標準程式輸出的比較結果

且該程式碼執行時會受到時間與記憶體限制,可選參數可以藉由 tps invoke --help 得知

About


Languages

Language:C++ 91.0%Language:Shell 4.3%Language:Python 3.7%Language:TeX 0.9%Language:Makefile 0.1%Language:C 0.0%