Проблема:
Вы должны сделать программу, которая делает следующее:
- берет большую строку строчных букв и подсчитывает все вхождения каждой буквы.
- затем вы размещаете буквы по порядку от наибольшего до наименьшего числа случаев.
- затем вы берете этот список и превращаете его в кодировщик / декодер для текста.
- затем кодирует текст с этим шифром.
Сложно понять? Смотрите этот пример:
Пример:
Введите текст:
Lorem Ipsum Dolor Sit Amet, Concetetur Adipiscing Elit. Nunc sed dui at nisi euismod pellentesque ac sed enim. Nullam auctor justo quis diam faucibus, eu fringilla est porttitor. Pellentesque vel pharetra nisl. Вестибюль отравляет язвы магны и фринджиллы. Quisque porttitor, risus suscipit pellentesque tristique, orci lorem accumsan nisi, scelerisque viverra turpis metus sit amet sapien. Fusce facilisis diam turpis, nec lobortis dui blandit nec. Vestibulum ac urna ut lacus commodo sollicitudin nec non Velit. Nulla cursus urna sem, tincidunt sem molestie vel. Nullam fringilla ante eu dolor bibendum, posuere iaculis nunc lacinia. Sed ac pretium est, Vel Scelerisque Nisl. Phasellus lobortis dolor sodales sapien mollis hendrerit. Integer Scelerisque Tempor Tellus, Viverra Varius Neque Mattis в. Integer Porta vestibulum NISL, et feugiat tortor tincidunt vel. Энейский Дигниссим Элефенд Фаучибус. Morbi nec neque vel ante pulvinar mollis eu in ipsum.
Преобразовать в нижний регистр
Количество символов (на одну букву. Пробелы и знаки препинания игнорируются):
[(«a», 49), («b», 11), («c», 34), («d», 22), («e», 93), («f», 9), ( «g», 10), («h», 3), («i», 89), («j», 1), («k», 0), («l», 61), («m ', 31), (' n ', 56), (' o ', 37), (' p ', 20), (' q ', 12), (' r ', 47), (' s ', 71), ('t', 59), ('u', 65), ('v', 15), ('w', 0), ('x', 0), ('y', 0) , ('z', 0)]
Упорядоченный счетчик символов:
[('e', 93), ('i', 89), ('s', 71), ('u', 65), ('l', 61), ('t', 59), ( 'n', 56), ('a', 49), ('r', 47), ('o', 37), ('c', 34), ('m', 31), ('d ', 22), (' p ', 20), (' v ', 15), (' q ', 12), (' b ', 11), (' g ', 10), (' f ', 9), ('h', 3), ('j', 1), ('k', 0), ('w', 0), ('x', 0), ('y', 0) , ('z', 0)]
Затем создайте таблицу поиска, используя исходные и отсортированные списки:
abcdefghijklmnopqrstuvwxyz
||||||||||||||||||||||||||
eisultnarocmdpvqbgfhjkwxyz
Словарь Python:
{'o': 'v', 'n': 'p', 'm': 'd', 'l': 'm', 'k': 'c', 'j': 'o', 'i': 'r', 'h': 'a', 'g': 'n', 'f': 't', 'e': 'l', 'd': 'u', 'c': 's', 'b': 'i', 'a': 'e', 'z': 'z', 'y': 'y', 'x': 'x', 'w': 'w', 'v': 'k', 'u': 'j', 't': 'h', 's': 'f', 'r': 'g', 'q': 'b', 'p': 'q'}
А теперь закодируйте исходный текст с помощью этой таблицы поиска:
'Lvgld rqfjd uvmvg frh edlh, svpflshlhjg eurqrfsrpn lmrh. Njps flu ujr eh prfr ljrfdvu qlmmlphlfbjl es flu lprd. Njmmed ejshvg ojfhv bjrf ured tejsrijf, lj tgrpnrmme lfh qvghhrhvg. Plmmlphlfbjl klm qaeglhge prfm. Vlfhrijmjd svpnjl jmhgrslf denpe e tgrpnrmme. Qjrfbjl qvghhrhvg, grfjf fjfsrqrh qlmmlphlfbjl hgrfhrbjl, vgsr mvgld essjdfep prfr, fslmlgrfbjl krklgge hjgqrf dlhjf frh edh Fjfsl tesrmrfrf ured hjgqrf, pls mvivghrf ujr imepurh pls. Я думаю, что я буду знать, что я делаю. Njmme sjgfjf jgpe fld, eh hrpsrujph fld dvmlfhrl klm. Njmmed tgrpnrmme ephl lj uvmvg irilpujd, qvfjlgl resjmrf pjps mesrpre. Slu es qglhrjd lfh, klm fslmlgrfbjl prfm. Paidlmmjf mvivghrf uvmvg fvuemlf feqrlp dvmmrf alpuglgrh. Iphlnlg fslmlgrfbjl hldqvg hlmmjf, krklgge kegrjf plbjl dehhrf rp. Iphlnlg qvghe klfhrijmjd prfm, lh tljnreh hvghvg hrpsrujph klm. Alplep urnprffrd lmlrtlpu tejsrijf. Mvgir pls plbjl klm ephl qjmkrpeg dvmmrf lj rp rqfjd. '
Я люблю питона!
Правила:
- Ваша программа примет строку и выведет ее.
- Преобразуйте весь ввод в нижний регистр, прежде чем делать что-либо
- Мне все равно, как вы делаете сортировку списка, но только считать строчные буквы
- Бонусные баллы (-30) за создание расшифровщика (не копируйте список расшифровок, делайте это с нуля)
- Это Код-гольфпоэтому выигрывает самый короткий код!
- Радоваться, веселиться!
Bonus points (-30) for making a decryptor (no copying the decryption list, do it from scratch
? ЭТО НЕВОЗМОЖНО! Для этого вам понадобится ключ (ваш «список расшифровки» или «таблица поиска»). Просто взять зашифрованный текст и ожидать, что кто-нибудь предоставит расшифровщик, который преобразует его обратно в открытый текст без использования какого-либо ключа, как если бы вы просили нас отправить вопрос в StackOverflow без ввода букв или цифр. Теория информации уже говорит нам, что вы не можете получить информацию из ниоткуда ... поэтому вашему шифру замещения нужна эта таблица поиска (она же ключ).Ответы:
GolfScript, 39 символов
Онлайн версия для тестирования. Обратите внимание, что сортировка не определяется, если несколько символов имеют одинаковое количество во входной строке.
Пример вывода
источник
Bash / Coreutils, 91 символ
Сохраните как
cipher.sh
, chmod + x и запустите:источник
Рубин,
1049291 персонажБлагодаря @Chron удалось сохранить немало символов
Онлайн версия здесь. Сортировка символов с одинаковым количеством не определена, как указано в другом ответе. С вводом «asdf» каждый ответ пока имеет другой вывод.
Другими словами: все ответы имеют одинаковое поведение (таким образом, представляют собой декодируемую кодировку), когда ввод содержит весь алфавит, причем каждая буква имеет уникальный счет.
источник
("a".."z").to_a
может быть[*?a..?z]
,m.join
может бытьm*''
иdef f(s)...end
может бытьf=->s{...}
Mathematica 171
Предполагается
t
, что текст Lorem ipsum.Правила замены были сгенерированы следующим образом
Thread…-> l
:источник
К, 43
источник
C # 386
Несжатый.
источник
e93i89s71u65l61t59n56a49r47o37c34m31d22p20v15q12b11g10f9h3j1k0w0x0y0z0
. И это даже близко не подходит к проблеме.PHP, 151
(с настройкой
short_open_tag = On
)Это ожидает, что текст в качестве первого аргумента сценария. Вот так:
источник
R 137
Вывод (на основе рассматриваемого примера):
источник
Smalltalk, 138
ввод в с:
декодер это:
но поскольку (если я правильно понимаю) я не могу повторно использовать «я» и «м», я буду играть в гольф без него. Код выше имеет два дополнительных CR, вставленных для удобства чтения, которые не учитывались при подсчете символов.
источник
Clojure, 135
(Предполагая, что входной текст содержится в переменной
s
)источник
Python 2,7 (147)
Совсем не самый короткий код, но, поскольку Python еще не представлен, и, как я вижу, "Я люблю Python!" в постановке задачи, здесь я иду,
Ожидает, что входная строка будет передана через командную строку. (количество символов уменьшается до 122, если входная строка была волшебным образом вставлена в переменную "s")
Ouput
источник
Perl, 84
,
PS Это была шутка, про расшифровку? Или я должен требовать 30 бонусов, чтобы доказать это невозможно? Является ли
aab
расшифрованы доaab
илиbba
? Илиbabaca
это былоcacaba
илиababcb
в оригинале, или вbabaca
буквальном смысле?источник
C # - 393 байта
Расширенная версия ответа @ PauloHDSousa ...
источник