A cifra de Vigenère era uma cifra polialfabética simples que basicamente aplicava uma das várias cifras de César, de acordo com uma chave. Basicamente, as letras na chave indicam qual alfabeto mudou para usar. Para esse fim, havia uma ferramenta simples, chamada praça Vigenère:
Aqui cada linha é um alfabeto separado, começando com a letra correspondente da chave. As colunas são usadas para determinar a letra cifrada. A descriptografia funciona da mesma maneira, apenas vice-versa.
Suponha que desejemos criptografar a string CODEGOLF
. Também precisamos de uma chave. Nesse caso, a chave deve ser FOOBAR
. Quando a chave é mais curta que o texto simples, nós a estendemos por repetição; portanto, a chave real que usamos é FOOBARFO
. Agora, procuramos a primeira letra da chave, que é F
encontrar o alfabeto. Começa, talvez sem surpresa, com F
. Agora encontramos a coluna com a primeira letra do texto simples e a letra resultante é H
. Para a segunda letra, temos O
como letra-chave e letra de texto sem formatação, resultando em C
. Continuando assim, finalmente chegamos HCRFGFQT
.
Tarefa
Sua tarefa agora é decifrar as mensagens, com uma chave. No entanto, como superamos o século XVI e temos computadores, devemos pelo menos suportar um alfabeto um pouco maior:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
A construção da praça Vigenère ainda é praticamente a mesma e a cifra ainda funciona da mesma maneira. É um pouco ... difícil de dar aqui na íntegra.
Entrada
A entrada é fornecida na entrada padrão como duas linhas de texto separadas, cada uma terminada por uma quebra de linha. A primeira linha contém a chave enquanto a segunda contém o texto cifrado.
Saída
Uma única linha, contendo a mensagem decifrada.
Condição vencedora
Como a criptografia às vezes é considerada uma arma, o código deve ser curto para facilitar o contrabando fácil. Quanto menor, melhor, pois reduz a probabilidade de descoberta.
Entrada de amostra 1
Key
miQ2eEO
Saída de amostra 1
Message
Entrada de amostra 2
ThisIsAKey
CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu
Saída de amostra 2
ThisWorksEquallyWellWithNumbers123894576
Uma semana se passou. A solução mais curta atualmente foi aceita. Para os interessados, em nosso concurso, tivemos os seguintes envios e comprimentos:
130 - Python
146 - Haskell
195 - C
197 - C
267 - VB.NET
E nossas próprias soluções que não foram classificadas com as outras:
108 - Ruby
139 - PowerShell