İki girdi satırı alan ve ikincisini Playfair şifreleme tekniğine göre şifrelemek için birincisini anahtar sözcük olarak kullanan bir program yazın.
Wikipedia, Playfair şifrelemesini bazı ayrıntılarıyla açıklar , ancak herhangi bir belirsizliği önlemek için kısa bir özet:
1. Bir anahtar tablo oluşturun:
J
Anahtar sözcük grubundaki tüm tekrarları ile değiştirin I
, sonra tüm alfabe dışı karakterleri ve tekrarlanan karakterleri soyun. 5 × 5 şifreleme tablosuna yerleştirin, kalan hücreleri alfabenin geri kalanıyla doldurun (hariç J
; sevmiyoruzJ
).
Örnek:
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. Şifrelenecek mesajı hazırlayın
Her birini a J
ile değiştirin I
, tüm alfabe dışı karakterleri X
soyun ve aynı harfi içeren çiftleri iki kez kırmak için a tuşunu kullanarak çiftlere bölün . Tek bir harfle sonuçlanırsanız X
, sonuna ekleyin . (Not: - Rakamlar tam olarak dile edilecek olan ONE
, TWO
, THREE
vb - ama bu zaten sizin için yapılmıştır varsayabiliriz.)
Örnek:
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. Şifreleme
Her harf çiftini sırayla şifreleyin. Anahtar tablonun farklı satır ve sütunlarındaysa, her birini diğer harfin bulunduğu sütundaki aynı satırdaki harfle değiştirin (örn. VM
⇒ EI
, LZ
⇒ GQ
). Aynı satırda (veya sütunda) yer alıyorlarsa, hemen sağdaki (veya altta) iki karakteri seçin, gerekirse sarın (örn. OE
⇒ VR
, ZG
⇒KP
).
Örnek:
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
Bu işlem tarafından üretilen dize, programınızın vermesi gereken şifreli mesajdır.
Kurallar:
- Giriş metni ve tuşu
stdin
, komut satırı bağımsız değişkenlerinden veya bu tür diğer kaynaklardan . Sabit kodlu girişe izin verilmiyor. - Programınızın geçiş deyimi ve mesajı için hem büyük hem de küçük harfleri kabul etmesi gerekir.
- Şifrelenmiş çıktı büyük veya küçük harf olabilir.
- Programınız en az 64 karakter uzunluğunda anahtar kelime öbeklerini ve en az 16 KB ileti metinlerini kabul etmelidir.
- ASCII olmayan girişi işlemek zorunda değilsiniz.
XX
Şifreleme sırasında harf çiftinin oluşma olasılığını yoksayabilirsiniz .- Programın çıktısına boşluk eklemeye gerek yoktur.
- Yanıtınız, programınız tarafından üretilen bir mesaj, anahtar sözcük ve şifreli çıktı örneği içermelidir.
- Bu bir kod golf meydan okumadır, bu yüzden en kısa kod (bayt cinsinden) ile cevap kazanacaktır.
NOT: Birbirini izleyen harfleri yalnızca aynı çiftte görünüyorsa kırmanız gerektiğini lütfen unutmayın . Bu yüzden örneğin
MASSACHUSETTS
şu şekilde şifrelenmelidirMA SX SA CH US ET TS
- çiftS
bölünmek zorundadır, ancak çiftT
değildir.
J
Sevmiyoruz" APL hakkında benzer düşünceler barındırıyor musunuz?