Antecedentes
Hace ciento trece años, el criptógrafo aficionado Félix Delastelle publicó su trabajo sobre el cifrado de cuatro cuadrados , un cifrado de sustitución digráfica que acepta dos permutaciones de un alfabeto de 25 letras como claves y codifica mensajes que consisten en esas letras.
Como la mayoría de las cifras de lápiz y papel, la cifra de cuatro cuadrados no tiene ningún valor criptográfico en la actualidad, pero en el momento de su invención, tenía una ventaja significativa sobre sus contrapartes monográficas.
Ciento trece años después, Alice Delastelle decide mejorar el cifrado de cuatro cuadrados al aumentar el tamaño del alfabeto y el número de claves. [cita requerida]
Configuración clave
El alfabeto contiene los siguientes caracteres (comenzando con el espacio):
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
Dada una frase de paso, construimos una permutación de este alfabeto de la siguiente manera:
Mantenga solo la primera aparición de cada personaje.
Agregue los caracteres no utilizados del alfabeto, en su orden natural.
Después de convertir cuatro frases de paso en cuatro claves, dividimos cada clave en un cuadrado de longitud lateral 7 y organizamos los cuatro cuadrados resultantes para que formen un cuadrado grande.
Por ejemplo, si las frases de contraseña fueran
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
las llaves se construirían y organizarían así:
PROGAMI POULARI
N UZLES TY CNES
&CDF!"# &DBWG!"
$%'()*+ #$%'()*
,-./:;< +,-./:;
=>?@BHJ <=>?@FH
KQTVWXY JKMQVXZ
CORET H DON'T E
SBAYPL! LV!"#$%
"#$%&'( &()*+,-
)*+,-./ ./:;<=>
:;<=>?@ ?@ABCFG
DFGIJKM HIJKMPQ
NQUVWXZ RSUWXYZ
Cifrado
Dado un mensaje de texto sin formato como
ALICE LOVES BOB.
agregamos 0 o 1 espacios para igualar su longitud y dividirlo en pares de caracteres:
["AL" "IC" "E " "LO" "VE" "S " "BO" "B."]
Para cada par de caracteres, ubicamos el primer carácter en el primer cuadrado (orden de lectura) y el segundo en el cuarto.
Luego, elegimos los caracteres en los cuadrados restantes de modo que los cuatro caracteres seleccionados formen un rectángulo cuyos lados son paralelos a los lados de los cuadrados.
Finalmente, reemplazamos el par de caracteres por los caracteres seleccionados del segundo y tercer cuadrado.
Para nuestra cadena de ejemplo, esto produce
["PP" "A@" "E " "YT" "ZE" "EH" "=T" "<-"]
dando como resultado el siguiente texto cifrado:
PPA@E YTZEEH=T<-
Tarea
Escriba un programa o función que acepte cuatro frases de paso y un texto sin formato, utilice la variante anterior del cifrado de cuatro cuadrados para cifrarlo y devuelva el texto cifrado resultante.
Detalles:
Las cinco cadenas de entrada consistirán únicamente en caracteres del alfabeto mencionado.
Las cinco cadenas de entrada se pueden leer en cualquier orden, como tal, una sola cadena delimitada por nuevas líneas o como una matriz de cinco cadenas.
Puede suponer que ninguna de las cadenas está vacía.
La salida debe ser una sola cadena.
Si elige imprimir el resultado en STDOUT, puede imprimir solo los caracteres del texto cifrado y (opcionalmente) una nueva línea final.
Aplican reglas estándar de código de golf .
Casos de prueba
En todos los casos de prueba, las primeras cuatro cadenas corresponden a los cuadros clave en el orden de lectura y la última cadena de entrada al texto sin formato.
Entrada
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
ALICE LOVES BOB.
Salida
PPA@E YTZEEH=T<-
Entrada
!"#$%&'()*+,-./:;<=>
!"#$%&'()*+,-./:;<=>?@ABCDE
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKL
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRS
HELLO, WORLD!
Salida
LALLR)#TROKE !
Entrada
,'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!
Salida
#>TE,VK+,ZQ(&<F@RA.NL@DM%NAC&>
Entrada
& %(,-#)$@?/=>'*"<:;!.+
=/$- ?;',@#!(&<")%.:>+*
&%-/<?.;$'#:=!( ,>"+*)@
=,<-*?#.'@/;>%!+:(& ")$
HNRA#JX$H %JAV+"GTS,
Salida
GOOD LUCK, HAVE FUN.