Escreve um programa o mais pequeno possível para decifrar mensagens. Podes usar C, C++, Java, Perl, Python3, Ruby 2.3.1, Pascal ou Haskell.
O teu objetivo é descodificar mensagens cifradas utilizando um método de dupla cifra. O método de cifrar é o seguinte:
- Removem-se todas as letras duplicadas da chave;
- Adiciona-se ao fim da chave as letras do alfabeto que faltam;
- Faz-se corresponder a cada letra da chave um número começando no valor;
- No fim disto temos uma tabela com o primeiro passo da substituição;
- Usando esta tabela, cifra-se o texto;
- Para criar a segunda tabela de substituição, usa-se como chave os algarismos do 0 ao 9, fazendo corresponder a cada algarismo vários valores preenchendo da esquerda para a direita;
- Para cada algarismo do texto cifrado, substitui-se por uma das letras possíveis.
Eis um exemplo de como o método funciona para cifrar uma mensagem com a chave ortogonal e o valor 87 para cifrar a mensagem codeweekaseriosonauminho:
- Tirar os duplicados à chave: ortgnal
- Adicionar as outras letras ortgnalbcdefhijkmpqsuvwxyz
- Fazer a tabela de substituição
o r t g n a l b c d e f h i j k m p q s u v w x y z
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112- Proceder à substituição:
95 87 96 97 109 97 97 102 92 106 97 88 100 87 106 87 91 92 107 103 100 91 99 87- Na realidade, os espaços entre os números não são utilizados:
95879697109979710292106978810087106879192107103100919987- Criar a segunda tabela:
0 1 2 3 4 5 6 7 8 9
o r t g n a l b c d
e f h i j k m p q s
u v w x y z- Usar a tabela para converter os algarismos em letras:
95879697109979710292106978810087106879192107103100919987
dkqpdmspfesdbdbretdwvomdpqcfeuqpfomqbsvdhvepvoxvoudrdsqp- A mensagem codificada é dkqpdmspfesdbdbretdwvomdpqcfeuqpfomqbsvdhvepvoxvoudrdsqp.
O teu programa recebe duas linhas:
- Uma linha contendo a chave e o número separados por espaços;
- Uma linha contendo a mensagem que se pretende decifrar
Assim, se o input for:
ortogonal 87
skqbsmdpresspdbrotswfulsbcqroecbrelqbdrdhrubvogfoedrsdqpO teu programa deverá imprimir:
codeweekaseriosonauminho