HydroOJ 的客觀題功能,潛力巨大,但不夠好用。期待易用性改進。
一、想法
本來覺得客觀題的配置,官方文檔已經寫得清清楚楚了,照着做就可以了,結果沒想到成爲了羣裏日經問題。
而且由於是日經問題,所以羣裏幾乎沒啥人會給新手回答此類問題,就很影響入門體驗。
直到前兩天指導了一個來問我的小夥伴之後,發現有些地方可以卡死整個建題流程,所以寫這一篇,稍作說明。
二、官方文檔
-
客觀題分兩部分,題面和答案。
- 題面相對簡單,就三種(填空、單選、多選),按格式寫就好
- 答案格式採用 yaml,縮進和符號要求比較複雜,很多人都是卡在答案上了
-
另外,文檔裏沒寫的是,默認情況下,多選題有部分分。也就是如果只答對了一部分答案,那麼會拿到一半的分數。
三、注意
1. 評測設置無法保存 config.yaml
配置好題面後,點創建會自動跳轉到 測試數據設置
(文件)。如果直接去點 評測設置
,會看到 題目類型:客觀題
的選項。然後點左邊的 config.yaml
按照官方文檔去設置,發現一直報錯無法保存,然後在無數次嘗試失敗之後,產生了極度自我懷疑和文檔懷疑。
注意,這裏無法保存是正常(?)的,因爲這個評測設置界面的客觀題編輯功能有 bug,而且一直沒修,所以不能用。
正確的使用方法有以下幾種:
- 在
測試數據設置
界面,直接創建
一個config.yaml
文件,並寫入保存。要麼上傳
,要麼拖拽,把一個本地文件直接傳上去。 - 如果已經在
評測設置
界面,就點擊右側出現的config.yaml
文件,編輯後保存。如果沒有,可以直接點上傳
,上傳一個本地寫好的config.yaml
上去。 - 下載一個之前已經做好的題,在已有的題上改。
另外,如果你點了 題目類型:客觀題
的選項,會自動生成出來一個 config.yaml
文件,這個文件裏的 answers:
下邊會有個 []
。如果你希望在這個 yaml 文件基礎上改,一定記得把這個 []
刪掉,不然會錯。
2. 部分分
很多的考試是沒有部分分的,以此來加強多選題的難度。
所以如果你希望關閉部分分,可以參考我之前的文章:HydroOJ 從入門到入土(9)查看自測、修改頁面標題、客觀題評分標準等(需改源碼)
3. yaml 格式
yaml 是個很嚴格的格式,尤其是空格。空格表示層級關係,絕對不能錯漏。空格不能與 tab 混用。
具體自行百度。
4. 一題多解的設置
一題多解在官方文檔裏有相應的配置,照着寫即可。說幾點注意事項:
-
如果答案中有空格,或者特殊符號,記得在答案外邊加引號。一般單引號就行,如果答案中有單引號,那就轉義或者用雙引號。
-
如果多個答案都是等價的,就把分數都寫成一樣的就行。
-
一題多解這個同時適用於選擇題和填空題,只認題號。也就是說,對於以下答案,
'2': # 填空題/選擇題,多答案,不同答案對應不同分數,注意空格縮進 'A': 30 # 也可以使用相同分數,即同時存在多個正確答案 'B': 10
- 如果題面是
{{ input(2) }}
,這些答案就是填空題的答案,任意一種答案都得分。 - 如果題面是
{{ select(2) }}
,這些答案就是選擇題的答案,任意一種答案都得分。
- 如果題面是
5. 填空題答案
填空答案相對比較難以控制,所以我建議是去掉所有非必要空格,並在題目要求中,
加粗大字
明確要求答題者作答時,
不要寫多餘空格,
不然一律判錯。
四、我的例子
如果你還是無法完成客觀題配置,我把官網的配置做成了一道題,放在了我之前的項目裏,下載後直接導入即可修改使用。
五、建議
我自己寫了一個 csv 轉 yaml 的小工具,防止手殘。不過暫時沒空整理到之前寫的 hydrolizer 裏,有空再說。
如果你要用到大量的客觀題,建議自己寫個工具。
感謝羣友@小蛐蛐 貢獻的客觀題生成 GUI 工具:https://github.com/StupidQu/HOPC