Trình tổng hợp nhật ký
Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 55 trên 56.
Thử thách
Trung bìnhBạn đang xử lý nhật ký truy cập. Đọc một dòng đầu vào duy nhất: danh sách các mục level:user:bytes, phân tách bằng dấu phẩy.
Một số mục không hợp lệ và cần được bỏ qua: mọi mục có bytes không thể phân tích thành số nguyên hoặc có level không thuộc INFO, WARN, ERROR (phân biệt chữ hoa chữ thường).
In ra theo thứ tự sau:
- Mỗi cấp độ xuất hiện ít nhất một lần có một dòng, sắp xếp theo thứ tự cố định sau:
ERROR,WARN,INFO. Mỗi dòng có dạng<level>: <count> (<bytes>), trong đócountlà số mục hợp lệ ở cấp độ đó vàbyteslà tổng số byte của các mục đó. Top user: <name> (<bytes>): người dùng có tổng số byte lớn nhất trong tất cả các mục hợp lệ. Nếu bằng nhau, xếp tên theo thứ tự bảng chữ cái.Skipped: <n>cùng số lượng mục sai định dạng.
Với đầu vào INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75, đầu ra là:
ERROR: 1 (50)
INFO: 3 (375)
Top user: alice (225)
Skipped: 2Tự làm thử
let entries = readLine()!.components(separatedBy: ",")
let order = ["ERROR", "WARN", "INFO"]
let validLevels: Set<String> = ["INFO", "WARN", "ERROR"]
// TODO: phân tích từng mục, bỏ các mục không hợp lệ, thống kê theo từng cấp độ và từng người dùng;
// in ra các cấp độ theo thứ tự cố định (chỉ những cấp độ đã xuất hiện), người dùng đứng đầu, rồi đến số lượng Skipped
Tất cả bài học trong Logic và luồng thực thi
1Chuỗi chuyên sâu
Đếm và chỉ sốChữ hoa, chữ thường và xóa khoảng trắngTìm kiếm trong chuỗiTách và nối chuỗiThay thế chuỗi conÔn tập: Kiểm tra tên người dùng4Tập hợp
Tạo tập hợpPhép hợp và phép giaoPhép trừ và hiệu đối xứngTập con và tập hợp conÔn tập: Bộ lọc thẻ7Dự án: Theo dõi thói quen
Tổng quan dự ánĐánh dấu hoàn thành10Dự án: bộ máy trắc nghiệm
Tổng quan dự ánĐặt câu hỏiTự luyện tập: Playground Swift