Skip to content

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ổng 1+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 ExerciseCode PracticingCode Interactive
Cách đánh giáSo sánh stdout với 1 expected outputChạy qua nhiều test cases (input/expected pairs)Không chấm
Lượng cấu hìnhTối thiểu — chỉ 1 expected outputNhiều — phải nghĩ test casesKhông có
Phù hợp vớiBài ngắn, output cố địnhBài thuật toán có nhiều inputWorkshop / thực hành tự do
Hoàn thànhTự động khi output khớpPass hết test casesThủ công
Lưu attemptCó (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_code do 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 ​

  1. Đọc đề bài — chú ý format output (xuống dòng, dấu cách, dấu chấm).
  2. Đọc starter code (nếu có) — giảng viên thường để khung hoặc gợi ý.
  3. Viết code vào editor.
  4. Nhấn Run → đợi vài giây.
  5. 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\n khớp Hello
  • ✅ 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) ≠ expected hi
  • ❌ Dòng trống thừa giữa output phải khớp — không tự bỏ

Mẹo tránh fail oan ​

  1. Copy đề bài rồi gõ in 1-1 — đừng "đoán" format.
  2. 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.
  3. Để ý ngôn ngữ tự thêm gì — console.log JS thêm \n cuối; printf C/C++ không thêm; print Python 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
3

Giả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.

LMS Documentation