เขียนโปรแกรมที่รับอินพุตสองบรรทัดและใช้คำแรกเป็นวลีสำคัญในการเข้ารหัสรายการที่สองตามเทคนิคการเข้ารหัสของ Playfair
Wikipedia อธิบายการเข้ารหัส Playfair ในรายละเอียดบางอย่างแต่เพื่อหลีกเลี่ยงความคลุมเครือใด ๆ ต่อไปนี้เป็นบทสรุปโดยย่อ:
1. สร้างตารางคีย์:
แทนที่การเกิดขึ้นทั้งหมดJ
ในวลีคีย์ด้วยI
จากนั้นตัดอักขระที่ไม่ใช่ตัวอักษรทั้งหมดและอักขระซ้ำ แทรกลงในตารางการเข้ารหัส 5 × 5 เติมเซลล์ที่เหลือด้วยตัวอักษรที่เหลือ (ยกเว้นJ
; เราไม่ชอบJ
)
ตัวอย่าง:
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. เตรียมข้อความที่จะเข้ารหัส
แทนที่ทุกตัวJ
ด้วยI
, ดึงอักขระที่ไม่ใช่ตัวอักษรทั้งหมดและแยกออกเป็นคู่โดยใช้X
เพื่อแยกคู่ที่มีตัวอักษรเดียวกันสองครั้ง หากคุณมีตัวอักษรแปลก ๆ ให้เพิ่มX
ที่ส่วนท้าย (หมายเหตุ: ตัวเลขจะต้องมีการสะกดออกมาในแบบเต็ม - ONE
, TWO
, THREE
ฯลฯ - แต่คุณสามารถสมมตินี้ได้รับการทำมาแล้วสำหรับคุณ.)
ตัวอย่าง:
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. การเข้ารหัส
เข้ารหัสตัวอักษรแต่ละคู่ตามลำดับ ถ้าพวกเขาอยู่ในแถวที่แตกต่างกันและคอลัมน์ของตารางที่สำคัญแทนแต่ละคนมีตัวอักษรจากแถวเดียวกันในคอลัมน์ที่ตัวอักษรตัวอื่น ๆ จะพบ (เช่นVM
⇒ EI
, LZ
⇒ GQ
) หากอยู่ในแถวเดียวกัน (หรือคอลัมน์) ให้เลือกอักขระสองตัวทางด้านขวา (หรือด้านล่าง) ทันทีล้อมรอบหากจำเป็น (เช่นOE
⇒ VR
, ZG
⇒KP
)
ตัวอย่าง:
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
สตริงที่ผลิตโดยกระบวนการนี้เป็นข้อความเข้ารหัสซึ่งโปรแกรมของคุณควรส่งออก
กฎ:
- ข้อความอินพุตและคีย์อาจได้รับจาก
stdin
อาร์กิวเมนต์บรรทัดคำสั่งหรือแหล่งอื่น ๆ ไม่อนุญาตให้ใช้อินพุตแบบตายตัว - โปรแกรมของคุณต้องยอมรับข้อความตัวพิมพ์ใหญ่และตัวพิมพ์เล็กสำหรับวลีรหัสผ่านและข้อความ
- ผลลัพธ์ที่เข้ารหัสอาจเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก
- โปรแกรมของคุณควรยอมรับวลีสำคัญที่มีความยาวอย่างน้อย 64 ตัวอักษรและข้อความอย่างน้อย 16 KB
- คุณไม่จำเป็นต้องจัดการกับอินพุตที่ไม่ใช่ ASCII
- คุณอาจเพิกเฉยต่อความเป็นไปได้ของการจับคู่จดหมาย
XX
ระหว่างการเข้ารหัส - ไม่จำเป็นต้องเพิ่มช่องว่างในผลลัพธ์ของโปรแกรม
- คำตอบของคุณควรมีตัวอย่างของข้อความวลีสำคัญและผลลัพธ์ที่เข้ารหัสที่ผลิตโดยโปรแกรมของคุณ
- นี่เป็นความท้าทายของการเขียนโค้ดดังนั้นคำตอบที่มีรหัสสั้นที่สุด (เป็นไบต์) จะเป็นผู้ชนะ
หมายเหตุ:โปรดจำไว้ว่าคุณจะต้องทำลายจดหมายติดต่อกันถ้าพวกเขาปรากฏในคู่เดียวกัน ตัวอย่างเช่น
MASSACHUSETTS
ควรเข้ารหัสเป็นMA SX SA CH US ET TS
- คู่S
จะต้องแยก แต่คู่T
ไม่ได้
J
" คุณเก็บความรู้สึกที่คล้ายกันเกี่ยวกับ APL หรือไม่?