En una encriptación monoalfabética todas las letras de un
mensaje se transforman en otras de distintas, siguiendo siempre la misma
regla. El ejemplo más famoso es la encriptación del César, donde se
cambia cada letra de un mensaje por aquella que está
posiciones adelante en el orden del alfabeto, dando la vuelta si es
necesario. Por ejempo, si
,
al cifrar un texto tranformaríamos todas las A en
B; todas las D en E; y todas las
Z en A.
Las encriptaciones monoalfabéticas son fáciles de descifrar usando, simplemente, estadísticas y un diccionario, puesto que algunas palabras pequeñas como ’si’, ’no’, ’el’, ’la’, ’que’, ’de’, ’en’, etc. aparecen con mucha frecuencia.
Para solucionar este problema, encriptaremos el texto usando una codificación un poco mejor, la encriptación polialfabética, que consiste en usar varias encriptaciones monoalfabéticas distintas y un patrón que nos indica qué clave hay que usar para cada letra. Por ejemplo, si usamos dos claves tipo César como las siguientes
Texto plano -> a b c d e f g h i j k l m n o p q r s t u v w x y z
C1(k = 5) -> f g h i j k l m n o p q r s t u v w x y z a b c d e
C2(k = 19) -> t u v w x y z a b c d e f g h i j k l m n o p q r s
y un patrón C1 C2 C2 C1 C2 que se va repitiendo a
medida que se encripta, tendríamos que “bob” se
transformaría en “ghu” y “que secreto” se
transformaría en “vnx xxhkxyh”.
La entrada consta de un número indeterminado de casos de prueba. Cada
caso de pruebas empieza con una línea con el número
de claves, seguido de una línea con
valores
para indicar los desplazamientos del cifrado del Caesar que se utiliza,
seguido de una tercera línea con un número indeterminado de valores
entre
y
que forman el patrón. A continuación, una línea con la cadena de texto
’CIFRAR’ o ’DESCIFRAR’, seguido de un número indeterminado de líneas de
texto con el mensaje. Una línea con un carácter punto (.)
marca el final del mensaje, y no debe cifrarse o descifrarse. Sólo se
debe cifrar y descifrar aquellos caracteres del mensaje que sean del
abecedario, tanto mayúsculas como minúsculas.
Un caso de pruebas con indica el final de la entrada.
Por la salida debes escribir el texto cifrado o descifrado, según se pida. Escribe un salto de línea entre distintos casos de prueba.
Test1:
Resolver varios casos sencillos de cifrados, donde el texto únicamente contiene letras mayúsculas y minúsculas.
Test2:
Resolver varios casos sencillos de descifrados, donde el texto únicamente contiene letras mayúsculas y minúsculas.
Test3:
Resolver varios casos sencillos de cifrados y descifrados, donde el texto únicamente contiene letras mayúsculas y minúsculas.
Test4:
Resolver varios casos con cifrados incluyendo espacios y otros caracteres.
Test5:
Resolver varios casos con descifrados incluyendo espacios y otros caracteres.
Test6:
Resolver varios casos con cifrados y descifrados incluyendo espacios y otros caracteres.
Input
2 5 19 1 2 2 1 2 CIFRAR B o b abcde abcde abcde? abcde the dog que secreto ! . 2 5 19 1 2 2 1 2 CIFRAR que secreto ! . 2 5 19 1 2 2 1 2 DESCIFRAR Ghu ! . 0
Output
G h u fuhwx fuhwx fuhwx? fuhwx yaj whl jzx ljvwxmt ! vnx xxhkxyh ! Bob !