一個為競技程式設計的C++本地執行小工具
推薦搭配VSCode使用
- 自動編譯執行並隱藏執行檔
- 用檔案作為程式輸出入
- 一些整理程式碼之類的功能(詳見下方介紹)
此處有很多功能都會用最新程式
未註明表示為當前目錄下掃描最後編輯的.cpp檔案
請注意當前目錄裡不要太多東東
否則會卡給你看
P.S.建立檔案也是一種編輯
- Python(必須)
版本影響不大(吧)
裝完把requirements.txt裡的東東裝一下就好了 - gcc(C++必須)
你可以從任何來源安裝,只要保證g++指令可用即可
推薦MSYS - rustc(Rust必須)
你可以從任何來源安裝,只要保證rustc指令可用即可 - clang-format(非必須)
裡面有整合這東東
想用就裝吧
下載zip或直接git clone就好
推薦git clone --depth=1
然後裝好依賴項
並把安裝目錄放進PATH就可以了
- 系統
這是主要為Windows設計的
因為Python無法直接呼叫PATH中的.py檔
所以我寫了個cpt.cpp來處理
Linux則是用cpt來處理
但部分功能可能對Linux的支援不太OK\ - 檔名
中文檔名基本上只要gcc版本正確能處裡就OK
含空格的路徑則是只要不需要輸入就不會有問題
但需要輸入時就不一定了 - 語言
目前支援C++和Rust
會檢測CPT_TARGET的值來決定使用哪個編譯器
值可以是"CPP"或"RUST",默認C++
但部分功能可能對Rust的支援不太OK\
下方的自動測試指令能自動讀取範測並執行
但需要一些額外設定
首先,雙擊listener.pyw或listener.bat可開啟接收器
也可以用cpt auto init
發射部分需要瀏覽器能在開啟題目時
向"http://127.0.0.1:5555/writetestcase" 自動發指定格式的POST REQUEST
"http://127.0.0.1:5555/presenttestcase" 也是另一個選擇
還可以用"/waitsubmit"做自動提交
這部分我在listeners資料夾中提供了一些Tempermonkey腳本的範例
如有缺漏可自行嘗試編寫
在cmd/PowerShell打"cpt"加空格接指令內容 改成rpt會切換到Rust模式
{}表必填參數 ()表非必填參數
全部用法都是"cpt 設定名稱 值"
- v
C++版本,可以是11,14,17,20
但若gcc裝到較舊的版本可能無法使用C++20 - args
編譯參數
執行時皆會自動判定是否需編譯
但更改設定不會自動重新編譯
會簡化編譯輸出
- run
執行最新程式 - c
強制重新編譯最新程式 - r {程式檔} (輸入檔) (輸出檔)
執行並使用檔案輸出入
省略輸出檔則直接輸出
省略輸入則持續輸入直到"\eof" - rf (輸入檔) (輸出檔)
同上、但使用最新程式 - rt
執行最新程式並計時
使用PowerShell的計時功能 - gdb
用gdb開最新程式
- template
用template.cpp覆寫最新程式 - format
用clang-format整理最新程式 - usaco (程式檔) {名稱}
使main裡的cin/cout在OJ上指向"名稱.in"/"名稱.out" - import 名稱
載入import裡的範例
以下的皆為"cpt tidy"的子指令
分類時不分大小寫
- fold {name}
把同樣前綴的檔案打包成資料夾 - unfold {name}
把資料夾檔案拆出 - foldaz
把az/09前綴的檔案打包成資料夾
foldAZ則是以AZ/09 - unfoldaz
上面那個的反操作
以下的皆為"cpt auto"的子指令\
- init
開啟接收器 - test
自動全部執行過一遍並顯示完整數據 - judge
自動全部執行過一遍並顯示評測結果
非嚴格檢查,但若答案不唯一建議用test再自己看
AC後會問要不要submit - submit 提交目前程式碼
- mhc (路徑)
執行最新程式並使用檔案輸出入(變化版)
路徑若為空或資料夾則列出檔案用於輸入
否則直接使用該檔案輸入
注意:此處不掃描子資料夾
除此之外,這指令會特判zip檔並解壓縮
還可以輸入解壓縮密碼
確定輸入後可鍵入輸出檔名
特別的是,程式會先開始執行後再確認輸出入檔
但確認完輸出檔名後程式才會拿到輸入