Hướng dẫn chấm bài bằng bộ test
Trang này hướng dẫn thầy cô dùng bộ test đi kèm bộ đề ôn thi HSG Tin học THCS để chấm bài của học sinh. Phần “Lỗi hay gặp” ở cuối trang hữu ích cho cả các em tự luyện.
Bộ test gồm những gì
Phần tiêu đề “Bộ test gồm những gì”Sau khi giải nén, thư mục goi-test có dạng:
goi-test/├── README.md hướng dẫn ngắn và bảng thời gian chạy của từng bài├── cham.py công cụ chấm bài├── include/ file hỗ trợ biên dịch C++ trên macOS└── de-01/ ├── XEDAP/ │ ├── problem.json điểm của bài, thời gian chạy tối đa │ └── tests/ 01.inp, 01.out, 02.inp, 02.out, ... └── ...Mỗi bài có 12–20 test, chia đúng theo tỉ lệ ràng buộc ghi trong đề (ví dụ “Có 40% số test với n ≤ 1000”). Các test có điểm bằng nhau, nên học sinh chỉ làm được subtask nhỏ vẫn nhận được phần điểm tương ứng.
Chấm bằng cham.py
Phần tiêu đề “Chấm bằng cham.py”cham.py chạy được trên Windows, macOS và Linux. Chỉ cần cài
Python 3.8 trở lên. Muốn chấm bài C++ thì máy cần có
g++: trên Windows cài MinGW (thường có sẵn nếu đã cài Dev-C++ hoặc Code::Blocks và thêm
vào PATH), trên macOS chạy xcode-select --install.
Mở cửa sổ lệnh (Command Prompt / Terminal) tại thư mục goi-test rồi chạy:
# Chấm một bài làmpython cham.py de-01/XEDAP D:/baiLam/XEDAP.pypython cham.py de-01/TIACAY D:/baiLam/TIACAY.cppKết quả hiện từng test và điểm của bài:
Bài TIACAY (Tỉa hàng cây), 6 điểm Test 01: AC Đúng 0.02s ... Test 20: TLE Quá thời gian 2.00s => Đúng 9/20 test, điểm: 2.70/6Ý nghĩa các kết quả:
| Kí hiệu | Ý nghĩa |
|---|---|
| AC | Đúng |
| WA | Sai kết quả |
| TLE | Chạy quá thời gian cho phép |
| RE | Chương trình bị lỗi khi chạy |
| NO | Không tìm thấy file kết quả (thường do sai tên file) |
Chấm cả lớp
Phần tiêu đề “Chấm cả lớp”Xếp bài làm của mỗi học sinh vào một thư mục riêng, file đặt tên theo mã bài:
bai-lam-lop-9a/├── nguyen-van-an/ XEDAP.py CHUDAO.py TIACAY.cpp├── tran-thi-binh/ XEDAP.cpp CHUDAO.cpp SOCHIA5.cpp TIACAY.cpp└── ...Rồi chạy:
python cham.py de-01 bai-lam-lop-9a --csv bang-diem.csvcham.py chấm lần lượt từng học sinh, in bảng điểm và ghi ra file bang-diem.csv (mở
được bằng Excel).
Lỗi hay gặp khiến bài bị 0 điểm
Phần tiêu đề “Lỗi hay gặp khiến bài bị 0 điểm”- Sai tên file. Phải đọc đúng
XEDAP.INPvà ghi đúngXEDAP.OUT. Viếtxedap.inpvẫn chạy được trên Windows nhưng sẽ lỗi trên hệ thống chấm chạy Linux, nên hãy viết đúng chữ hoa như đề. - In thêm câu thông báo. Các dòng như
Nhap n =hayKet qua la:làm kết quả sai. Chỉ ghi đúng những gì đề yêu cầu. - Vẫn nhập từ bàn phím. Dùng
input()haycinmà không mở file thì chương trình sẽ đứng chờ và bị tính quá thời gian. - Tràn số với C++. Khi đề cho giá trị tới 109 hoặc 1018, các phép nhân và tổng phải
dùng
long long. - Quá thời gian ở các test lớn. Hãy đọc kỹ phần ràng buộc để chọn thuật toán phù hợp. Thuật toán O(n2) với n = 105 không thể chạy kịp trong 1 giây.
Khung chương trình đọc/ghi file đúng cách:
with open("XEDAP.INP") as f: m, n = map(int, f.read().split())# ... tính toán ...with open("XEDAP.OUT", "w") as f: f.write(f"{x} {y}\n")#include <bits/stdc++.h>using namespace std;int main() { freopen("XEDAP.INP", "r", stdin); freopen("XEDAP.OUT", "w", stdout); long long m, n; cin >> m >> n; // ... tính toán ... cout << x << " " << y << "\n"; return 0;}