Tulis program yang mengambil dua baris input dan gunakan yang pertama sebagai frase kunci untuk mengenkripsi yang kedua sesuai dengan teknik enkripsi Playfair.
Wikipedia menjelaskan enkripsi Playfair dalam beberapa detail , tetapi untuk menghindari ambiguitas, berikut ringkasan singkatnya:
1. Hasilkan tabel kunci:
Ganti semua kemunculan J
dalam frasa kunci dengan I
, lalu hapus semua karakter non-alfabet dan karakter berulang. Masukkan ke dalam tabel enkripsi 5 × 5, mengisi sel-sel yang tersisa dengan sisa alfabet (kecuali J
; kami tidak suka J
).
Contoh:
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. Siapkan pesan yang akan dienkripsi
Ganti setiap J
dengan I
, strip semua karakter non-alfabet dan pisahkan menjadi pasangan, gunakan X
untuk mematahkan pasangan yang mengandung huruf yang sama dua kali. Jika Anda berakhir dengan jumlah huruf ganjil, tambahkan X
di bagian akhir. (Catatan: Angka telah dibilang penuh - ONE
, TWO
, THREE
, dll - tetapi Anda dapat menganggap ini sudah dilakukan untuk Anda.)
Contoh:
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. Enkripsi
Enkripsi setiap pasangan huruf secara bergantian. Jika mereka berada di baris dan kolom dari tabel kunci yang berbeda, ganti masing-masing dengan surat dari baris yang sama dalam kolom di mana huruf lainnya ditemukan (misalnya, VM
⇒ EI
, LZ
⇒ GQ
). Jika mereka berada di baris yang sama (atau kolom), pilih dua karakter segera ke kanan (atau di bawah), balas jika perlu (misalnya, OE
⇒ VR
, ZG
⇒ KP
).
Contoh:
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
String yang dihasilkan oleh proses ini adalah pesan terenkripsi, yang harus dihasilkan oleh program Anda.
Aturan:
- Teks dan kunci input dapat diperoleh dari
stdin
, argumen baris perintah atau sumber lain semacam itu. Input kode-keras tidak diizinkan. - Program Anda harus menerima teks huruf besar dan kecil untuk frasa sandi dan pesannya.
- Output terenkripsi mungkin huruf besar atau kecil.
- Program Anda harus menerima frasa kunci paling tidak panjangnya 64 karakter, dan pesan teks minimal 16 KB.
- Anda tidak diharuskan menangani input non-ASCII.
- Anda dapat mengabaikan kemungkinan pasangan surat
XX
terjadi selama enkripsi. - Tidak perlu menambahkan spasi putih ke output program.
- Jawaban Anda harus mencakup contoh pesan, frase kunci dan output terenkripsi yang dihasilkan oleh program Anda.
- Ini adalah tantangan kode golf, jadi jawaban dengan kode terpendek (dalam byte) akan menang.
CATATAN: Harap diingat bahwa Anda hanya perlu memecah huruf berurutan jika muncul dalam pasangan yang sama . Jadi misalnya
MASSACHUSETTS
harus dienkripsi sebagaiMA SX SA CH US ET TS
- gandaS
harus dipisah, tetapi gandaT
tidak.
J
" Apakah Anda menyimpan sentimen serupa tentang APL?