Ось літери англійського алфавіту впорядковані за частотою:
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, значення повернення функції, у файл тощо)
- ви можете використовувати інший алгоритм, якщо він завжди дає однакові результати. Наприклад, мати
z0 іeбути 25 і вибрати найбільше число також нормально. - якщо два рядки мають однакові бали, ви можете вивести один (або обидва) з них. Це кращий випадок, і вам не доведеться це враховувати.
- це код-гольф , тому найкоротший код у байтах виграє!
Тестові приклади:
Вхід: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Вихід:21 thisisaverysecretmessagethatisverysecureandsafe
Вхід: pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
Вихід:8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
Вхід: ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
Вихід:12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
Вхід: jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
Вихід:2 hereisthefinaltestcasethatyoumustdecrypt
Якщо вам було цікаво, ось JSFiddle тестового коду JavaScript, який я успішно розшифрував усі тестові випадки, які я накинув на нього.
wtaadслід дати0 wtaadяк результат, аvszzcтакож дати25 wtaadяк результат.