diff --git a/README.md b/README.md index a582479..f8dfc9c 100644 --- a/README.md +++ b/README.md @@ -2,94 +2,97 @@ ## 1. Cài đặt ### 1.1 Yêu cầu: -- `Composer` -- `PHP 8.3` hoặc mới hơn +- `composer` để quản lý thư viện. +- `PHP 8.3` hoặc phiên bản mới hơn. ### 1.2 Cài đặt gói phụ thuộc: Chạy lệnh sau để cài đặt thư viện cần thiết: -``` +```bash composer require erusev/parsedown ``` ## 2. Host hệ thống -### 2.1 Yêu cầu host: -- Sử dụng `XAMPP` hoặc phần mềm tương tự để host trên cổng `80`. -- **Khuyến nghị:** Dùng `ngrok` để host. Tải `ngrok.exe` vào thư mục `host`, cấu hình API key và thay đổi tên miền trong file `run.bat`, sau đó chạy file này. - -### 2.2 Khởi tạo hệ thống Judge: -1. Cài đặt `Docker` và chạy file `docker.bat` trong thư mục `docker`. -2. Chờ cho đến khi cửa sổ `cmd` đóng lại. - -**Lưu ý:** Mã nguồn không thể tự động nhận diện địa chỉ của `Judge0`. Bạn cần chỉnh sửa file `judge.php` như sau: -- Tìm đến dòng 152 và 153 trong file `judge.php`. -- Chỉnh sửa 2 biến `$apiUrl` và `$apiUrlCfg`: -```php -$apiUrl = "http:///submissions/"; -$apiUrlCfg = "http:///submissions/?wait=false/"; -``` -- Nếu host `Judge0` trên localhost (cổng mặc định `2358`), thay đổi mã nguồn như sau: -```php -$apiUrl = "http://localhost:2358/submissions/"; -$apiUrlCfg = "http://localhost:2358/submissions/?wait=false/"; -``` - -Nếu host `23JUDGE` trên server khác, hãy cấu hình file `judge.bat` để khởi chạy `Judge0` tương tự như file `run.bat` và thay đổi tên miền trong mã nguồn. - -## 3. Tạo Problem: -1. Trong thư mục `/problems`, tạo một thư mục mới với tên là tên của câu hỏi (chỉ chứa ký tự chữ cái và số). -2. Trong thư mục mới, tạo các file cấu hình sau: - - `MemoryLimit.cfg`: Giới hạn bộ nhớ (KB). Ví dụ: `128000`. - - `TimeLimit.cfg`: Thời gian thực thi tối đa (giây). Ví dụ: `1`. - - `RScore.cfg`: Điểm xếp hạng của bài khi A/C. Ví dụ: `0.1`. - - `Score.cfg`: Điểm của bài, được chia đều cho số lượng test. Ví dụ: `10`. - - `ShowTest.cfg`: Cấu hình xem test (`true` hoặc `false`). - - `StopWhenFail.cfg`: Dừng khi gặp lỗi (`true` hoặc `false`). - - `Problem.md`: Nội dung câu hỏi (Markdown, hỗ trợ MathJax). - -### 3.1 Tạo test case: -Tạo thư mục `tests` bên trong thư mục câu hỏi với cấu trúc: +### 2.1 Host qua XAMPP hoặc tương tự: +- Yêu cầu sử dụng XAMPP hoặc phần mềm tương tự để host trên cổng `80`. +- **Khuyến nghị**: Sử dụng `ngrok` để host 23JUDGE công khai. Thực hiện các bước sau: + - Tải `ngrok.exe` vào thư mục `host`. + - Cấu hình API key của bạn vào `ngrok`. + - Thay đổi tên miền trong file `run.bat` theo tên miền được cung cấp bởi `ngrok`, sau đó chạy file `run.bat`. + +### 2.2 Khởi tạo hệ thống chấm bài Judge0: +- Cài đặt Docker và chạy file `docker.bat` trong thư mục `docker`. +- Chờ cho đến khi cửa sổ cmd tự động đóng lại. + +**Lưu ý**: Mặc định, 23JUDGE không thể tự động nhận diện địa chỉ của Judge0. Bạn cần thực hiện các bước sau để cấu hình thủ công: +1. Mở file `judge.php` và tìm đến dòng 152 và 153. +2. Chỉnh sửa 2 biến `$apiUrl` và `$apiUrlCfg` như sau: + ```php + $apiUrl = "http:///submissions/"; + $apiUrlCfg = "http:///submissions/?wait=false/"; + ``` +3. Nếu bạn host Judge0 cục bộ (mặc định trên cổng `2358`), bạn có thể cấu hình như sau: + ```php + $apiUrl = "http://localhost:2358/submissions/"; + $apiUrlCfg = "http://localhost:2358/submissions/?wait=false/"; + ``` + +Nếu bạn host 23JUDGE trên một server khác, hãy cấu hình file `judge.bat` để tự động chạy Judge0 (nếu bạn tự host Judge0), đồng thời chỉnh sửa tên miền trong mã nguồn như trên. + +## 3. Tạo Problem (Bài tập): +### 3.1 Cấu trúc thư mục Problem: +1. Trong thư mục `/problems`, tạo một thư mục mới với tên là tên của bài tập. **Lưu ý**: Tên của bài không được chứa ký tự đặc biệt (ngoại trừ chữ cái và số). +2. Bên trong thư mục vừa tạo, tạo các file cấu hình: + - `MemoryLimit.cfg`: Bộ nhớ tối đa (KB) được cấp cho chương trình khi chạy. Ví dụ: `128000` (128MB). + - `TimeLimit.cfg`: Thời gian chạy tối đa của chương trình (giây). Ví dụ: `1` (1 giây). + - `RScore.cfg`: Điểm xếp hạng của bài khi người dùng A/C (Accepted) lần đầu. Điểm này chỉ được cấp một lần. Ví dụ: `0.1`. + - `Score.cfg`: Điểm tổng của bài tập, sẽ được chia đều cho số lượng test. Ví dụ: `10`. + - `ShowTest.cfg`: Cấu hình `true` hoặc `false` để quyết định người dùng có được xem test khi nộp bài không. Khuyến nghị đặt `false` trong contest. + - `StopWhenFail.cfg`: Cấu hình `true` hoặc `false` để quyết định máy chấm có dừng khi gặp test sai không. Khuyến nghị đặt `true` để giảm tài nguyên server. + - `Problem.md`: Nội dung bài tập được viết bằng định dạng markdown (có hỗ trợ MathJax để viết công thức toán). + +### 3.2 Tạo Test Case cho Problem: +- Bên trong thư mục bài tập, tạo thư mục `tests` và các thư mục con với định dạng như sau: ``` tests/TEST/input.txt tests/TEST/output.txt ``` -Ví dụ: +- `` có thể là số hoặc tên tùy ý, ví dụ: ``` tests/TEST1/input.txt tests/TEST1/output.txt tests/TEST2/input.txt tests/TEST2/output.txt -... ``` ## 4. Tạo Contest: -1. Tạo file `contest.cfg` với 2 thông số: - - `Opening`: Thời gian mở contest. - - `Closing`: Thời gian đóng contest. +1. Tạo file cấu hình `contest.cfg` với hai trường thông tin quan trọng: + - `Opening`: Thời gian mở cửa contest. + - `Closing`: Thời gian đóng cửa contest. -**Lưu ý:** Người đã tham gia contest sẽ không bị đẩy ra khi contest đóng. +**Lưu ý**: Khi contest đóng, người đã tham gia vẫn có thể tiếp tục nộp bài cho đến khi bị loại hoặc contest chính thức kết thúc. -2. Tạo các thư mục phục vụ contest: - - `submissions`: Lưu trữ bài nộp, bao gồm file `Log.txt` để lưu lịch sử. - - `users`: Lưu xếp hạng người dùng. - - `problems`: Lưu câu hỏi, tạo câu hỏi giống như trong phần "Tạo Problem". +2. Tạo các thư mục cần thiết cho contest: + - `submissions`: Lưu trữ danh sách bài nộp, bên trong thư mục này tạo file `Log.txt` để ghi lại lịch sử nộp bài. + - `users`: Lưu danh sách và xếp hạng người dùng. + - `problems`: Thư mục lưu trữ bài tập, tạo cấu trúc bài tập giống như phần **Tạo Problem** ở trên. -## 5. Tiện ích hỗ trợ: -- `root/itk23.php`: Tạo tài khoản với cùng một mật khẩu. -- `root/passgen.php`: Truy cập GET để tạo mật khẩu hash. -- `root/clean.php`: Xóa các bài nộp đã hơn 1 tháng. -- `cses-tests/auto.bat`: Chuyển đổi bộ test của CSES hoặc các hệ thống khác sang định dạng của 23JUDGE. +## 5. Một số tiện ích đi kèm: +- `root/itk23.php`: Tạo nhanh các tài khoản với cùng một mật khẩu. +- `root/passgen.php`: Tạo mật khẩu đã mã hóa hash thông qua phương thức GET (truy cập bằng trình duyệt). +- `root/clean.php`: Xóa các file submissions đã tồn tại hơn 1 tháng. +- `cses-tests/auto.bat`: Chuyển đổi các bộ test từ hệ thống khác (như CSES) sang định dạng của 23JUDGE. Bạn chỉ cần dán các file `.in` và `.out` để tự động chuyển đổi. ## 6. Tạo tài khoản người dùng: -23JUDGE không hỗ trợ tạo tài khoản tự động qua giao diện người dùng, bạn cần tạo thủ công. +23JUDGE không hỗ trợ tạo tài khoản qua giao diện, vì vậy bạn cần tạo tài khoản thủ công khi cần. -### 6.1 Tạo tài khoản: -1. Sử dụng tên và mật khẩu đã hash (dùng tiện ích trong phần trên). -2. Chỉnh sửa file `users.txt` trong thư mục `databases`: -``` -: -``` +### 6.1 Tạo tài khoản thủ công: +1. Bạn cần có tên tài khoản (chỉ gồm chữ cái và số) và mật khẩu đã mã hóa (hash) bằng tiện ích `passgen.php`. +2. Sau khi có thông tin cần thiết, chỉnh sửa file `users.txt` trong thư mục `databases`: + ``` + : + ``` -### 6.2 Tài khoản có sẵn: +### 6.2 Tài khoản mặc định: - Tên tài khoản: `admin` - Mật khẩu: `itk23maidinh`