# [CMS Online Judge] 使用教學
:::info
目錄:
* [[CMS Online Judge] Docker安裝教學](/WKsC33XYRme4sM-Kkst_XA)
* [[CMS Online Judge] 完整安裝教學](/qLOLKTjlQ6ivpN0vg4yb-g)
* [[CMS Online Judge] 使用教學](/vzeJxoVGQPipzqd3R0_s9w)
* [[CMS Online Judge] 互動題、Checker](/cA70QEPVRROxvTxYujMTcw)
* [[CMS Online Judge] 給系統管理者的一些建議](/EOf5VvLOSM6BTjbVfb7vRg)
[Github連結](https://github.com/erichung09060/cms)
:::
## 後台管理
網址 : `localhost:8889`,或是把localhost換成該台主機的ip。
首先會看到的是登入介面

帳號為`admin`(也可以自己給定),密碼則會由系統隨機生成。

進去後左側會有Contest、Tasks、Users、Teams,在開啟比賽前需要在Tasks及Users中新增題目及使用者,建立好後再新增Contest,並把剛新增的使用者及題目加到Contest中。

### User
應該都還蠻淺顯易懂的,`Timezone`+8為台灣的時區。

### Task
`Name`不能打中文但`Title`可以,`Statements`可以放題目敘述,其他都不常用略

比較需要注意的是下方Dataset的部分

* `Time limit` : 時間限制,通常設1秒,可依題目需求做調整。
* `Meomry limit` : 記憶體限制,通常設256Mib,可依題目需求做調整。
* `Task Type` :
* `Batch` : 直接比對答案
* `Communication` : 參賽者的code會跟judge互動
* 其他不常用略
* `Compilation` : 可設定是否需要引入Loader Code
* `I/O` : 注意要留空白才會使用stdio
* `Output evaluation` : 可決定是否要用checker比對
* `Managers` : 可上傳`checker`、`manager`、`stub`、`grader`
* `Score Type` :
* `Sum` : 總分為所有測資獲得的分數總和
* `GroupMin` : 可設定測資的Group,同個Group中的測資要全對才給分,總分為所有Group的分數總和
* 其他不常用略
* `Score parameters` : `Score Type`不同參數也會不同
* `Sum` : 一個數字代表每一個測資能獲得的分數,通常是100/測資數
* `GroupMin` : 測資的Group及分數,例如`[[40, 10], [60, 20]]`代表前10個測資為一組,分數40分,接下來的20的測資為一組,分數60分
* 其他不常用略
* `Test cases` : 要記得把Public打勾才會啟用此測資
> 上面有些看不懂沒關係,因為更完整的說明在[CMS Online Judge 互動題、Checker](/cA70QEPVRROxvTxYujMTcw)
:::spoiler [補充] 測資的Dependency
當測資有需要設dependency的時候可以使用正規表達式來設定通過哪些測資會得幾分,並加入到`Score parameters`中,格式如下:

`[[0, "(00[0-2])"], [20, "(00[3-9]|01[0-3])"], [80, "(00[0-9]|01[0-9]|020)"]]`代表:
* 通過000-002的側資可以獲得0分
* 通過003-013的側資可以獲得20分
* 通過000-020的側資可以獲得80分
正規表達式則可以使用這個網站生成 : https://www.regex-range.com

(記得勾第一個就好)
:::
<br>
進到一場Contest後,可以在目錄的General中設定比賽的詳細資訊(如比賽的描述、開放的程式語言、上傳時間間隔),還可以點擊左側的Users及Tasks來把剛剛建立的使用者及題目加到比賽中。

## 參賽者介面
網址 : `localhost:8888`,或是把localhost換成該台主機的ip。
首先一樣會先看到登入介面,帳號和密碼為剛剛有加入比賽的User。

在Overview中可以看到所有題目的詳細資訊。

點擊左側每一題的Submissions後會到上傳程式碼的頁面,點選Choose File並按Submit後即可上傳程式碼。

## 計分板
網址 : `localhost:8890`,或是把localhost換成該台主機的ip。
計分板為即時更新,無需一直按F5。
