[Buổi 20][Chuỗi][HW] Bài 4: Kiểm tra username nhiều luật


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Kiểm tra username nhiều luật

Bối cảnh

Một cổng đăng ký áp dụng các luật username theo thứ tự ưu tiên. Khi dữ liệu sai, hệ thống chỉ trả lỗi đầu tiên để giao diện hiển thị đúng thông báo:

  1. LENGTH: độ dài phải từ 5 đến 20.
  2. START: ký tự đầu phải là chữ cái.
  3. CHAR: mọi ký tự chỉ được là chữ cái, chữ số hoặc _.
  4. DOUBLE_UNDERSCORE: không được chứa __.
  5. NEED_DIGIT: phải có ít nhất một chữ số.

Nếu qua hết, in VALID. Bài Medium kiểm tra thiết kế validation pipeline: cùng một username có thể vi phạm nhiều luật, nhưng output phụ thuộc thứ tự rule chứ không chỉ phụ thuộc "có lỗi hay không". Không dùng regex; hãy duyệt string và dùng find()/cctype trong phạm vi B20.

Các hệ thống thực tế thường cố ý trả một mã lỗi duy nhất thay vì danh sách lỗi để giao diện có thông điệp ổn định. Vì vậy thứ tự rule phải được xem như dữ liệu của đề: nếu username vừa quá ngắn vừa bắt đầu bằng số, kết quả vẫn là LENGTH. Hãy viết test chồng nhiều lỗi để chắc chắn early-return của bạn đúng priority.

Yêu cầu

  1. Đọc một dòng username.
  2. Kiểm tra 5 luật đúng thứ tự.
  3. In lỗi đầu tiên hoặc VALID.

Input

Một dòng username.

Output

Một trong LENGTH, START, CHAR, DOUBLE_UNDERSCORE, NEED_DIGIT, VALID.

Ràng buộc

|s|≤100.

Ví dụ 1

Input

abc1

Output

LENGTH

Giải thích

Username abc1 có độ dài 4, nhỏ hơn minimum 5. Rule LENGTH đứng đầu pipeline nên chương trình trả ngay lỗi này mà không cần xét START, CHAR hay NEED_DIGIT. Mặc dù chuỗi bắt đầu bằng chữ và có digit, priority của rule khiến output vẫn bắt buộc là LENGTH.

Ví dụ 2

Input

1abcd

Output

START

Giải thích

1abcd có độ dài đúng 5 nên qua rule LENGTH. Tuy nhiên ký tự đầu tiên là digit 1, không phải chữ cái, nên rule START fail. Pipeline dừng ngay ở đây; việc các ký tự còn lại đều alphanumeric không làm thay đổi lỗi đầu tiên. Output là START.

Thông tin học tập

  • Module: M06
  • Buổi: B20
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: std::string, validation pipeline, cctype, first error code
  • Giới hạn kiến thức: B01-B20
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo