一個現代化的線上程式碼評判系統,支援多種程式語言的自動評測,具備直觀的Web介面和強大的動態配置功能。
- 多語言支援: C、C++、Java、Python、JavaScript、Go
- 即時執行: 安全的沙箱環境執行程式碼
- 詳細結果: 執行時間、記憶體使用、錯誤訊息
- 智慧差異對比: 使用Myers差分算法進行精確的字詞級比對,支援智能模式(忽略大小寫、去除尾部空白)
- 特殊字符視覺化: 顯示換行符、Tab符、空格和尾部空白,助於調試
- 執行限制控制: 可調整執行時間限制(1-60秒)
- 記憶體管理: 動態設定記憶體限制(1-1024MB)
- 編譯配置: 自訂編譯時間限制(1-60秒)
- 無限制輸出: 支援任意長度的程式輸出
- 彈性測試案例: 無數量限制的測試案例上傳
- 批量上傳: 支援 .in/.out 檔案格式
- 預覽功能: 即時查看測試案例內容
- 匯入/匯出: ZIP 檔案格式批量處理
- 智慧驗證: 自動檢查檔案格式和內容
- 自動保存: 智能的程式碼自動保存機制
- 程式碼匯入/匯出: 支援多種程式語言檔案格式
- 本地儲存: 使用瀏覽器 localStorage 持久化程式碼
- 語言自動識別: 根據檔案副檔名自動設定程式語言
- 保存狀態提示: 即時顯示程式碼保存狀態
- 響應式設計: 支援桌面和移動設備
- 暗黑模式: 自動適應系統主題偏好
- 直觀操作: 清晰的視覺反饋和狀態提示
- 實時統計: 系統狀態和使用情況
- 特殊字符視覺化: 顯示換行符、Tab符和空格,助於測試
# 使用預建構鏡像(推薦)
docker run -d -p 127.0.0.1:5000:5000 -v judge_testcases:/app/testcases --name judge ghcr.io/0857boy/simple-code-judge
# 或本地建構
docker build -t simple-code-judge .
docker run -d -p 127.0.0.1:5000:5000 -v judge_testcases:/app/testcases --name judge simple-code-judge
# 安裝依賴
pip install -r requirements.txt
# 安裝程式語言環境
# Ubuntu/Debian:
sudo apt update
sudo apt install g++ openjdk-17-jdk nodejs golang-go
# macOS:
brew install gcc openjdk node go
# 執行應用
python app.py
訪問 http://localhost:5000
開始使用!
- Flask: 輕量級 Web 框架
- Python 3.11+: 現代 Python 特性
- Gunicorn: 高性能 WSGI 伺服器
- 安全沙箱: 隔離程式碼執行環境
- 動態配置: JSON配置文件持久化設定
- 現代 HTML5: 語意化標記
- CSS3: CSS Grid、Flexbox、CSS Variables
- Vanilla JavaScript: ES6+ 語法,async/await
- 響應式設計: Mobile-first 方法
- 實時通知: 用戶操作反饋系統
語言 | 編譯器/解釋器 | 執行環境 | 特殊設定 |
---|---|---|---|
C | GCC (gcc) | C11 標準 | -O2 優化 |
C++ | GCC (g++) | C++17 標準 | -O2 優化 |
Java | OpenJDK 17 | JVM | Main類別自動識別 |
Python | Python 3.11 | CPython | UTF-8 編碼 |
JavaScript | Node.js | V8 引擎 | ES6+ 支援 |
Go | Go 1.19+ | Go Runtime | 模組系統支援 |
- 執行時間: 1-60秒(動態可調)
- 記憶體限制: 1-1024MB(動態可調)
- 編譯時間: 1-60秒(動態可調)
- 檔案大小: 16MB上限
- 輸出長度: 無限制
- 測試案例: 無數量限制
- 併發執行: 多工處理支援
- 智慧緩存: 配置文件緩存機制
- 輕量化設計: 最小資源佔用
- 彈性擴展: 支援水平擴展
- 沙箱執行: 隔離的執行環境
- 檔案驗證: 嚴格的輸入檢查
- 動態時間限制: 防止無限迴圈
- 權限控制: 最小權限原則
- 完整日誌: 操作和錯誤追蹤
- 非root執行: Docker容器安全運行
- 點擊「⚙️ 系統設定」展開設定面板
- 調整執行時間、記憶體、編譯時間限制
- 設定其他偏好選項
- 點擊「💾 保存設定」應用變更
- 在「📁 測試資料管理」區域輸入測試案例名稱
- 提供輸入資料 (.in)
- (可選)提供預期輸出 (.out)
- 點擊「上傳測試案例」
- 在「⚡ 程式碼提交」區域貼上您的程式碼
- 選擇程式語言
- 點擊「🚀 開始評判」
- 查看詳細的評判結果
- 使用自動保存功能保護您的程式碼
- 匯出程式碼為對應語言的檔案格式
- 從檔案匯入程式碼,系統會自動識別語言
- 程式碼會自動保存在瀏覽器本地儲存中
- 查看每個測試案例的通過狀態
- 使用Myers差分算法進行精確的輸出比較
- 字詞級差異高亮顯示,支援智能模式比對
- 檢查執行時間和錯誤訊息
- 使用導航按鈕查看不同測試案例
- 特殊字元視覺化幫助找出細微差異
POST /upload
- 上傳測試案例GET /testcases
- 列出所有測試案例GET /testcases/<name>
- 獲取特定測試案例POST /delete
- 刪除選定測試案例POST /deleteAll
- 刪除所有測試案例
POST /judge
- 提交程式碼進行評判GET /api/stats
- 獲取系統統計資訊
GET /api/settings
- 獲取系統設定POST /api/settings
- 更新系統設定
GET /export
- 匯出測試案例 ZIPPOST /import
- 匯入測試案例檔案
系統支援動態配置,所有設定可通過Web介面調整:
{
"settings": {
"execution_time_limit": 5, // 執行時間限制(秒)
"memory_limit": 128, // 記憶體限制(MB)
"compile_time_limit": 10, // 編譯時間限制(秒)
"auto_save_code": true, // 自動保存程式碼
"show_execution_time": true // 顯示執行時間
}
}
PYTHONUNBUFFERED=1 // Python 輸出即時顯示
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
- ✨ 新增C語言支援
- 💾 新增程式碼自動保存和管理功能
- 🔍 實現Myers差分算法進行精確字詞級比對
- 🎨 改進差異顯示,支援智能模式比對
- 📂 新增程式碼匯入/匯出功能
- 🔧 改進特殊字符視覺化顯示
- 💡 新增保存狀態提示和語言自動識別
- ✨ 新增動態系統設定面板
- 🚀 移除輸出長度限制
- 📈 移除測試案例數量限制
- 🔧 新增設定管理API
- 🎨 改進特殊字符顯示功能
- 🐛 修復文件編碼問題
- 基礎程式碼評判功能
- 多語言支援
- Web介面
歡迎提交問題或請求功能,您可以透過提交 Pull Request 來貢獻您的代碼。