Viết chương trình lấy hai dòng đầu vào và sử dụng đầu tiên làm cụm từ chính để mã hóa thứ hai theo kỹ thuật mã hóa Playfair.
Wikipedia mô tả mã hóa Playfair một số chi tiết , nhưng để tránh bất kỳ sự mơ hồ nào, đây là một bản tóm tắt ngắn gọn:
1. Tạo bảng chính:
Thay thế tất cả các lần xuất hiện J
trong cụm từ chính bằng I
, sau đó loại bỏ tất cả các ký tự không phải là bảng chữ cái và các ký tự lặp lại. Chèn vào bảng mã hóa 5 × 5, điền vào các ô còn lại với phần còn lại của bảng chữ cái (ngoại trừ J
; chúng tôi không thích J
).
Thí dụ:
S T A C K
O V E R F
Stack Overflow --> STACKOVERFLW --> L W B D G
H I M N P
Q U X Y Z
2. Chuẩn bị tin nhắn được mã hóa
Thay thế mọi thứ J
bằng một I
, tách tất cả các ký tự không phải là bảng chữ cái và chia thành các cặp, sử dụng một X
để phá vỡ bất kỳ cặp nào có cùng một chữ cái hai lần. Nếu bạn kết thúc với một số lượng lớn các chữ cái, hãy thêm X
vào cuối. (Lưu ý: Chữ số đã được nêu ra đầy đủ - ONE
, TWO
, THREE
, vv - nhưng bạn có thể giả định này đã được thực hiện cho bạn.)
Thí dụ:
In:
The cat crept into the crypt, crapped, and crept out again.
Out:
TH EC AT CR EP TI NT OT HE CR YP TC RA PX PE DA ND CR EP TO UT AG AI NX
3. Mã hóa
Mã hóa lần lượt từng cặp chữ cái. Nếu họ đang có trong hàng và cột của bảng quan trọng khác nhau, thay thế nhau bằng chữ từ cùng hàng ở cột nơi lá thư khác được tìm thấy (ví dụ, VM
⇒ EI
, LZ
⇒ GQ
). Nếu họ đang ở cùng hàng (hoặc cột), chọn hai nhân vật ngay bên phải (hoặc thấp hơn), gói xung quanh nếu cần thiết (ví dụ, OE
⇒ VR
, ZG
⇒ KP
).
Thí dụ:
In:
TH EC AT CR EP TI NT OT HE CR YP TC RA PX PE DA ND CR EP TO UT AG AI NX
Out:
SI RA CA RD FM VU IC VS MO RD ZN AK EC MZ MF BC YN RD FM SV TV KB TM MY
Chuỗi được tạo bởi quá trình này là thông điệp được mã hóa, mà chương trình của bạn sẽ xuất ra.
Quy tắc:
- Văn bản đầu vào và khóa có thể được lấy từ
stdin
, đối số dòng lệnh hoặc các nguồn khác. Đầu vào mã hóa cứng không được phép. - Chương trình của bạn phải chấp nhận cả văn bản chữ hoa và chữ thường cho cụm từ và thông báo.
- Đầu ra được mã hóa có thể là chữ hoa hoặc chữ thường.
- Chương trình của bạn nên chấp nhận các cụm từ chính có độ dài ít nhất 64 ký tự và văn bản tin nhắn có ít nhất 16 KB.
- Bạn không cần phải xử lý đầu vào không phải ASCII.
- Bạn có thể bỏ qua khả năng cặp chữ cái
XX
xảy ra trong quá trình mã hóa. - Không cần thêm khoảng trắng vào đầu ra của chương trình.
- Câu trả lời của bạn nên bao gồm một ví dụ về tin nhắn, cụm từ chính và đầu ra được mã hóa do chương trình của bạn tạo ra.
- Đây là một thử thách golf mã, vì vậy câu trả lời với mã ngắn nhất (tính bằng byte) sẽ giành chiến thắng.
LƯU Ý: Hãy nhớ rằng bạn chỉ cần ngắt các chữ cái liên tiếp nếu chúng xuất hiện trong cùng một cặp . Vì vậy, ví dụ
MASSACHUSETTS
nên được mã hóa thànhMA SX SA CH US ET TS
- gấp đôiS
phải được chia, nhưng gấp đôiT
thì không.
J
" Bạn có chứa những tình cảm tương tự về APL không?