一種腳本化在線評測系統(tǒng)的實現(xiàn)_第1頁
一種腳本化在線評測系統(tǒng)的實現(xiàn)_第2頁
一種腳本化在線評測系統(tǒng)的實現(xiàn)_第3頁
一種腳本化在線評測系統(tǒng)的實現(xiàn)_第4頁
一種腳本化在線評測系統(tǒng)的實現(xiàn)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一種腳本化在線評測系統(tǒng)的實現(xiàn)中山紀念中學唐適之The_Roast_DuckYAUJ = YET ANOTHER UNIVERSAL JUDGE本項目是基于中山紀中原有的Fortuna OJ部分重構的,重寫了大部分后臺和小部分前端,目前仍處于測試階段。在此感謝原作者moreD學長的前期工作。Fortuna OJ項目源碼可以在https:/ = YET ANOTHER UNIVERSAL JUDGEYAUJ是受VFK的UOJ啟發(fā)編寫的,感謝VFK同學提供了一個封裝得非常好的sandbox。我用它替代了我一開始使用的libsandbox作為評測核心。YAUJ = YET ANOTHER UNIVER

2、SAL JUDGEYAUJ是我的一個嘗試。解決了一些問題但是也有自己的一些缺點什么是腳本化這里的腳本化是指,讓OJ支持使用腳本定制試題,以支持更靈活的題目類型。為什么是腳本化為什么不直接使用SPJ?為什么是腳本化OJ并不是一個簡單的測試器,需要與選手進行大量的操作。最簡單的,也需要讓選手知道每個點的時間、空間限制是多少(或沒有?),也需要顯示每個測試點的詳細結果(時間、空間、狀態(tài)、信息?)實現(xiàn)對不同類型試題的通用處理,不僅要定義如何評測評測,也要影響網(wǎng)頁前端網(wǎng)頁前端的行為。使用腳本以避免繁雜的表單繁雜的表單。為什么是腳本化用UOJ上已經(jīng)舉過的一個例子:提交兩個程序,一個壓縮一個解壓?那時空消耗

3、怎么顯示?為什么是腳本化用UOJ上已經(jīng)舉過的一個例子:提交兩個程序,一個壓縮一個解壓?那時空消耗怎么顯示?或者說提交答案題需要提供數(shù)據(jù)下載。網(wǎng)頁前端怎樣知道有那些文件可以允許下載?為什么是腳本化用UOJ上已經(jīng)舉過的一個例子:提交兩個程序,一個壓縮一個解壓?那時空消耗怎么顯示?或者說提交答案題需要提供數(shù)據(jù)下載。網(wǎng)頁前端怎樣知道有那些文件可以允許下載?稍微復雜一點但也很常見的另一種情況?USACO上有一些題要求選手程序讀入一個在所有測試點都不變的、可供選手下載的一個字典。怎樣體現(xiàn)?一.實現(xiàn)腳本用什么實現(xiàn)腳本?找一個現(xiàn)成的腳本語言?Lua聽起來不錯。語法簡單,并且有將其解釋器嵌入在C中的庫。Java

4、Script?現(xiàn)在它已經(jīng)不僅僅能在瀏覽器上運行了,這樣可以用Js在后端評測而在前端預處理以節(jié)約編譯時間。一.實現(xiàn)腳本用什么實現(xiàn)腳本?可惜這些優(yōu)點是我后來才想到的一.實現(xiàn)腳本用什么實現(xiàn)腳本?我自己實現(xiàn)了一個(解釋器?編譯器?)嗯,翻譯器。一.實現(xiàn)腳本用什么實現(xiàn)腳本?我自己實現(xiàn)了一個(解釋器?編譯器?)嗯,翻譯器。將腳本翻譯成C+,編譯后執(zhí)行。一.實現(xiàn)腳本這是重復造輪子嗎?這樣實現(xiàn)還是有一點好處的一.實現(xiàn)腳本1. 編譯語言執(zhí)行效率更高。后來的調試證明,這種腳本也是有效率要求的。2. 不用專門禁用一些可能危及系統(tǒng)安全的函數(shù),也便于添加新的函數(shù)3. 語法更貼近OIer習慣這是一種腳本化的C+語法,支持

