程式解題系統使用手冊
* Online Judge 的運作原理
 

裁判系統會以數量不一的測試資料去測試您所送出的程式碼來判定您的程式是否完全正確,若通過所有的測試資料的測驗, 則系統認定您的程式碼為通過,否則將會呈現不同原因的結果,如 NA, WA, TLE, MLE, OLE, CE, RE...等。

系統特色:

  • 詳細的錯誤資訊:包含錯誤答案發生在第幾行,及正確答案應為什麼。完整的 Runtime Error 資訊, 共包含了 SIGSEGV, SIGFPE, SIGTERM, SIGABRT, SIGKILL...等多種 Runtime Error 訊息,並且提示可能的原因。
  • 使用者參與管理工作,使用者亦可利用系統出題目以及舉辦考試。
  • 可直接分享程式碼,以及站內簡訊進行討論。
  • 測驗結束後,可對程式碼進行分析,找出作弊者。
  • 可預約測驗,時間一到即可自動開始,不需管理者啟動。
* 主要對象
 

主要對象為程式語言初學者

* 錯誤訊息的意義
 

AC: Accept 即表示通過
NA: Not Accept 表示在多個測資點的情況下,有部分測資點無法通過
WA: Wrong Answer 表示答案錯誤, 請仔細比對,務必符合題目要求
TLE: Time Limit Exceed 表示執行超過時間限制
MLE: Memory Limit Exceed 表示程序超過記憶體限制
OLE: Output Limit Exceed 表示程序輸出超過限制
RE: Runtime Error 表示執行時錯誤,通常為記憶體配置錯誤 如:使用了超過陣列大小的位置
RF: Restricted Function 表示使用了被禁止使用的函式,並在錯誤訊息中指明使用了什麼不合法的函式。
CE: Compile Error 表示編譯錯誤,本系統採用 g++ 作為預設編譯器
SE: System Error 包含 Compile, Runtime 等無法確定原因的錯誤均屬於 System Error
由於本系統以初學者為導向,因此錯誤訊息儘可能提供最詳細的錯誤資訊,如 WA 訊息會告知您正確答案,以及在第幾組資料時發生, 讓使用者比較容易判斷錯誤發生在哪哩,而不會像在ACM/UVa 裡明明做對了,但是就是有格式錯誤,卻找不出格式錯誤在哪的困境。

* 各項解題語言所使用的系統編譯器
 

本系統目前支援 C、C++ 解題

C/C++:使用 g++
C++ 編譯參數為:-lm -lcrypt -O2 -pipe -DONLINE_JUDGE
C 編譯參數為:-lm -lcrypt -O2 -pipe -ansi -DONLINE_JUDGE

* 使用者寫題目時建議使用的編譯器
 

建議使用 Dev-C++Code::Blocks 等免費軟體。

* 程式執行的速度的計算
 

本系統對每個獲得 AC 的程式會一併顯示執行時間(以毫秒為單位),程式執行時間會隨系統當時負載而有的差異,以本系統為例, 一個不做工作的程式執行就會花費約 4 ms,因此初學者只需專注於程式的正確性,可以暫不需過於在意執行時間, 只要在題目規定的時間內執行完畢即可。

* 多測資點的計分原則
 

* 任一題目均可以依照出題者意願設定成分段或不分段計分。出題者最多可分為 10 段計分,每一段均可依據困難度配分,總和為100分。
* 每一個點不必然只有一組測資,多測資點的題目仍然可以在每個測資中使用多組測資,因此仍然要以多組測資的方式讀入。
* 當題目為多測資點時,假設共 10 個測資點,對每一個測資點來說,其 Timelimit 為題目 Time limit 的 10 分之一,小於 1 秒以 1 秒為其時間限制。

* penalty 的計算原則及目的
 

