




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一種腳本化在線評(píng)測(cè)系統(tǒng)的實(shí)現(xiàn)中山紀(jì)念中學(xué)唐適之The_Roast_DuckYAUJ = YET ANOTHER UNIVERSAL JUDGE本項(xiàng)目是基于中山紀(jì)中原有的Fortuna OJ部分重構(gòu)的,重寫了大部分后臺(tái)和小部分前端,目前仍處于測(cè)試階段。在此感謝原作者moreD學(xué)長(zhǎng)的前期工作。Fortuna OJ項(xiàng)目源碼可以在https:/ = YET ANOTHER UNIVERSAL JUDGEYAUJ是受VFK的UOJ啟發(fā)編寫的,感謝VFK同學(xué)提供了一個(gè)封裝得非常好的sandbox。我用它替代了我一開始使用的libsandbox作為評(píng)測(cè)核心。YAUJ = YET ANOTHER UNIVER
2、SAL JUDGEYAUJ是我的一個(gè)嘗試。解決了一些問(wèn)題但是也有自己的一些缺點(diǎn)什么是腳本化這里的腳本化是指,讓OJ支持使用腳本定制試題,以支持更靈活的題目類型。為什么是腳本化為什么不直接使用SPJ?為什么是腳本化OJ并不是一個(gè)簡(jiǎn)單的測(cè)試器,需要與選手進(jìn)行大量的操作。最簡(jiǎn)單的,也需要讓選手知道每個(gè)點(diǎn)的時(shí)間、空間限制是多少(或沒(méi)有?),也需要顯示每個(gè)測(cè)試點(diǎn)的詳細(xì)結(jié)果(時(shí)間、空間、狀態(tài)、信息?)實(shí)現(xiàn)對(duì)不同類型試題的通用處理,不僅要定義如何評(píng)測(cè)評(píng)測(cè),也要影響網(wǎng)頁(yè)前端網(wǎng)頁(yè)前端的行為。使用腳本以避免繁雜的表單繁雜的表單。為什么是腳本化用UOJ上已經(jīng)舉過(guò)的一個(gè)例子:提交兩個(gè)程序,一個(gè)壓縮一個(gè)解壓?那時(shí)空消耗
3、怎么顯示?為什么是腳本化用UOJ上已經(jīng)舉過(guò)的一個(gè)例子:提交兩個(gè)程序,一個(gè)壓縮一個(gè)解壓?那時(shí)空消耗怎么顯示?或者說(shuō)提交答案題需要提供數(shù)據(jù)下載。網(wǎng)頁(yè)前端怎樣知道有那些文件可以允許下載?為什么是腳本化用UOJ上已經(jīng)舉過(guò)的一個(gè)例子:提交兩個(gè)程序,一個(gè)壓縮一個(gè)解壓?那時(shí)空消耗怎么顯示?或者說(shuō)提交答案題需要提供數(shù)據(jù)下載。網(wǎng)頁(yè)前端怎樣知道有那些文件可以允許下載?稍微復(fù)雜一點(diǎn)但也很常見的另一種情況?USACO上有一些題要求選手程序讀入一個(gè)在所有測(cè)試點(diǎn)都不變的、可供選手下載的一個(gè)字典。怎樣體現(xiàn)?一.實(shí)現(xiàn)腳本用什么實(shí)現(xiàn)腳本?找一個(gè)現(xiàn)成的腳本語(yǔ)言?Lua聽起來(lái)不錯(cuò)。語(yǔ)法簡(jiǎn)單,并且有將其解釋器嵌入在C中的庫(kù)。Java
4、Script?現(xiàn)在它已經(jīng)不僅僅能在瀏覽器上運(yùn)行了,這樣可以用Js在后端評(píng)測(cè)而在前端預(yù)處理以節(jié)約編譯時(shí)間。一.實(shí)現(xiàn)腳本用什么實(shí)現(xiàn)腳本?可惜這些優(yōu)點(diǎn)是我后來(lái)才想到的一.實(shí)現(xiàn)腳本用什么實(shí)現(xiàn)腳本?我自己實(shí)現(xiàn)了一個(gè)(解釋器?編譯器?)嗯,翻譯器。一.實(shí)現(xiàn)腳本用什么實(shí)現(xiàn)腳本?我自己實(shí)現(xiàn)了一個(gè)(解釋器?編譯器?)嗯,翻譯器。將腳本翻譯成C+,編譯后執(zhí)行。一.實(shí)現(xiàn)腳本這是重復(fù)造輪子嗎?這樣實(shí)現(xiàn)還是有一點(diǎn)好處的一.實(shí)現(xiàn)腳本1. 編譯語(yǔ)言執(zhí)行效率更高。后來(lái)的調(diào)試證明,這種腳本也是有效率要求的。2. 不用專門禁用一些可能危及系統(tǒng)安全的函數(shù),也便于添加新的函數(shù)3. 語(yǔ)法更貼近OIer習(xí)慣這是一種腳本化的C+語(yǔ)法,支持
5、動(dòng)態(tài)類型、內(nèi)建list和dict。一.實(shí)現(xiàn)腳本如何實(shí)現(xiàn)?一.實(shí)現(xiàn)腳本1. Bison + Flex。Bison是一個(gè)語(yǔ)義分析器,F(xiàn)lex是一個(gè)詞法分析器,協(xié)同使用。通過(guò)指定語(yǔ)法規(guī)則,它們內(nèi)部通過(guò)建立自動(dòng)機(jī)最終輸出一段代碼的語(yǔ)法樹。(可以通過(guò)這種方法實(shí)現(xiàn)一個(gè)作弊檢測(cè)工具嗎?一.實(shí)現(xiàn)腳本2. 實(shí)現(xiàn)動(dòng)態(tài)類型解釋器。二.與網(wǎng)頁(yè)交互:文件授權(quán)這是一種意在簡(jiǎn)化與網(wǎng)頁(yè)交互的模型。評(píng)測(cè)中涉及的文件分為5類(可重復(fù)):0. 選手程序?qū)ζ溆凶x權(quán)限1. 選手程序?qū)ζ溆袑憴?quán)限2. 選手提交的文件(源碼或純文本)3. 數(shù)據(jù)文件4. 可執(zhí)行文件哪個(gè)程序讀?哪個(gè)程序?qū)懀靠捎媚切┱Z(yǔ)言?屬于哪個(gè)(些)點(diǎn)?提供下載?源程序是哪個(gè)
6、?每個(gè)點(diǎn)的運(yùn)行時(shí)空限制?(如果是spj程序則不用指定)二.與網(wǎng)頁(yè)交互:文件授權(quán)腳本分為兩部分:初始化、執(zhí)行二.與網(wǎng)頁(yè)交互:文件授權(quán)腳本在評(píng)測(cè)機(jī)上執(zhí)行“初始化”和“執(zhí)行”。讀取文件權(quán)限以添加sandbox的限制規(guī)則。腳本在網(wǎng)頁(yè)服務(wù)器執(zhí)行“初始化”,獲取文件授權(quán),其中包含的信息足以滿足頁(yè)面展示要求二.與網(wǎng)頁(yè)交互:通信網(wǎng)頁(yè)服務(wù)器和評(píng)測(cè)機(jī)分置在不同的機(jī)器上,使用JSON-RPC通信。評(píng)測(cè)機(jī)是RPC Server,網(wǎng)頁(yè)服務(wù)器是RPC Client。這是因?yàn)槟_本需要執(zhí)行以執(zhí)行評(píng)測(cè),而網(wǎng)頁(yè)服務(wù)器只需發(fā)起評(píng)測(cè)以及獲得信息。二.與網(wǎng)頁(yè)交互:通信在網(wǎng)頁(yè)Server和RPC Server間通信也帶來(lái)了一些新的麻煩之
7、處。要怎么從網(wǎng)頁(yè)Server異步地向RPC Server發(fā)送并接受請(qǐng)求?由于Fortuna OJ使用了php作為服務(wù)器腳本語(yǔ)言,對(duì)實(shí)現(xiàn)異步構(gòu)成了一些障礙。我使用php-resque項(xiàng)目在后臺(tái)執(zhí)行了一個(gè)隊(duì)列,將正在等候的提交加入隊(duì)列,每次取隊(duì)首發(fā)送請(qǐng)求。二.與網(wǎng)頁(yè)交互:通信從網(wǎng)頁(yè)服務(wù)器端添加的數(shù)據(jù)需要同步至評(píng)測(cè)機(jī)。其中要處理同步失敗、在提交時(shí)確認(rèn)數(shù)據(jù)版本等問(wèn)題。提交時(shí),還需限制正在運(yùn)行的程序的總數(shù)。這些都需要通過(guò)恰當(dāng)?shù)腞PC請(qǐng)求設(shè)計(jì)來(lái)實(shí)現(xiàn)。RPC請(qǐng)求應(yīng)包括詢問(wèn)狀態(tài)、請(qǐng)求同步數(shù)據(jù)等。這偏離了“腳本化”的主題,在此不做詳細(xì)介紹。二.與網(wǎng)頁(yè)交互:通信評(píng)測(cè)機(jī)的RPC Server顯然應(yīng)是異步程序,讀寫全
8、局變量時(shí)要處理好多個(gè)線程間的關(guān)系,及一些其它問(wèn)題(system函數(shù)居然不是線程安全的?二.與網(wǎng)頁(yè)交互:通信網(wǎng)頁(yè)服務(wù)器端,php-resque與生成網(wǎng)頁(yè)的php代碼也需異步通信。這里我通過(guò)向localhost發(fā)送http請(qǐng)求變通解決。三.向下兼容添加普通試題也需要手寫腳本嗎?既然是通用腳本,為什么不寫一個(gè)由傳統(tǒng)題向腳本自動(dòng)轉(zhuǎn)化的過(guò)程?這樣所有題都可以用腳本執(zhí)行??偨Y(jié)以上就是YAUJ的大體實(shí)現(xiàn)??偟膩?lái)說(shuō),它解決了使用表單進(jìn)行通訊時(shí),通信復(fù)雜度隨著題目類型增多而增大的問(wèn)題,提供了很大的可定制性,降低了網(wǎng)頁(yè)服務(wù)器和評(píng)測(cè)機(jī)的耦合。但是也帶來(lái)了一些可能影響體驗(yàn)的小問(wèn)題,比如加題時(shí)長(zhǎng)達(dá)半分鐘的編譯時(shí)間??偨Y(jié)另外一些可以被腳本化簡(jiǎn)化之處總結(jié)我的代碼可以在Github上找到。不過(guò)沒(méi)有文檔,而且一些bug修復(fù)后可能我沒(méi)有commi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建三明2024~2025學(xué)年高一下冊(cè)期末模擬數(shù)學(xué)試題學(xué)生卷
- 互聯(lián)網(wǎng)平臺(tái)數(shù)據(jù)驅(qū)動(dòng)決策的個(gè)性化教育解決方案考核試卷
- 形狀記憶纖維在智能建筑中的應(yīng)用案例分析考核試卷
- 合成氣制柴油技術(shù)環(huán)保技術(shù)集成與應(yīng)用考核試卷
- 產(chǎn)業(yè)升級(jí)中的區(qū)域創(chuàng)新能力建設(shè)考核試卷
- 部編教材三年級(jí)語(yǔ)文下冊(cè)各單元試卷(全冊(cè))
- 2025年中國(guó)PT泵嘴試驗(yàn)臺(tái)數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025年中國(guó)PET不干膠數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025年中國(guó)D-蛋氨酸數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)48頭超寬高速噴繪機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 信息安全培訓(xùn)《釣魚郵件防范技巧》
- 2025至2030中國(guó)燙印箔行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 部編版高一語(yǔ)文必修上冊(cè)教案計(jì)劃
- 臨時(shí)工請(qǐng)假管理制度
- 小學(xué)用電安全課件
- 2025年北京市高考英語(yǔ)試卷真題(含答案解析)
- 2025年中國(guó)浮萍項(xiàng)目投資可行性研究報(bào)告
- 商洛學(xué)院《大學(xué)學(xué)術(shù)綜合英語(yǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年高考英語(yǔ)全國(guó)二卷聽力試題答案詳解講解(課件)
- 高級(jí)采氣工理論練習(xí)卷附答案
- 打架斗毆等暴力事件處理流程圖
評(píng)論
0/150
提交評(píng)論