跳转至

Polygon

本頁面將簡要介紹多人協作出題平台 Polygon。

簡介

什麼是 Polygon

網址:Index Page - Polygon

Polygon 是一個支持多人協作的出題平台,功能非常完善。官網描述為「Polygon 的使命是為創建編程競賽題目提供平台。」

在 Codeforces (CF) 出題必須使用 Polygon。在其它地方出題,尤其是多人合作出題時,使用 Polygon 也是不錯的選擇。

優點

  • 有版本管理系統,多人合作時不會亂成一團,也不需要互相傳文件。

  • 出題系統完善,validator、generator、checker、solutions 環環相扣,輸出自動生成。

  • 可以為 solutions 設置標籤,錯解 AC、正解未 AC 都會警告,方便地逐一卡掉錯解。

  • 可以方便地對拍,拍出來的數據可以直接添加到題目數據中。

  • 發現問題可以提 issue,而不會被消息刷屏卻一直沒有 fix。

  • 為日後出 CF 做準備。

  • ……

題目列表

題目列表中會顯示一道題目的基本信息,如題面、題解撰寫情況、數據生成情況以及 std、validator 和 checker 的設置。

可以雙擊題目列表的 "Name" 這一欄來寫上 note,比如需要提醒自己做的事(need to add more tests/need to write tutorial),或者是這道題預訂的 score distribution,可以根據自己的需要隨意填寫,當然也可以空着。

"Rev." 中的 "x/y" 的 x 指當前題目版本,y 指 package 的版本。如果兩者不一樣 y 會顯示為紅色。

"Edit session" 中的 "Start" 是指你的賬號還沒有看過這道題,"Continue (x) Discard" 是指你的賬號處於這個題目的第 x 個版本,點擊 "Start" 或 "Continue (x)" 就會進入題目管理界面,點擊 "Discard" 會 不可恢復地 撤銷你的所有更改,回到沒有看過這題的狀態。

如果你的賬號上有一道題的更改沒有提交,題目列表中這一整行就會變紅。

題目管理

Polygon 的大部分功能都不需要學,能看懂英文就基本能用了。

Warning

題面不能使用 Markdown,只能用 TeX。

  • Invocation 是用來測試 solution 的。

  • Stress 是用來對拍的。

  • 數據在 Tests 中用 generator 造,generator 在 Files 中上傳。

General Info

在這個頁面中可以設置題目的時間限制、空間限制、題目類型。

需要注意,"Statement description" 和 "Problem tutorial" 並不是用來寫題面和題解的,這兩個輸入框可能是歷史遺留原因。

Statement

這個頁面是用來寫題面和題解的。還可以通過 "Review" 按鈕來查看題面、validator 與 checker,一般用於審核。

題面和題解都需要使用 TeX 的語法,不能使用 Markdown。例如,需要使用 \textbf{text} 而不是 **text**。但 Polygon 支持的實際上是 TeX 的一個非常小的子集,具體可以自己嘗試。

可以通過最上方的 "In HTML" 鏈接查看渲染後的題面,通過 "Tutorial in HTML" 查看渲染後的題解。

如果需要在題面中添加圖片,需要先在下面的 "Statement Resource Files" 中上傳圖片,然後在題面中加上 \includegraphics{filename.png}

Files

"Source Files" 是用來存放 除了 solutions 外 的其它代碼的,如 validator、checker、generator,如果是 IO 式交互題還有 interactor。

如果這些代碼需要 include 其它文件,例如 Tree-Generator,需要放在 "Resource Files" 中。

grader 式交互參見 官方教程

Checker

testlib.h 提供了一些內置的 checker,在選擇框中有簡要介紹,也可以選擇後再點 "View source" 查看源碼。

如果需要自己編寫 checker,請參考 checker 教程

下面的 "Checker tests" 是通過 "Add test" 添加若干組輸出以及對應的期望評測結果,然後點擊 "Run tests" 就可以測試 checker 是否正確返回了評測結果。

Interactor

僅 IO 式交互題需要,請參考 interactor 教程

Validator

validator 用來檢測數據合法性,編寫請參考 validator 教程

下面的 "Validator tests" 類似於 "Checker tests",需要提供輸入和期望是否合法,用來測試 validator。

Tests

這個頁面是用來管理數據的。

在 Polygon 上,推薦的做法是使用少量 帶命令行參數generator 來生成數據,而不是寫一堆 generator 或者每生成一組數據都修改 generator。並且,只需要生成輸入,輸出會自動生成。

