Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
EndermanPC authored Sep 19, 2024
1 parent ddc5528 commit 28bd152
Showing 1 changed file with 65 additions and 62 deletions.
127 changes: 65 additions & 62 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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``$apiUrlCfg`:
```php
$apiUrl = "http://<Tên miền của Judge0>/submissions/";
$apiUrlCfg = "http://<Tên miền của Judge0>/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``$apiUrlCfg` như sau:
```php
$apiUrl = "http://<Tên miền hoặc IP của Judge0>/submissions/";
$apiUrlCfg = "http://<Tên miền hoặc IP của Judge0>/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<name>/input.txt
tests/TEST<name>/output.txt
```
dụ:
- `<name>` 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`:
```
<tên tài khoản>:<mật khẩu đã hash>
```
### 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 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`:
```
<tên tài khoản>:<mật khẩu đã hash>
```
### 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`
Expand Down

0 comments on commit 28bd152

Please sign in to comment.