Appearance
Lập trình - Terminal Exercise (Code Terminal Exercise)
Code Terminal Exercise là bài tập lập trình ngắn dùng pattern "Run-and-check 1 expected output". Học viên viết code, nhấn Run, hệ thống chạy + so sánh stdout của bạn với đáp án mong đợi mà giảng viên đã cấu hình. Khớp → tự động đánh dấu hoàn thành.
Phù hợp khi:
- Bài tập có một đầu ra duy nhất ("In ra
Hello, World!", "In tổng1+2+...+100", "In bảng cửu chương") - Cần feedback tức thì pass/fail, không cần test case phức tạp
- Demo trong bài giảng nhưng vẫn muốn theo dõi tiến độ học viên
Để hiểu cơ chế thực thi (giới hạn thời gian, mạng, các loại lỗi runtime), xem Thực thi Code.
Khác biệt với các activity lập trình khác
| Code Terminal Exercise | Code Practicing | Code Interactive | |
|---|---|---|---|
| Cách đánh giá | So sánh stdout với 1 expected output | Chạy qua nhiều test cases (input/expected pairs) | Không chấm |
| Lượng cấu hình | Tối thiểu — chỉ 1 expected output | Nhiều — phải nghĩ test cases | Không có |
| Phù hợp với | Bài ngắn, output cố định | Bài thuật toán có nhiều input | Workshop / thực hành tự do |
| Hoàn thành | Tự động khi output khớp | Pass hết test cases | Thủ công |
| Lưu attempt | Có (pass/fail mỗi lần Run) | Có | Không |
Ngôn ngữ hỗ trợ
Cùng tập với các activity lập trình khác: Python 3.11, JavaScript / Node 20, PHP 8.2, Java 21, C / C++, C#. Giảng viên cố định ngôn ngữ cho từng activity.
Giao diện
Bố cục 2 cột:
- Bên trái — Code editor (ACE) với
starter_codedo giảng viên cung cấp - Bên phải — Terminal hiển thị output sau khi nhấn Run
Phía trên có đề bài (problem statement). Bên dưới là footer với 2 nút: Run và Reset.
Thông báo trong terminal
Sau khi nhấn Run:
- ✅ Khớp — banner xanh "Kết quả khớp với đáp án mong đợi." hiện ở đáy terminal. Hoạt động được đánh dấu hoàn thành lần đầu bạn pass.
- ❌ Không khớp — banner đỏ "Kết quả không khớp với đáp án mong đợi." Cứ Run lại bao nhiêu lần tùy ý.
- ⚠️ Lỗi runtime (TLE, exception, syntax error, …) — banner đỏ hiện message gốc từ sandbox (vd "Execution failed").
Khi đã hoàn thành, dưới grid sẽ có banner cố định "✅ Bạn đã hoàn thành bài tập này."
Quy trình làm
- Đọc đề bài — chú ý format output (xuống dòng, dấu cách, dấu chấm).
- Đọc starter code (nếu có) — giảng viên thường để khung hoặc gợi ý.
- Viết code vào editor.
- Nhấn Run → đợi vài giây.
- Nhìn terminal:
- Có banner xanh → xong, bài được mark hoàn thành.
- Có banner đỏ → so sánh output thực tế (terminal) với đáp án mong đợi (đề bài). Sửa, Run lại.
So sánh output: lưu ý
Hệ thống so sánh chuỗi thô sau khi trim() 2 đầu (loại bỏ whitespace + newline thừa ở đầu và cuối). Nghĩa là:
- ✅ Trailing newline cuối output không quan trọng —
Hello\nkhớpHello - ✅ Khoảng trắng đầu/cuối toàn bộ output bị bỏ qua
- ❌ Khoảng trắng giữa các dòng phải khớp chính xác —
Hello World≠Hello World(2 dấu cách) - ❌ Dấu cách cuối mỗi dòng phải khớp —
print("hi ")(có space cuối) ≠ expectedhi - ❌ Dòng trống thừa giữa output phải khớp — không tự bỏ
Mẹo tránh fail oan
- Copy đề bài rồi gõ in 1-1 — đừng "đoán" format.
- Tránh
print("Result:", x)khi đáp án chỉ có giá trịx. Đề thường yêu cầu in đúng giá trị, không có nhãn. - Để ý ngôn ngữ tự thêm gì —
console.logJS thêm\ncuối;printfC/C++ không thêm;printPython tự thêm.
Output nhiều dòng
Đề bài "in 3 dòng 1, 2, 3":
python
print(1)
print(2)
print(3)Output thực tế:
1
2
3Giảng viên cấu hình expected output bằng cách gõ Enter giữa các dòng trong textarea — không dùng escape sequence \n literal. Nếu bạn copy-paste expected từ Notepad Windows (CRLF), có thể bị fail ngầm — báo giảng viên nếu thấy output trông giống y hệt mà vẫn fail.
Lưu code
Code auto-save mỗi lần Run vào tài khoản của bạn:
- Đăng nhập từ máy khác → code đồng bộ.
- Reset starter code không xóa các bản đã save trước đó — nó chỉ ghi đè code hiện tại bằng starter code.
Reset starter code
Nhấn nút Reset → đưa code về starter_code ban đầu.
WARNING
Reset xóa toàn bộ code bạn đã viết. Nếu sắp pass thì copy code ra ngoài trước.
Số lượt Run
Không giới hạn — Run bao nhiêu lần cũng được.
- Mỗi lần Run có expected_output đều tạo 1 attempt (pass / fail).
- Sau khi đã pass, Run lại vẫn tạo attempt mới (giảng viên có thể xem lịch sử) nhưng trạng thái hoàn thành không bị reset.
Trường hợp dùng phổ biến
Bài demo / lab bài giảng
Workshop "Python ngày 1", giảng viên muốn học viên đảm bảo đã chạy thành công ví dụ Hello, World! trước khi sang phần tiếp:
- Đề bài: "In ra
Hello, World!" - Expected output:
Hello, World! - Starter code:
# Viết code của bạn ở đây
Học viên Run pass → tự động hoàn thành, mở khóa hoạt động kế.
Bài kiểm tra cuối chương đơn giản
Sau bài giảng vòng lặp, kiểm tra học viên đã hiểu chưa:
- Đề bài: "In ra tổng các số chẵn từ 1 đến 100"
- Expected output:
2550
Bài tập ngắn để rèn cú pháp
Series 10 bài ngắn dạng "in ra X" — gom thành một module, mỗi bài là 1 Code Terminal Exercise nhanh gọn.
Câu hỏi thường gặp
Bài này có chấm điểm vào tổng khóa không? Có — giống Code Practicing. Mỗi bài pass đóng góp vào tiến độ khóa học. Nếu khóa yêu cầu chứng chỉ thì cần pass tất cả bài có gắn cờ "bắt buộc".
Tôi pass rồi, sửa code rồi Run lại → nó báo fail. Có ảnh hưởng "đã hoàn thành" không? Không. Đã pass = đã pass — Run sau đó dù pass hay fail đều không reset trạng thái hoàn thành.
Tôi không thấy đề bài (problem statement)? Giảng viên có thể chưa nhập. Hỏi giảng viên hoặc đoán theo tên hoạt động + ngôn ngữ.
Tại sao output của tôi trông giống y đề mà vẫn báo không khớp? Thường do:
- Có dấu cách cuối dòng / cuối câu
- Output xuống dòng kiểu Windows (CRLF) vs Linux (LF) — giảng viên cần kiểm tra lại expected output trong cấu hình
- Bạn in thêm chuỗi mặc định mà ngôn ngữ tự thêm (vd: ngôn ngữ có debugger output)
Khi nghi ngờ, copy output của terminal và đáp án mong đợi vào trình so sánh text (như diff trên máy local) để thấy khác biệt ký tự.
Có cách nào xem expected_output mà giảng viên đã cấu hình? Không trực tiếp — đề bài chỉ hiển thị problem_statement. Phải đọc kỹ đề.
Tôi cần đọc stdin trong bài này được không? Activity Code Terminal Exercise không truyền stdin — code chạy thuần, in ra stdout. Nếu cần stdin tương tác, dùng Code Interactive. Nếu cần test với nhiều input cố định, dùng Code Practicing.