[Buổi 21][Xử lý chuỗi][HW] Bài 4: Tổng token số nguyên hợp lệ
Tổng token số nguyên hợp lệ
Bối cảnh
Một dòng dữ liệu trộn lẫn số và token rác. Mỗi token hợp lệ nếu biểu diễn đúng một số nguyên thập phân có thể có dấu + hoặc - ở đầu, sau dấu phải có ít nhất một chữ số, và không có ký tự nào khác. Với các token hợp lệ, hệ thống cần đếm số lượng, tính tổng và tìm giá trị lớn nhất. Token không hợp lệ chỉ làm tăng bộ đếm lỗi.
Để tránh stoi ném exception và che mất quy tắc validation, bài yêu cầu kiểm tra ký tự trước rồi parse thủ công sang long long; dữ liệu test bảo đảm token hợp lệ nằm trong phạm vi long long. Nếu không có token hợp lệ, max in NONE. Bài Medium kiểm tra pipeline validate → parse → aggregate.
Các token rác thường có prefix số như 12abc, nên một parser chấp nhận "đọc được 12 rồi dừng" là không đủ. Grammar yêu cầu toàn token phải được tiêu thụ. Đây là khác biệt quan trọng giữa parsing dữ liệu tin cậy và validation input bên ngoài. Đồng thời max phải hoạt động đúng khi toàn bộ số hợp lệ đều âm.
Yêu cầu
- Tokenize dòng theo whitespace.
- Validate token integer có dấu tùy chọn.
- Parse thủ công token hợp lệ.
- In
validCount invalidCount sum max; nếu validCount=0, max làNONE.
Input
Một dòng.
Output
Một dòng theo mô tả.
Ràng buộc
|line|≤5000, token số hợp lệ nằm trong long long.
Ví dụ 1
Input
10 -3 +7 abc 5x
Output
3 2 14 10
Giải thích
Tokenizer tạo năm token: 10, -3, +7, abc, 5x. Ba token đầu khớp grammar integer và parse thành 10, -3, 7; hai token sau invalid vì chứa ký tự không hợp lệ. Do đó valid=3, invalid=2, sum=10-3+7=14, còn max trong ba giá trị hợp lệ là 10. Output 3 2 14 10.
Ví dụ 2
Input
abc + - --1
Output
0 4 0 NONE
Giải thích
abc, +, -, --1 đều không biểu diễn số nguyên hợp lệ: dấu đơn không có chữ số, --1 có hai dấu. Không có token hợp lệ nên count=0, sum=0 và max phải in NONE. Output 0 4 0 NONE.
Thông tin học tập
- Module: M06
- Buổi: B21
- Loại bài: HOMEWORK
- Độ khó: Medium
- Concepts: stringstream, signed integer validation, manual parse, aggregation, invalid count
- Giới hạn kiến thức: B01-B21
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments