Il codice Vigenère era un semplice codice polialfabetico che sostanzialmente applicava uno dei numerosi numeri di Cesare, secondo una chiave. Bascialmente le lettere nella chiave indicano quale alfabeto spostato usare. A tal fine c'era un semplice strumento, chiamato piazza Vigenère:
Qui ogni riga è un alfabeto separato, che inizia con la lettera corrispondente della chiave. Le colonne vengono quindi utilizzate per determinare la lettera cifrata. La decrittazione funziona più o meno allo stesso modo, solo viceversa.
Supponiamo di voler crittografare la stringa CODEGOLF
. Abbiamo anche bisogno di una chiave. In questo caso la chiave deve essere FOOBAR
. Quando la chiave è più corta del testo in chiaro, la estendiamo ripetutamente, quindi la chiave effettiva che usiamo è FOOBARFO
. Ora cerchiamo la prima lettera della chiave, che è quella F
di trovare l'alfabeto. Comincia, forse non sorprende, con F
. Ora troviamo la colonna con la prima lettera del testo in chiaro e la lettera risultante è H
. Per la seconda lettera abbiamo O
come lettera chiave e la lettera di testo semplice, risultante C
. Continuando in questo modo finalmente otteniamo HCRFGFQT
.
Compito
Il tuo compito ora è decifrare i messaggi, dati una chiave. Tuttavia, poiché abbiamo superato il XVI secolo e disponiamo di computer, dovremmo almeno supportare un alfabeto leggermente più grande:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
La costruzione della piazza Vigenère è ancora più o meno la stessa e la cifra funziona ancora allo stesso modo. È solo un po '... ingombrante dare qui per intero.
Ingresso
L'input viene fornito sull'input standard come due righe di testo separate, ciascuna terminata da un'interruzione di riga. La prima riga contiene la chiave mentre la seconda contiene il testo cifrato.
Produzione
Una riga singola, contenente il messaggio decifrato.
Condizioni vincenti
Poiché la crittografia viene talvolta considerata un'arma, il codice dovrebbe essere breve per facilitare il contrabbando. Più corto è il migliore, in quanto riduce la probabilità di scoperta.
Esempio di input 1
Key
miQ2eEO
Uscita campione 1
Message
Esempio di input 2
ThisIsAKey
CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu
Uscita campione 2
ThisWorksEquallyWellWithNumbers123894576
È passata una settimana La soluzione attualmente più breve è stata accettata. Per chi fosse interessato, nel nostro concorso abbiamo avuto le seguenti osservazioni e lunghezze:
130 - Python
146 - Haskell
195 - C
197 - C
267 - VB.NET
E le nostre soluzioni che non sono state classificate con le altre:
108 - Ruby
139 - PowerShell