Đề bài
Đa hình cho phép code gọi cùng một phương thức trên các đối tượng khác nhau và nhận hành vi riêng của từng đối tượng. Ở đây mỗi kênh tự tính chi phí của một tin nhắn theo cách riêng.
Mỗi tin nhắn có dạng <channel> <text>, trong đó text là toàn bộ phần sau khoảng trắng đầu tiên:
email: tốn 1.sms: tốn 5 cho mỗi khối 160 ký tự đã bắt đầu (1 đến 160 ký tự là một khối).push: miễn phí.
Hãy viết notification_cost(messages).
Đầu vào
messages: Các tin nhắn cần gửi. Nội dung SMS có ít nhất một ký tự.
Đầu ra
Trả về tổng chi phí.
Ràng buộc
0 ≤ số tin nhắn ≤ 10,000
Nội dung dài 1 đến 2,000 ký tự
Ví dụ
Đầu vào:
messages = ["email Welcome!", "sms Your code is 1234", "push New follower"]
Kết quả mong đợi:
expected = 6
Đầu vào:
std::vector<std::string> messages = {"email Welcome!", "sms Your code is 1234", "push New follower"};
Kết quả mong đợi:
long long expected = 6;
Đầu vào:
string[] messages = new string[] {"email Welcome!", "sms Your code is 1234", "push New follower"};
Kết quả mong đợi:
long expected = 6;
Giải thích
Email tốn 1, SMS ngắn dùng một khối (5) và push miễn phí: 6.
Đầu vào:
messages = ["sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
Kết quả mong đợi:
expected = 10
Đầu vào:
std::vector<std::string> messages = {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
Kết quả mong đợi:
long long expected = 10;
Đầu vào:
string[] messages = new string[] {"sms aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
Kết quả mong đợi:
long expected = 10;
Giải thích
161 ký tự cần hai khối 160 ký tự: 2 × 5 = 10.
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Tách mỗi tin nhắn một lần tại khoảng trắng đầu tiên thành kênh và nội dung.
Gợi ý 2
Với SMS, đếm số khối bằng phép chia làm tròn lên: (length + 159) / 160.
Gợi ý 3
Tin push miễn phí nên cộng 0.
Độ phức tạp mong đợi
thời gian O(tổng độ dài), bộ nhớ phụ O(1)
Tham khảo
Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.