題解和 std 可以導入了,導出還會遠嗎?
一、導入題解和標程
新版本更新了這個功能,方便從其他題庫導入數據了。準備更新一下之前的 hydrolizer ,更新之前先做一下測試。
1. 目錄結構
根據 @undefined,題解和標程 std 應該分別放置在 solution
和 std
目錄,這兩個目錄應該 和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. 測試結果
- 題目可以正常導入
- 導入之後會自動多出 5 條評測記錄,4AC + 1System Error。點進去查看那個System Error,發現報錯是
不支持的語言 DS_Store。
(省略問候蘋果 1w 字。。) cpp
的 std 可以正常評測,但是不顯示語言。txt
,py
和py3
的文件直接沒測,被忽略了。- 題解和標程的文件名可以爲中文。
- 題解有 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 評測,似乎只統計最後一次的評測記錄。 -
而且此前的題目多次刪除並重新導入之後,題目統計中會帶着之前所有這道題的提交記錄。