Этот маленький поросенок вышел на рынок, этот маленький поросенок написал код ...
Подожди, мы не говорим об этом беконе, мы говорим о сэре Фрэнсисе Бэконе! В частности, шифр Бэкона, разработанный в конце 1500-х годов , как метод сокрытия сообщения в другом сообщении, метод стеганографии .
Шифр работает, скрывая сообщение в представлении текста, а не его содержания. Сначала буквы вашего сообщения кодируются в двоичную форму (от 0 до 25) следующим образом:
Примечание. Пожалуйста, используйте следующую кодировку в своем коде и не беспокойтесь о числах, пробелах или других символах на входе, хотя я могу придумать какой-то бонус для тех, кто включает эти символы в свою кодировку. Если вы включите другие символы, буквы должны по-прежнему занимать пробелы 0-25 в кодировке.
Letter Encoding
A AAAAA
B AAAAB
C AAABA
D AAABB
E AABAA
F AABAB
G AABBA
H AABBB
I ABAAA
J ABAAB
K ABABA
L ABABB
M ABBAA
N ABBAB
O ABBBA
P ABBBB
Q BAAAA
R BAAAB
S BAABA
T BAABB
U BABAA
V BABAB
W BABBA
X BABBB
Y BBAAA
Z BBAAB
Закодировав все буквы в вашем сообщении в A
s и B
s выше, вы должны теперь выбрать две гарнитуры для своего кода. В этом примере я буду использовать обычный текст для гарнитуры A
и жирный текст для гарнитурыB
.
Итак, сообщение
HELLOWORLD
закодирован в
AABBB AABAA ABABB ABABB ABBBA BABBA ABBBA BAAAB ABABB AAABB
И теперь мы скрываем этот двоичный файл с текстом-носителем .
Быстрая коричневая лиса перепрыгивает через ленивых собак, играя в азартные игры на полях, где пастухи присматривают.
Это нормально, если сообщение-носитель длиннее, чем фактическое закодированное сообщение, хотя оно не может быть короче. Теперь мы превращаем текст-носитель в жирный в зависимости от того, гдеB
в кодированном сообщении находятся буквы s,
Че е Qu IC к братан ш п FO х J ¯u тр ы Ов г т ч е л аз у делать г ы , гама б о л я нг в т он полей , где пастухи держат часы.
Который без уценки читается как
Th**e** **qu**ic**k** bro**w**n **fo**x **j**u**mp**s **ove**r **t**h**e** **l**az**y**
**do**g**s**, gam**b**o**l**i**ng** in t**he** fields where the shepherds keeps watch.
Обратите внимание, что я не использовал пунктуацию в сообщении-носителе для кодирования сообщения, но независимо от того, закодирована ли эта пунктуация или нет, решать вам /.
правила
Ваш ввод будет сообщение, которое вы должны быть закодированы и сообщение перевозчика. Если сообщение оператора слишком короткое, верните какое-либо сообщение об ошибке.
Вы должны выбрать два шрифтами для кодирования
A
иB
, например, ВЕРХНИЙ, строчными буквами, курсивом , жирным шрифтом , выделены жирным курсивом ,зачеркнутый,in code format
и так далее. Вы должны использовать форму разметки Stack Exchange для кодирования этих шрифтов, т.е.UPPERCASE, lowercase, *italic*, **bold**, ***bold italic***, <s>strikethrough</s>, `in code format`
Ваш вывод должен быть вашим теперь закодированным сообщением-носителем, либо показанным с Markdown, либо показанным без, как видно из приведенного выше примера.
Вы только должны сделать алгоритм кодирования. Любые алгоритмы декодирования, которые вы хотите предоставить, приветствуются, но на момент написания статьи это не поможет и не помешает вашей оценке.
Ваш код должен быть программой или функцией.
Это код гольф, поэтому выигрывает наименьшее количество байтов.
Как всегда, если проблема неясна, пожалуйста, дайте мне знать. Удачи и хорошего гольфа!
источник
Ответы:
Pyth, 47 байтов
Попробуй здесь .
Объяснение:
источник
Питон 3,
216211231225207 байтЭто решение, которое использует обычный текст и курсив в стиле Markdown для двух своих шрифтов. И это кодирует все в сообщении носителя, кроме пробелов.Редактировать: пришлось исправить код, чтобы результат выводился правильно, и добавить примеры под кодом.
Редактировать: отредактировал код до ранее худшего варианта прописных / строчных букв из-за проблем с правильной печатью курсива.
Примеры
Ungolfed:
источник
C, 124 байта
Это требует, чтобы аргументы были в ASCII-совместимой кодировке (например, ISO-8859.1 или UTF-8). Он изменяет носитель на месте и возвращает 0 в случае успеха или ненулевое значение в противном случае. Кодировка:
A
== строчные иB
== прописные. Неиспользованные буквы-носители устанавливаются на верхний.объяснение
Включая тестовую программу. Передайте буквы для кодирования в качестве первого аргумента и строку-носитель в качестве второго.
Тестовый вывод:
источник