Hướng dẫn chấm bài tự động

Cấu trúc

de_thi_thu/
  De01/
    De01.md            ← đề phát cho HS
    sinh_test.py       ← sinh lại bộ test (giáo viên)
    TONGCS/
      loi_giai.py      ← lời giải mẫu (KHÔNG đưa cho HS trước khi thi)
      tests/01.inp, 01.out, ...
    MATKHAU/ DEMNT/ NANG/

Bài DEMNT có thêm loi_giai_cham.py – lời giải kiểm tra từng số đến √x, chỉ được 6/10 điểm vì quá thời gian ở các test lớn.

Dùng nó để giải thích cho HS ý nghĩa của giới hạn dữ liệu và điểm từng phần.

Chấm bài

Mở terminal trong thư mục TinHocTre:

python cham_bai.py <file_bai_lam.py> <thu_muc_test>
python cham_bai.py bai_lam/An/TONGCS.py de_thi_thu/De01/TONGCS/tests

Tùy chọn:

  • -t 2 – giới hạn 2 giây/test (mặc định 1 giây).
  • -d 20 – bài có tổng 20 điểm (mặc định 10).
  • --file TONGCS – khi đề yêu cầu đọc TONGCS.INP và ghi TONGCS.OUT.

Kết quả từng test: ĐÚNG, SAI KẾT QUẢ (có in "cần in / em in" để HS so sánh), QUÁ THỜI GIAN, LỖI KHI CHẠY (kèm dòng lỗi).

Công cụ cũng nhận thư mục test kiểu Themis (Test01/TENBAI.INP, Test01/TENBAI.OUT) nếu thầy/cô có bộ test của đề cũ.

Tự ra đề mới

  1. Sao chép thư mục De01 thành De02.
  2. Viết đề vào De02.md, lời giải mẫu vào <TENBAI>/loi_giai.py.
  3. Sửa phần sinh input trong sinh_test.py, chạy python sinh_test.py.
  4. Chấm thử lời giải mẫu để chắc chắn đạt 100%.

Mẹo ra test tốt (cũng là điều cần dạy HS):

  • 2–3 test giống ví dụ, nhỏ, dễ kiểm tra bằng tay.
  • Test biên: n nhỏ nhất, giá trị nhỏ nhất/lớn nhất, toàn số bằng nhau, kết quả bằng 0.
  • Test lớn đúng giới hạn để phân biệt lời giải nhanh và chậm.
  • Nếu đề có giới hạn kiểu "60% số test n ≤ 1000" thì đúng 60% test phải thỏa mãn.

Nguồn đề để luyện

  • Đề Tin học trẻ, HSG Tin THCS các năm: tìm theo từ khóa "Tin học trẻ", "HSG THCS" trên https://lqdoj.edu.vn và https://oj.vnoi.info – có sẵn máy chấm online.
  • Xin đề và bộ test các năm trước của tỉnh/huyện mình từ Phòng/Sở GD&ĐT – sát nhất với kỳ thi thật.
Zalo