penalty 是在程式競賽中評斷選手表現的一個指標,主要目的就是要了解選手解題速度及錯誤率。本系統的 penalty 規則為: 當題目通過時即加上通過時的時間(以分鐘計),當送出的題目不通過,則 penalty 每一次再加 20 分鐘。在相同的正確題數下, penalty 越低排名越高。

* 小圖示所代表的意義
 

:代表目前程式碼是「上鎖」的狀態,按下此圖形就會解鎖。
:代表目前程式碼是「公開」的狀態,按下此圖形就會上鎖。
:代表將該程式碼進行重測,一般來說,只有在題目或測資有更動時,才需要重測。

* 後記:關於 ZeroJudge
 

ZeroJudge 是一個 Online Judge 系統亦即線上解題系統,中文來說有許許多多不同的翻譯名詞,諸如:在線裁決系統、在線評判系統、在線提交系統... 等等不一而足,建議還是直接稱呼 Online Judge 系統。主要是用來讓有意練習程式語言的人士(主要是學生),有一些題目可以練習, 並且可以知道自己所寫的程式是不是正確。

目前世界上最著名的 Online Judge 便是大名鼎鼎的 UVa Online Judge System,沒聽過?那是因為大家都叫他 ACM。至於其中原因請參考 DJWS 所寫的『Online Judge System 起源與由來』。目前由西班牙 Valladolid (巴亞多利)大學(http://uva.onlinejudge.org/)所維護, 目前已經有2000個題目,讓全世界的程式愛好者們想辦法去解決,這是全世界對寫程式有興趣的人一個練習的好地方。

然而,UVa(ACM)題目大多數都是需要用到許多演算法及程式技巧,對於中上程度的程式學習者具有很好的練習效果,但對於初學者, 可就會覺得障礙連連,深受打擊了。

本校(指ZeroJudge開發者所服務之高師大附中)練習程式設計的學生也有遭遇類似的情況,因此曾積極尋找備有初級題目的 Online Judge 系統 (首先排除國外網站,因為語言障礙足以擊退絕大多數初學者),可惜無法如願,並且發現國內各大學並未提供公開上線, 可供練習的 Online Judge 系統。也曾嘗試考慮北京大學開發的(Peking JudgeOnline),但該系統並未開放原始碼許多功能無法動手修改。 最後終於決定自行開發,於是 ZeroJudge 計畫誕生,代表從零開始。

ZeroJudge 系統大事紀:

  • 94學年度首度運用在程式考試上,該版本為手動驗證,由人工判斷程式是否正確,此時僅為一個線上測驗系統。
  • 2006年中,改寫整個操作模式,使其朝向 Online Judge 架構發展,仍應用於程式考試上。
  • 同年,完成自動裁判服務 (Judge Server),可判斷出 Accept, Wrong Answer, Time Limit Exceed, Runtime Error, Restricted Functions, Compile Error, System Error...等狀態,至此可算是一個堪用的 Online Judge 系統。
  • 2007年初,公開上線供公眾練習使用,同時借此檢驗系統穩定度,並逐步發掘問題,逐步修正。
  • 2007年中,發展完成多重判決及條件式判決(Special Judge),因此可以正確判定可列舉的多重解答以及難以列舉或甚至無法列舉,但有規則可循的不特定測資。
  • 2007年底,獲教育部全國校園軟體創意競賽 教學應用及自由創意組 第二名。
  • 2008年初,實作完成多人管理模式,使用者可增加題目及舉辦考試,正式具備使用者參與的特性。
  • 2008年底,順利舉辦第一屆海峽兩岸青少年程式設計競賽,報名人數達 2千人以上。通過這場大規模的競賽可證明系統無論是在效能、穩定度方面均具備一定的水準。
  • 2009年,獲得教育部『國際大專院校程式設計推廣與培訓計劃』採用作為解題平臺,網址: http://ptc.moe.edu.tw/ 。
  • 2010年,獲『高雄市資訊學科能力競賽複賽』採用作為競賽系統。