5、動態(tài)類型、內建list和dict。一.實現(xiàn)腳本如何實現(xiàn)?一.實現(xiàn)腳本1. Bison + Flex。Bison是一個語義分析器,F(xiàn)lex是一個詞法分析器,協(xié)同使用。通過指定語法規(guī)則,它們內部通過建立自動機最終輸出一段代碼的語法樹。(可以通過這種方法實現(xiàn)一個作弊檢測工具嗎?一.實現(xiàn)腳本2. 實現(xiàn)動態(tài)類型解釋器。二.與網(wǎng)頁交互:文件授權這是一種意在簡化與網(wǎng)頁交互的模型。評測中涉及的文件分為5類(可重復):0. 選手程序對其有讀權限1. 選手程序對其有寫權限2. 選手提交的文件(源碼或純文本)3. 數(shù)據(jù)文件4. 可執(zhí)行文件哪個程序讀?哪個程序寫?可用那些語言?屬于哪個(些)點?提供下載?源程序是哪個

6、?每個點的運行時空限制?(如果是spj程序則不用指定)二.與網(wǎng)頁交互:文件授權腳本分為兩部分:初始化、執(zhí)行二.與網(wǎng)頁交互:文件授權腳本在評測機上執(zhí)行“初始化”和“執(zhí)行”。讀取文件權限以添加sandbox的限制規(guī)則。腳本在網(wǎng)頁服務器執(zhí)行“初始化”,獲取文件授權,其中包含的信息足以滿足頁面展示要求二.與網(wǎng)頁交互:通信網(wǎng)頁服務器和評測機分置在不同的機器上,使用JSON-RPC通信。評測機是RPC Server,網(wǎng)頁服務器是RPC Client。這是因為腳本需要執(zhí)行以執(zhí)行評測,而網(wǎng)頁服務器只需發(fā)起評測以及獲得信息。二.與網(wǎng)頁交互:通信在網(wǎng)頁Server和RPC Server間通信也帶來了一些新的麻煩之

7、處。要怎么從網(wǎng)頁Server異步地向RPC Server發(fā)送并接受請求?由于Fortuna OJ使用了php作為服務器腳本語言,對實現(xiàn)異步構成了一些障礙。我使用php-resque項目在后臺執(zhí)行了一個隊列,將正在等候的提交加入隊列,每次取隊首發(fā)送請求。二.與網(wǎng)頁交互:通信從網(wǎng)頁服務器端添加的數(shù)據(jù)需要同步至評測機。其中要處理同步失敗、在提交時確認數(shù)據(jù)版本等問題。提交時,還需限制正在運行的程序的總數(shù)。這些都需要通過恰當?shù)腞PC請求設計來實現(xiàn)。RPC請求應包括詢問狀態(tài)、請求同步數(shù)據(jù)等。這偏離了“腳本化”的主題,在此不做詳細介紹。二.與網(wǎng)頁交互:通信評測機的RPC Server顯然應是異步程序,讀寫全

8、局變量時要處理好多個線程間的關系,及一些其它問題(system函數(shù)居然不是線程安全的?二.與網(wǎng)頁交互:通信網(wǎng)頁服務器端,php-resque與生成網(wǎng)頁的php代碼也需異步通信。這里我通過向localhost發(fā)送http請求變通解決。三.向下兼容添加普通試題也需要手寫腳本嗎?既然是通用腳本,為什么不寫一個由傳統(tǒng)題向腳本自動轉化的過程?這樣所有題都可以用腳本執(zhí)行。總結以上就是YAUJ的大體實現(xiàn)??偟膩碚f,它解決了使用表單進行通訊時,通信復雜度隨著題目類型增多而增大的問題,提供了很大的可定制性,降低了網(wǎng)頁服務器和評測機的耦合。但是也帶來了一些可能影響體驗的小問題,比如加題時長達半分鐘的編譯時間。總結另外一些可以被腳本化簡化之處總結我的代碼可以在Github上找到。不過沒有文檔,而且一些bug修復后可能我沒有commi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論