C7-08 · Mã Caesar

Xem dạng PDF

Gửi bài giải

Điểm: 1,00
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Sách "Lập trình cơ sở với Python"
Dạng bài
Ngôn ngữ cho phép
Python

Nguồn: Bài C7-08, mục 7.10, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long.

Đề

Mã Caesar là cách mã hóa cổ: thay mỗi chữ cái bằng chữ đứng sau nó ~k~ vị trí trong bảng chữ cái. Cho một câu và số ~k~. Hãy mã hóa câu:

  • mỗi chữ cái a–z dịch đi ~k~ vị trí, quay vòng từ z về a (với ~k = 3~: x → a, y → b, z → c);
  • mỗi chữ cái A–Z cũng vậy và giữ nguyên chữ hoa (Y → B);
  • mọi ký tự khác (chữ số, dấu câu, dấu cách…) giữ nguyên.

Dữ liệu vào

  • Dòng 1: câu cần mã hóa.
  • Dòng 2: số nguyên ~k~.

Kết quả

Một dòng: câu đã mã hóa.

Ràng buộc

  • Câu dài từ ~1~ đến ~200~ ký tự ASCII in được (chữ, số, dấu câu, dấu cách).
  • ~0 \le k \le 25~.

Gợi ý

Mục 7.2: ord(c) - ord("a") là vị trí của chữ thường c (0 đến 25); cộng ~k~, lấy % 26 để quay vòng, rồi chr(... + ord("a")). Chữ hoa làm tương tự với mốc ord("A"). Lưu ý: giữa Z (mã 90) và a (mã 97) còn sáu ký tự [, \, ], ^, _, ` — chúng không phải chữ cái.

Lưu ý về chấm

Hệ thống so từng ký tự của dòng kết quả (chỉ bỏ qua dấu cách thừa ở cuối dòng): dấu cách ở đầu câu và nhiều dấu cách liền nhau giữa câu phải giữ nguyên. Đừng split() rồi join lại câu.

Ví dụ 1

Dữ liệu vào:

Hen gap lai luc 7h!
3

Kết quả:

Khq jds odl oxf 7k!

Ví dụ 2

Dữ liệu vào:

xyz XYZ [Zebra]
3

Kết quả:

abc ABC [Cheud]

Giải thích ví dụ

  • Ví dụ 1: H → K, e → h, n → q…; chữ số 7, dấu cách và dấu ! giữ nguyên.
  • Ví dụ 2: x, y, z quay vòng về a, b, c; chữ hoa quay vòng trong A–Z. Hai dấu ngoặc vuông [, ] không phải chữ cái nên giữ nguyên; Zebra thành Cheud.

Nguồn trong sách: bài tập C7-08 (mục 7.10) · Mức: (***)


Đang tải...