Ось літери англійського алфавіту впорядковані за частотою:
e t a o i n s h r d l c u m w f g y p b v k j x q z
Тобто, e
це найчастіше вживаний лист і z
є найменш поширеним. (Дані з Вікіпедії .)
Ваше завдання полягає в тому, щоб взяти текст ROT-n'd, наприклад:
ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Це текст "thisisaverysecretmessagethatisverysecureandsafe", який "шифрується" через ROT-21 (половина з 42). Ваша програма, використовуючи вищевказану таблицю частот, повинна мати можливість визначати, наскільки обертається кожен символ та початковий текст.
(Якщо ви не знайомі з ROT-n, він по суті зміщує кожен символ на n
. Наприклад, в ROT-2,. a -> c, b -> d, ..., x -> z, y -> a, z -> b
)
Як, запитаєте ви? (Дуже наївний) алгоритм, який ви повинні використовувати:
- для кожного
n
з0
до25
включно, застосовуються ROT--n
до вхідному рядку. (Негативно,n
тому що ми хочемо змінити шифрування. ROT--n
еквівалентно ROT-26-n
, якщо це простіше.) - перетворити кожен рядок введення в число, додавши відносні частоти символів.
e
є0
,t
є1
,a
є2
і т. п. Наприклад, відповідне число для рядка"hello"
дорівнює 7 + 0 + 10 + 10 + 3 = 30. - знайдіть рядок, який має найменше відповідне число.
- виведіть цей рядок та його відповідні
n
.
Правила:
- введення може бути де завгодно розумним (STDIN, аргументи функції, з файлу тощо), і так може виводити (STDOUT, значення повернення функції, у файл тощо)
- ви можете використовувати інший алгоритм, якщо він завжди дає однакові результати. Наприклад, мати
z
0 іe
бути 25 і вибрати найбільше число також нормально. - якщо два рядки мають однакові бали, ви можете вивести один (або обидва) з них. Це кращий випадок, і вам не доведеться це враховувати.
- це код-гольф , тому найкоротший код у байтах виграє!
Тестові приклади:
Вхід: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Вихід:21 thisisaverysecretmessagethatisverysecureandsafe
Вхід: pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
Вихід:8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
Вхід: ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
Вихід:12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
Вхід: jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
Вихід:2 hereisthefinaltestcasethatyoumustdecrypt
Якщо вам було цікаво, ось JSFiddle тестового коду JavaScript, який я успішно розшифрував усі тестові випадки, які я накинув на нього.
wtaad
слід дати0 wtaad
як результат, аvszzc
також дати25 wtaad
як результат.