Latar Belakang
Seratus tiga belas tahun yang lalu, kriptografi amatir Félix Delastelle menerbitkan karyanya pada cipher empat-persegi , sebuah cipher substitusi digrafik yang menerima dua permutasi alfabet 25-huruf sebagai kunci dan menyandikan pesan yang terdiri dari huruf-huruf itu.
Seperti kebanyakan cipher pena-dan-kertas, cipher empat-persegi tidak memiliki nilai kriptografi saat ini, tetapi pada saat penemuannya, cipher memiliki keunggulan yang signifikan dibandingkan dengan rekan-rekan monografinya.
Seratus tiga belas tahun kemudian, Alice Delastelle memutuskan untuk memperbaiki sandi empat persegi dengan meningkatkan ukuran alfabet dan jumlah kunci. [rujukan?]
Pengaturan kunci
Alfabet berisi karakter-karakter berikut (dimulai dengan spasi):
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
Diberikan frasa sandi, kami membuat permutasi alfabet ini sebagai berikut:
Pertahankan hanya kemunculan pertama setiap karakter.
Tambahkan karakter yang tidak digunakan dari alfabet, sesuai urutan aslinya.
Setelah mengubah empat frasa sandi menjadi empat kunci, kami membagi setiap kunci menjadi kuadrat dengan panjang sisi 7 dan mengatur empat kuadrat yang dihasilkan sehingga membentuk satu kuadrat besar.
Misalnya, jika frasa aksesnya adalah
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
kunci akan dibangun dan diatur seperti ini:
PROGAMI POULARI
N UZLES TY CNES
&CDF!"# &DBWG!"
$%'()*+ #$%'()*
,-./:;< +,-./:;
=>?@BHJ <=>?@FH
KQTVWXY JKMQVXZ
CORET H DON'T E
SBAYPL! LV!"#$%
"#$%&'( &()*+,-
)*+,-./ ./:;<=>
:;<=>?@ ?@ABCFG
DFGIJKM HIJKMPQ
NQUVWXZ RSUWXYZ
Enkripsi
Diberikan pesan teks biasa seperti
ALICE LOVES BOB.
kami menambahkan 0 atau 1 spasi untuk membuat panjangnya menjadi rata dan membaginya menjadi pasangan karakter:
["AL" "IC" "E " "LO" "VE" "S " "BO" "B."]
Untuk setiap pasangan karakter, kami menemukan karakter pertama di kuadrat pertama (urutan membaca) dan yang kedua di keempat.
Kemudian, kita memilih karakter dalam kotak yang tersisa sehingga empat karakter yang dipilih membentuk persegi panjang yang sisi-sisinya sejajar dengan sisi kotak.
Akhirnya, kami mengganti pasangan karakter dengan karakter yang dipilih dari kotak kedua dan ketiga.
Untuk string contoh kami, ini menghasilkan
["PP" "A@" "E " "YT" "ZE" "EH" "=T" "<-"]
menghasilkan ciphertext berikut:
PPA@E YTZEEH=T<-
Tugas
Tulis sebuah program atau fungsi yang menerima empat frasa sandi dan plaintext, gunakan varian cipher empat-persegi di atas untuk mengenkripsi dan mengembalikan ciphertext yang dihasilkan.
Detail:
Lima string input hanya akan terdiri dari karakter alfabet yang disebutkan.
Lima string input dapat dibaca dalam urutan apa pun, dengan demikian, string tunggal dibatasi oleh baris baru atau sebagai array dari lima string.
Anda dapat mengasumsikan bahwa tidak ada string yang kosong.
Output harus berupa string tunggal.
Jika Anda memilih untuk mencetak output ke STDOUT, Anda hanya dapat mencetak karakter-karakter dari ciphertext dan (secara opsional) sebuah baris tambahan.
Aturan standar kode-golf berlaku.
Uji kasus
Dalam semua kasus uji, empat string pertama sesuai dengan kotak kunci dalam urutan membaca dan string input terakhir ke teks biasa.
Memasukkan
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
ALICE LOVES BOB.
Keluaran
PPA@E YTZEEH=T<-
Memasukkan
!"#$%&'()*+,-./:;<=>
!"#$%&'()*+,-./:;<=>?@ABCDE
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKL
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRS
HELLO, WORLD!
Keluaran
LALLR)#TROKE !
Memasukkan
,'K AB-Q=?@("W$>XM).C#<I:G!OLP*+;SZJTU%NED/&VFHRY
:,-D$C<SU=IYHFVA;! JG/M&L+WT%#.Q@(N*R")EZOBKX?'>P
L()JX,BND?Z<>P*FU%=O@&KIC+A!Y:;$SWHR.EMG'/T"QV #-
<->CI")AP Q:+U;O/F(KH&ER!MW?X'VJLZ#.$,BSGN@TD%*Y=
SPIN THE PPCG WHEEL OF BLAME!
Keluaran
#>TE,VK+,ZQ(&<[email protected]@DM%NAC&>
Memasukkan
& %(,-#)$@?/=>'*"<:;!.+
=/$- ?;',@#!(&<")%.:>+*
&%-/<?.;$'#:=!( ,>"+*)@
=,<-*?#.'@/;>%!+:(& ")$
HNRA#JX$H %JAV+"GTS,
Keluaran
GOOD LUCK, HAVE FUN.
sumber
Pyth -
88868378767572 byte8 byte disimpan berkat @orlp .
Waaay terlalu lama, saya sangat tidak senang dengan ini, tetapi hanya mempostingnya sementara saya mencari cara yang lebih baik untuk menangani kotak.
Cobalah online di sini .
sumber
c+e.z*%le.z2d2
denganC.tce.z2d
. Jangan tanya :)