[Buổi 30][Template & ngoại lệ][ADV] Bài 1: Validation Pipeline với ngoại lệ tùy chỉnh
Validation Pipeline với ngoại lệ tùy chỉnh
Bối cảnh
Một hệ thống nhập liệu xử lý record id value. value có thể là int hoặc double tùy type tag. Cần generic validator theo range [low,high]. Các lỗi phải phân biệt bằng custom exception ValidationError chứa code:
DUPLICATE_IDOUT_OF_RANGEBAD_ORDERnếu low>high ngay từ cấu hình.
Với từng record, ID trùng hoặc value ngoài range bị từ chối nhưng chương trình tiếp tục. Các record hợp lệ được lưu, sau đó in count hợp lệ, tổng value và ID có value lớn nhất; tie ID tăng. Nếu cấu hình BAD_ORDER, in duy nhất CONFIG_ERROR.
Bài Hard tích hợp class exception tùy chỉnh, template validator cho int/double, recovery theo từng record và aggregate sau validation. Không dùng inheritance exception phức tạp ngoài kế thừa std::exception cơ bản.
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ợ.
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
- Custom ValidationError(code).
- Template validateRange<T>.
- ID uniqueness.
- Recover từng record.
- Support I/D; CONFIG_ERROR nếu low>high.
Input
Dòng 1 type n low high; n dòng id value.
Output
CONFIG_ERROR hoặc VALID x INVALID y SUM ... BEST id value.
Ràng buộc
1≤n≤5000.
Ví dụ 1
Input
I 5 0 10
A 5
B 11
A 7
C 10
D 0
Output
VALID 3 INVALID 2 SUM 15 BEST C 10
Giải thích
A5 hợp lệ; B11 out-of-range; A7 duplicate; C10 và D0 hợp lệ. VALID3 INVALID2, sum15. BEST là C10 vì value lớn nhất. Output summary phản ánh hai loại lỗi nhưng vẫn tiếp tục xử lý.
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
D 4 0 1
A 0.5
B 1.0
C -0.1
D 0.5
Output
VALID 3 INVALID 1 SUM 2.00 BEST B 1.00
Giải thích
A0.5,B1.0,D0.5 hợp lệ; C-0.1 invalid. Sum2.00, best B1.00. Hai record A/D hòa0.5 không ảnh hưởng best.
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: ADVANCED
- Độ khó: Hard
- Concepts: custom exception, templates, validation pipeline, generic range, command processing
- Giới hạn kiến thức: B01-B30
- Time limit: 2 second(s)
- Memory limit: 256 MB
- Point: 100
Comments