Віженер Шифр був простим поліалфавітних шифром , який в основному застосовується один з декількох шифрів Цезаря, в відповідно до ключа. В основному букви в ключі вказують, який зміщений алфавіт використовувати. З цією метою був простий інструмент під назвою площа Віньєра:
Тут кожен рядок є окремим алфавітом, починаючи з відповідної літери ключа. Потім стовпці використовуються для визначення зашифрованої літери. Розшифровка працює дуже однаково, лише навпаки.
Припустимо, ми хочемо зашифрувати рядок CODEGOLF
. Нам також потрібен ключ. У цьому випадку ключ повинен бути FOOBAR
. Коли ключ коротший від простого тексту, ми продовжуємо його повторенням, тому власне ключ, який ми використовуємо, є FOOBARFO
. Зараз ми шукаємо першу букву ключа, яка F
повинна знайти алфавіт. Це починається, можливо, не дивно, з F
. Тепер ми знаходимо стовпчик з першою буквою простого тексту і отриманою літерою є H
. Для другої літери ми маємо O
як основну букву, так і простий текстовий лист, в результаті чого C
. Продовжуючи цей шлях, ми нарешті отримуємо HCRFGFQT
.
Завдання
Ваше завдання зараз - розшифрувати повідомлення, надавши ключ. Однак, оскільки ми переросли в 16 столітті і маємо комп'ютери, ми повинні хоча б підтримувати трохи більший алфавіт:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
Побудова площі Віньєра досі дуже однакова, і шифр все ще працює так само. Це просто трохи ... непросто, щоб дати тут повністю.
Вхідні дані
Введення подається на стандартному введенні у вигляді двох окремих рядків тексту, кожен із яких закінчується розривом рядка. Перший рядок містить ключ, а другий - шифротекст.
Вихідні дані
Єдиний рядок, що містить розшифроване повідомлення.
Умова виграшу
Оскільки шифрування іноді розглядають як зброю, код повинен бути коротким для полегшення легкої контрабанди. Чим коротше, тим краще, оскільки це зменшує ймовірність виявлення.
Зразок введення 1
Key
miQ2eEO
Вихід вибірки 1
Message
Зразок введення 2
ThisIsAKey
CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu
Вибірка зразка 2
ThisWorksEquallyWellWithNumbers123894576
Минув тиждень. Наразі найкоротше рішення прийнято. Для зацікавлених у нашому конкурсі ми мали такі подання та тривалість:
130 - Python
146 - Haskell
195 - C
197 - C
267 - VB.NET
І наші власні рішення, які не були класифіковані з іншими:
108 - Ruby
139 - PowerShell