HydroOJ 從入門到入土(19)導入題解和標程、題目數據統計(>=4.12.0)

題解和 std 可以導入了,導出還會遠嗎?

一、導入題解和標程

新版本更新了這個功能,方便從其他題庫導入數據了。準備更新一下之前的 hydrolizer ,更新之前先做一下測試。

1. 目錄結構

根據 @undefined,題解和標程 std 應該分別放置在 solutionstd 目錄,這兩個目錄應該 和testdata同目錄。同時,@undefined 給出的樣例中,題解爲 md 格式,std爲 cc 格式。但至於其他格式是否可以,他只說了 能在語言設置找到對應的語言就行

爲了驗證具體使用方法,本次題目測試結構如下:

.
├── .DS_Store
├── problem.yaml
├── problem_zh.md
├── solution
│   ├── .DS_Store
│   ├── 11.py
│   ├── 22.pdf
│   ├── cpp.cpp
│   ├── jj1.png
│   ├── 題解.md
│   ├── 未命名文稿.docx
│   ├── 題解的副本.txt
│   ├── 未命名錶格.xlsx
│   └── 未命名幻燈片.pptx
├── std
│   ├── .DS_Store
│   ├── a.cc
│   ├── a.cpp
│   ├── b.cpp
│   ├── c.cc
│   ├── d.txt
│   ├── x.py
│   └── y.py3
└── testdata
    ├── 1.in
    ├── 1.out
    └── config.yaml

特別說明:這裏的 .DS_Store 是 mac 系統上一個臭名昭著的隱藏文件,只要打開過的文件夾都有,類似於以前 win 上的 desktop.ini

2. 測試結果

  1. 題目可以正常導入
  2. 導入之後會自動多出 5 條評測記錄,4AC + 1System Error。點進去查看那個System Error,發現報錯是 不支持的語言 DS_Store。 (省略問候蘋果 1w 字。。)
  3. cpp 的 std 可以正常評測,但是不顯示語言。
  4. txtpypy3 的文件直接沒測,被忽略了。
  5. 題解和標程的文件名可以爲中文。
  6. 題解有 10 條。沒錯,所有格式的文件全導進去了。但是方式是全部以純文本格式讀入,然後以 Markdown 格式來顯示,所以非純文本格式的題解(docx, pdf...還有那個萬惡的 .DS_Store!)全部亂碼,代碼格式的題解沒了換行。

3. 第二次測試

想起來去看了下源碼(L517-526),發現題解確實不挑食,而 std 評測最多導入 5 條, py 沒評測應該是數量超了。

另外,雖然 cpp 比較特殊,可以在沒有對應語言設置的條件下運行,但是在 語言 一欄並不會顯示所用語言,在題目 統計 中也沒法單獨選中這個語言進行篩選,只能在所有語言中顯示,所以決定給他加一個語言設置試試。

於是第二次測試。

cpp:
  compile: /usr/bin/g++ -Wall -std=c++14 -o foo foo.cpp -lm -I/include
  code_file: foo.cpp
  display: C++
  highlight: cpp
  monaco: cpp

題目結構如下:

.
├── problem.yaml
├── problem_zh.md
├── solution
│   ├── 題解2.html
│   └── 題解.md
├── std
│   ├── d.txt
│   ├── x.py
│   ├── x的副本.py.py3
│   └── y.py3
└── testdata
    ├── 1.in
    ├── 1.out
    └── config.yaml

測試結果:

std 文件 測試結果 語言
d.txt System Error: 不支持的語言 txt。
x.py 100 AC Python
x的副本.py.py3 100 AC Python
y.py3 System Error: 不支持的語言 py3。
a.cpp 100 AC CPP

html 的題解,只有跟 Markdown 相容的部分可以正常解析,其他部分還是會直接文本顯示然後擠在一起。

4. 總結:

關於題解:

  • 如果題目文件夾內存在 solution 文件夾並且文件夾內存在文件,OJ 會將文件夾內所有文件強制以Markdown 格式上傳到 題解
  • 爲避免亂碼或者格式錯誤,必須以 md格式存放題解。
  • 爲避免上傳多餘文件(尤其是 mac 系統),一定要注意過濾垃圾文件(下附方法)。

關於標程(std):

  • 如果題目文件夾內存在 std 文件夾並且文件夾內存在文件,OJ 會將文件夾內所有文件強制送到評測機進行評測。
  • 目前版本(4.12.2)最大評測 std 的數量爲 5 個。
  • std 的格式(後綴名)需要與 語言設置 裏的完全一致。比如,語言設置 中有個類型是 py.python3,如果則想評測此類型的文件,文件的後綴名必須是 .py.py3 而不能是 .py3
  • 對於常用的 cpp 格式,可以在 語言設置 中新增一個 cpp 類型,但顯得有些多餘。所以我傾向於把原有的 cc 格式全部改爲 cpp 格式來解決這個問題。
  • 這個標程功能應該是用來檢驗題目正確性的,應該能檢測出 std 在當前 OJ 的環境下,會不會 TLE 或者 MLE,或者出現不同編譯器帶來的 RE,等等。

關於複製:

  • 複製題目的時候,不會複製題解和評測記錄。
  • 如果希望顯示覆制題目的來源,可以根據官網上@Milmon 的Markdown插件,自己寫個前端插件。 具體可以看這篇博客

去除 .DS_Store 的解決方法

不要用自帶的右鍵 壓縮,使用專門的壓縮軟件(比如 macZip),然後過濾掉 .DS_Store 或者隱藏文件即可。

二、題目數據統計

更新到 4.12.0 之後,題目右側 文件 下方會出現一個 統計,點開之後可以看到這道題提交答案的詳細的統計情況。

1. 範圍

  • 所有人都可以看到

  • 可以統計到包括作業比賽的所有提交記錄,比較方便。

  • 只統計 AC 代碼。

2. 篩選選項

項目 排序 語言
運行時間 ASC(升序) 所有語言
內存佔用 DESC(降序) C++
代碼長度 Python
提交時間 ...

3. 無關緊要的小 bug

  • 已提 issue(#809

  • 在下方 遞交統計 中,對於上傳題目時自帶的 std 評測,似乎只統計最後一次的評測記錄。

  • 而且此前的題目多次刪除並重新導入之後,題目統計中會帶着之前所有這道題的提交記錄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章