[Buổi 21][Xử lý chuỗi][HW] Bài 5: Gộp cấu hình key=value
Gộp cấu hình key=value
Bối cảnh
Một dòng cấu hình gồm các token dạng key=value tách bởi whitespace. Key hợp lệ nếu bắt đầu bằng chữ cái và các ký tự còn lại chỉ là chữ cái, chữ số hoặc _. Value phải là số nguyên không âm chỉ gồm chữ số. Token sai format được đếm là invalid và bỏ qua. Nếu cùng key xuất hiện nhiều lần, value của key được cộng dồn.
Sau khi xử lý, in số key hợp lệ phân biệt và số token invalid, rồi liệt kê key totalValue theo thứ tự key tăng dần. Bài Medium buộc học viên tách token quanh dấu = đúng một lần, validate hai field và quản lý duplicate bằng map. Token a=1=2 phải invalid vì có nhiều delimiter.
Duplicate key được định nghĩa là phép cộng chứ không phải "last wins", vì vậy parser và aggregator phải tách trách nhiệm. Một token hợp lệ mới được phép chạm vào map; nếu viết a[key] trước khi biết value hợp lệ, token lỗi có thể để lại một key giá trị 0 trong kết quả và làm distinct count sai.
Yêu cầu
- Tokenize theo whitespace.
- Mỗi token phải có đúng một
=. - Validate key và value.
- Cộng dồn value theo key bằng map.
- In
distinct invalid, rồi các key/value tăng dần.
Input
Một dòng cấu hình.
Output
Dòng đầu distinct invalid; các dòng sau key totalValue.
Ràng buộc
|line|≤5000, tổng từng key nằm trong long long.
Ví dụ 1
Input
a=1 b=2 a=3 bad x=-1 c=5
Output
3 2
a 4
b 2
c 5
Giải thích
Token hợp lệ: a=1, b=2, a=3, c=5. bad thiếu =, x=-1 có value âm nên invalid. Map cộng dồn a thành 4; b=2, c=5. Có 3 key distinct và 2 invalid, nên output đầu 3 2, sau đó a 4, b 2, c 5 theo key tăng.
Ví dụ 2
Input
key=10 _x=2 a1=3
Output
2 1
a1 3
key 10
Giải thích
key=10 hợp lệ. _x=2 invalid vì key phải bắt đầu bằng chữ cái. a1=3 hợp lệ vì chữ số được phép sau ký tự đầu. Do đó distinct=2, invalid=1 và hai dòng là a1 3, key 10 theo thứ tự map.
Thông tin học tập
- Module: M06
- Buổi: B21
- Loại bài: HOMEWORK
- Độ khó: Medium
- Concepts: stringstream, key=value parser, map aggregation, validation, duplicate keys
- Giới hạn kiến thức: B01-B21
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments