[Buổi 30][Template & ngoại lệ][HW] Bài 4: Phân tích token số dương có báo lỗi
Phân tích token số dương có báo lỗi
Bối cảnh
Một dòng chứa n token cần parse thành số nguyên dương. Token hợp lệ nếu chỉ gồm chữ số, giá trị trong [1,10^9]. Hàm parsePositive(token) ném invalid_argument nếu sai format và out_of_range nếu giá trị bằng0 hoặc vượt10^9. Hệ thống phải tiếp tục sau lỗi, tính validCount, invalidCount, tổng và max của các giá trị hợp lệ.
Bài Medium rèn tách validation/parsing khỏi loop aggregate và catch nhiều loại exception. Không dùng stoi như một hộp đen bỏ qua phần dư; toàn token phải hợp lệ.
B30 kết hợp hai ý tưởng: generic code để tránh copy thuật toán theo kiểu dữ liệu và exception để tách luồng lỗi khỏi luồng thành công. Exception chỉ nên xuất hiện ở điểm precondition/validation thất bại; state hoặc aggregate không được cập nhật trước khi biết thao tác đã hợp lệ. Với template, hãy xác định rõ các toán tử/operation mà type T cần hỗ trợ.
Yêu cầu
- Hàm parsePositive(string).
- Hai loại exception theo contract.
- Tiếp tục xử lý mọi token.
- In
valid invalid sum max; nếu valid0, max NONE.
Input
Dòng 1 n; sau đó n token.
Output
Một dòng summary.
Ràng buộc
1≤n≤5000, token dài≤30.
Ví dụ 1
Input
6
10 0 12x 999 1000000001 5
Output
3 3 1014 999
Giải thích
Token hợp lệ là10,999,5; token0 out_of_range, 12x invalid format, 1000000001 out_of_range. valid3 invalid3, sum1014, max999, nên output 3 3 1014 999.
Ví dụ này đồng thời kiểm tra cả nhánh thành công và tính ổn định khi có lỗi/generic state. Nếu validation fail, output lỗi phải xuất hiện mà dữ liệu hợp lệ trước đó vẫn được giữ. Nếu generic function được instantiate với type khác, cùng logic xử lý vẫn phải tạo kết quả tương ứng theo type đó.
Ví dụ 2
Input
4
1 2 3 4
Output
4 0 10 4
Giải thích
Bốn token1,2,3,4 đều hợp lệ; valid4 invalid0, sum10, max4. Không exception nào xảy ra.
Ví dụ này đồng thời kiểm tra cả nhánh thành công và tính ổn định khi có lỗi/generic state. Nếu validation fail, output lỗi phải xuất hiện mà dữ liệu hợp lệ trước đó vẫn được giữ. Nếu generic function được instantiate với type khác, cùng logic xử lý vẫn phải tạo kết quả tương ứng theo type đó.
Thông tin học tập
- Module: M08
- Buổi: B30
- Loại bài: HOMEWORK
- Độ khó: Medium
- Concepts: exception, parsing string, validation, aggregation, try catch
- Giới hạn kiến thức: B01-B30
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments