Description
El gente to_O1 estuvo investigando por mucho tiempo a una banda de "Hackers" que opera en la ciudad de Cochabamba. En su investigación pudo interceptar varios mensajes cifrados que se enviaban entre " Hackes"; después de hacer un análisis a todos los mensajes interceptados descubrió que cada palabra tiene una llave que lo cifra. to_On1 elaboro un algoritmo que pueda descifrar los mensajes cifrados. pero lamentablemente en un accidente aéreo el agente to_On1 falleció y con el su portátil donde tenia toda la información de como descifrar los mensajes.
Ahora usted formara parte de nuestro equipo de investigación y como su primera tarea sera elaborar un algoritmo que pueda descifrar los mensajes, gracias al agente to_On1 tenemos todas las llaves que utilizan los "Hackers" para poder descifrar los mensajes.
Esperemos que este ejemplo le ayuden a elaborar el algoritmo descifrador
Encrypted message : ahac qvkzayo mj klcmbi
Kay word : hackers
Decoded message : this message is secure
INPUT
La entrada consiste en N casos (1<= N <=10000). La primera linea solo contiene un numero entero positivo N. A continuación siguen los casos. La primera linea de cada coso contiene dos números enteros M y K (1 <= M ,K <= 10000) separados por un espacio. M determina la cantidad de palabras que tiene el mensaje cifrado, K determina la cantidad de llaves para descifrar el mensaje. OUPUT
Por cada caso hay que imprimir el mensaje descifrado.
Input
3
5 5
rvcu if acm d qgjqpzm
you can not decrypt it
4 4
wco eaa acm uacs
you can not know
5 2
fwqf # yxtjaf zd (591-123?u24)?
hi world
Ouput
this is not a message
you can not know
your # number is (591-123?m24)?
Solution
La solución es muy sencilla solo hay que agarrar cada dígito del mensaje y de las palabras llave y aplicar el Cifrado de Vigenere de forma invertida con todos los dígitos, en caso de que las palabras llave tenga menos dígitos que el mensaje, entonces se vuelve a utilizar las palabras llave hasta terminar de descifrar todo los dígitos del mensaje.
A continuación una solución en Haskell
La solución es muy sencilla solo hay que agarrar cada dígito del mensaje y de las palabras llave y aplicar el Cifrado de Vigenere de forma invertida con todos los dígitos, en caso de que las palabras llave tenga menos dígitos que el mensaje, entonces se vuelve a utilizar las palabras llave hasta terminar de descifrar todo los dígitos del mensaje.
A continuación una solución en Haskell