Mô tả
Phòng nhân sự của một công ty lớn đang quản lý hệ thống tin nhắn nội bộ. Để tránh việc thông tin nhạy cảm bị rò rỉ khi truyền tải qua mạng nội bộ, hệ thống tự động mã hóa các tin nhắn bằng phương pháp dịch vòng Caesar. Phép mã hóa này giữ nguyên vị trí của mọi ký tự, nhưng mỗi chữ cái sẽ được thay thế bằng một chữ cái khác nằm sau nó một số bước nhất định trong bảng chữ cái tiếng Anh.
Giả sử bạn là kỹ sư viên phụ trách khôi phục dữ liệu. Nhiệm vụ của bạn là viết một hàm giải mã chuỗi tin nhắn về văn bản gốc. Quá trình giải mã chỉ ảnh hưởng đến các chữ cái tiếng Anh in thường và in hoa. Các chữ số, dấu câu, khoảng trắng và mọi ký tự khác đều phải được giữ nguyên. Quá trình dịch vòng cần cuộn vòng tròn quanh bảng chữ cái: nếu dịch lùi qua trước 'a' thì sẽ nối tiếp ở 'z'.
Đầu vào
Bạn nhận được hai tham số:
s: chuỗi ký tự biểu diễn tin nhắn đã bị mã hóa (kiểu chuỗi).k: số nguyên dương cho biết số bước dịch vòng đã dùng khi mã hóa (kiểu số nguyên).
Đầu ra
Trả về một chuỗi duy nhất là nội dung tin nhắn gốc sau khi giải mã.
Ràng buộc
- Độ dài chuỗi
snằm trong khoảng từ 1 đến 10^5 ký tự. - Giá trị
klà số nguyên dương nằm trong khoảng từ 1 đến 10^9. - Chuỗi
scó thể chứa bất kỳ ký tự ASCII in được nào (chữ cái, chữ số, dấu câu, khoảng trắng).
Ví dụ
Ví dụ 1
- Đầu vào:
s = "Khoor, zruog!", k = 3 - Đầu ra:
"Hello, world!"
Giải thích: Hệ thống đã dịch mỗi chữ cái tiến 3 bước khi mã hóa. Để khôi phục, ta dịch lùi 3 bước. Chữ 'K' lùi 3 bước ra 'H', 'h' lùi 3 bước ra 'e', 'o' lùi 3 bước ra 'l'. Dấu câu và khoảng trắng được giữ nguyên vẹn.
Ví dụ 2
- Đầu vào:
s = "Ebiil, tloa!", k = 27 - Đầu ra:
"Hello, world!"
Giải thích: Bước dịch 27 tương đương với bước dịch 1 vì bảng chữ cái chỉ có 26 chữ cái. Ta chỉ cần dịch lùi 1 bước: 'E' thành 'D' (v.v). Cuối cùng thu được nội dung ban đầu.