Bài 26.1. Phân tích Nhật ký Giao dịch Tài chính - [Độ khó: Khá]
Bài 26.1. Phân tích Nhật ký Giao dịch Tài chính - [Độ khó: Khá]
Bạn đang làm việc cho một công ty phân tích dữ liệu tài chính. Nhiệm vụ của bạn là xử lý các tệp nhật ký giao dịch hàng ngày. Mỗi dòng trong nhật ký là một bản ghi giao dịch, nhưng do hệ thống ghi log cũ, định dạng dữ liệu có thể không đồng nhất: các trường bị thiếu, sai định dạng, hoặc có các ký tự thừa. Bạn cần xây dựng một chương trình để đọc các dòng nhật ký này, trích xuất thông tin hợp lệ, tính toán tổng giá trị giao dịch và tìm ra mã sản phẩm (Mã_SP) được giao dịch nhiều nhất từ các bản ghi hợp lệ.
Mỗi dòng nhật ký có định dạng chung là các trường được phân tách bởi dấu phẩy (,
). Các trường theo thứ tự dự kiến: Timestamp
, Loại_Giao_Dịch
, Mã_SP
, Số_Lượng
, Giá_Đơn_Vị
, Mã_Khách_Hàng
.
Chỉ những giao dịch có Số_Lượng
và Giá_Đơn_Vị
là số nguyên dương hợp lệ mới được tính vào tổng giá trị và thống kê sản phẩm. Các trường khác có thể chứa văn bản bất kỳ nhưng sẽ không ảnh hưởng đến tính hợp lệ của giao dịch về mặt số học.
Nếu một dòng không đủ 6 trường được phân tách bởi dấu phẩy, hoặc Số_Lượng
, Giá_Đơn_Vị
không phải là số hoặc không dương, dòng đó được coi là "không hợp lệ".
INPUT FORMAT
Đầu vào bao gồm nhiều dòng, mỗi dòng là một bản ghi nhật ký giao dịch. Số lượng dòng không quá 1000. Mỗi dòng là một chuỗi ký tự dài tối đa 200 ký tự.
Ví dụ:
2023-10-26 10:00:00,BUY,SP001,10,150.5,CUST001
2023-10-26 10:01:00,SELL,SP002,5,abc,CUST002
2023-10-26 10:02:00,BUY,SP003,20,50,,
2023-10-26 10:03:00,BUY,SP001,-3,100,CUST003
2023-10-26 10:04:00,SELL,SP004,1,99.99,CUST004
Invalid line format, Missing data
2023-10-26 10:05:00,BUY,SP005,10,10,CUST005
OUTPUT FORMAT
Đầu ra gồm hai dòng:
Dòng đầu tiên in tổng giá trị của tất cả các giao dịch hợp lệ, định dạng Tổng giá trị giao dịch hợp lệ: [Tổng_Tiền]
. Tổng tiền được tính bằng Số_Lượng
* Giá_Đơn_Vị
cho mỗi giao dịch hợp lệ. Nếu không có giao dịch hợp lệ nào, in Tổng giá trị giao dịch hợp lệ: 0
. Tổng tiền có thể là số thực.
Dòng thứ hai in mã sản phẩm được giao dịch nhiều nhất trong số các giao dịch hợp lệ, định dạng Mã sản phẩm phổ biến nhất: [Mã_SP]
. Nếu có nhiều sản phẩm có cùng số lượng giao dịch hợp lệ cao nhất, in ra sản phẩm đầu tiên xuất hiện trong danh sách các sản phẩm đó (theo thứ tự từ điển tăng dần nếu có thể, hoặc đơn giản là sản phẩm đầu tiên được tìm thấy trong quá trình duyệt). Nếu không có giao dịch hợp lệ nào, in Mã sản phẩm phổ biến nhất: Không có
.
Ví dụ:
Input:
2023-10-26 10:00:00,BUY,SP001,10,150.5,CUST001
2023-10-26 10:01:00,SELL,SP002,5,abc,CUST002
2023-10-26 10:02:00,BUY,SP003,20,50,,
2023-10-26 10:03:00,BUY,SP001,-3,100,CUST003
2023-10-26 10:04:00,SELL,SP004,1,99.99,CUST004
Invalid line format, Missing data
2023-10-26 10:05:00,BUY,SP005,10,10,CUST005
Output:
Tổng giá trị giao dịch hợp lệ: 3104.99
Mã sản phẩm phổ biến nhất: SP001
Giải thích:
- Dòng 1:
SP001
, Số lượng=10, Giá=150.5. Hợp lệ. Giá trị: 10 * 150.5 = 1505.0. SP001: 1 lần. - Dòng 2:
SP002
, Giá=abc (không phải số). Không hợp lệ. - Dòng 3:
SP003
, Số lượng=20, Giá=50. Hợp lệ. Giá trị: 20 * 50 = 1000.0. SP003: 1 lần. - Dòng 4:
SP001
, Số lượng=-3 (không dương). Không hợp lệ. - Dòng 5:
SP004
, Số lượng=1, Giá=99.99. Hợp lệ. Giá trị: 1 * 99.99 = 99.99. SP004: 1 lần. - Dòng 6: Không đủ 6 trường. Không hợp lệ.
- Dòng 7:
SP005
, Số lượng=10, Giá=10. Hợp lệ. Giá trị: 10 * 10 = 100.0. SP005: 1 lần. - Tổng giá trị hợp lệ: 1505.0 + 1000.0 + 99.99 + 100.0 = 2704.99 (Oops, my manual calculation was wrong in the sample above. Let's fix this in the output). Let's recalculate and fix the output sample: 1505.0 (SP001) 1000.0 (SP003) 99.99 (SP004) 100.0 (SP005) Total = 2704.99
Count for products: SP001: 1 SP003: 1 SP004: 1 SP005: 1 All have 1 occurrence. In this case, "SP001" is the first one encountered (or lexicographically smallest if we consider that criterion, but problem says "first appearance"). For simplicity, just pick the first one encountered that has the max frequency. Let's assume "SP001" is the first one found among ties.
Corrected Output:
Tổng giá trị giao dịch hợp lệ: 2704.99
Mã sản phẩm phổ biến nhất: SP001
Comments