"Testset" 就是一個測試集,如果是給 CF 出題需要手動添加 "pretests" 這個 Testset,並且 "pretests" 需要是 "tests" 的子集。

"Add Test" 是手動添加一組數據,一般用於手動輸入樣例或較小的數據。雖然可以通過文件上傳數據,但這是 不推薦的,數據應該要麼是手動輸入的要麼是使用 generator 在某個參數下生成的。

如果勾選了 "Use in statements",這組數據就會成為樣例,自動加在題面裏。如果需要題面裏顯示的不是樣例的輸入輸出(一般用於交互題),就可以點 "If you want to specify custom content of input or output data for statements click here",然後輸入你想顯示在題面中的輸入輸出。

Tests 頁面的下方是用來輸入生成數據的腳本的,如 generator-name [params] > test-index。可以使用 generator-name [params] > $,就不用手動指定測試點編號了。

可以參考 Polygon 提供的教程 使用 Freemarker 來批量生成腳本。

"Preview Tests" 可以預覽生成的數據。

Stresses

這個頁面是用來對拍的。

點擊 "Add Stress" 就可以添加一組對拍,"Script pattern" 是一個生成數據的腳本,其中可以使用 "[10..100]" 之類的來表示在一個範圍內隨機選擇。

然後運行對拍,如果拍出錯就會顯示 "Crashed",並且可以一鍵把這組數據加到 Tests 中。

Solution Files

這個頁面是用來放解這道題的代碼的,可以是正解也可以是錯解。將錯解傳上來可以便捷地卡掉它們,也可以提醒自己需要卡掉它們。

Invocations

這個頁面是用來運行 solutions 的。

選擇代碼和測試點就可以運行了,之後可以在列表裏點進去("View")查看詳細信息。

評測狀態 "FL" 表示評測出錯了,一般是數據沒有過 validate 或者 validator/checker/interactor 之類的 RE 了。"RJ" 有兩種情況,一種是出現了 "FL",另一種是這份代碼第一個測試點就沒有通過。

如果用時在時限的一半到兩倍之間,會用黃色標識出來。

如果數據中存在變量沒有達到最小值或最大值,會在最下方提醒。

Issues

用來提 Issue 的地方。

Packages

Package 包含了一道題的全部信息,在出 CF 時是 CF 評測的依據(例如,如果賽時要修鍋,更新了 package 才會影響到 CF),其它時候可以用來導出。

"Verify" 是測試所有 solution 都符合標籤(AC、WA、TLE),並且 checker 通過 checker tests,validator 通過 validator tests。

Manage access

管理題目權限。

側邊欄

第一欄會顯示一些基本信息,如果有哪裏不符合規範(如 tests 沒有包含 pretests、有重複的測試點)就會顯示為黃色,鼠標移上去會顯示具體信息。

"View changes" 可以看修改的歷史記錄。需要注意的是 "switch" 不能用來回退到某一個版本,只能在某個版本的基礎上進行不產生衝突的修改,而這實際上是沒有意義的,所以 switch 相當於是隻讀的。

"Update Working Copy" 是獲取(他人的)更新。

"Commit Changes" 是提交你的更新。

commit 時如果有不合規範、需要警告的地方會列出來。

比賽管理

如果要出一場比賽,可以通過 "New Contest" 來創建比賽,就可以更加方便地管理題目。

比賽管理頁面的題目列表右上角的 "Add problems?" 是把一道已有的題目加到比賽裏。

側邊欄的 "New problem" 是新建一道題目加到比賽裏。

上面的 "Manage problem access" 是查看每道題的權限,下面的 "Manage developers list" 是管理有這場比賽的權限的人。通過 "New problem" 創建一道題以及添加一個新的 developer 時會自動添加權限,但通過 "Add problems?" 加進來的題不會給已有的 developer 權限。

側邊欄還可以預覽所有題面、所有題解、所有 validator & checker,下載整個比賽的 package,給題目重新編號。

注意事項

Polygon 雖然擁有版本管理系統,但是並沒有衝突解決系統,一旦發生衝突就無法進入題目管理界面,只能撤銷修改後手動重做。並且,只要修改了同一個文件,即使不是同一行也會發生衝突。

所以,使用 Polygon 時請與合作者保持溝通,commit 前保證沒有其他人在修改。