Вот буквы английского алфавита по порядку по частоте:
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
Это текст «это очень секретное сообщение, которое очень надежный и безопасный», который «зашифрован» через 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, если это проще.) - преобразовать каждую входную строку в число, сложив относительные частоты символов.
eis0,tis1,ais2и т. д. Например, соответствующее число для строки"hello"7 + 0 + 10 + 10 + 3 = 30. - найти строку с наименьшим соответствующим номером.
- выведите эту строку и соответствующую ей
n.
Правила:
- ввод может быть в любом месте (STDIN, аргументы функции, из файла и т. д.), и поэтому может выводить (STDOUT, возвращаемое значение функции в файл и т. д.)
- Вы можете использовать другой алгоритм, если он всегда дает одинаковые результаты. Например,
zиметь 0 иe25 и выбирать наибольшее число тоже нормально. - если две строки имеют одинаковые оценки, вы можете выбрать выводить одну (или обе) из них. Это крайний случай, и вы не обязаны это учитывать.
- это код-гольф , поэтому выиграет самый короткий код в байтах!
Тестовые случаи:
Вход: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Выход:21 thisisaverysecretmessagethatisverysecureandsafe
Вход: pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
Выход:8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
Вход: ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
Выход:12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
Вход: jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
Выход:2 hereisthefinaltestcasethatyoumustdecrypt
Если вам интересно, вот JSFiddle из написанного мной тестового кода JavaScript, который успешно расшифровал все тестовые примеры, которые я к нему применил.
wtaadдолжен давать0 wtaadкак результат, иvszzcдолжен давать25 wtaadкак результат.