Стеганография скрывает данное сообщение внутри данного носителя, создавая пакет, который не выглядит подозрительным. Для этой задачи вы напишите программу, которая принимает сообщение ASCII и носитель ASCII в качестве входных данных, а также возвращает или печатает пакет, идентичный носителю, за исключением того, что символы, соответствующие сообщению, удваиваются в том же порядке, в котором они отображаются в сообщение.
Правила:
- Если носитель уже содержит последовательности одного и того же символа более одного раза, и они не используются для кодирования символа сообщения, программа сократит их до одного символа.
- Если перевозчик не содержит символы сообщения в правильном порядке, программа может ничего не вернуть, сам перевозчик или ошибка.
- Вы можете предположить, что сообщение и носитель являются непустыми строками ASCII.
- Капитализация имеет значение: A не эквивалентно a.
- Если допустимо более одного пакета, ваша программа может вывести любой или все из них.
- Пробел - это персонаж, как любой другой персонаж.
Тестовые случаи:
Пакет Перевозчика Сообщений "привет" "он прибыл?" "Он есть?" ИЛИ "Ариив?" "сэр" "это прибыло?" "Пришел ли он?" "foo" "он прибыл?" "ИЛИ" это прибыло? " ИЛИ ошибка. «Машина» «Кошки классные». "CCaats arre col." "машина" "Коты классные". "ИЛИ" Кошки классные. " ИЛИ ошибка. "Кушетка" "Кушетка" "CCoouucchh" "ооо" "ооооооооо" "оооо" "о о" "оооооооо" "ооооо"
Это код гольф, поэтому побеждает меньше байтов.
code-golf
string
steganography
jkpate
источник
источник
"oooo oa"
(с 2 пробелами) допустимым выводом для последнего контрольного примера?Ответы:
Желе , 28 байт
Полная программа, принимающая
carrier
и вmessage
качестве аргументов командной строки, которая печатает результат(для неупаковываемых
message
печатает неизмененныеcarrier
).Попробуйте онлайн! Или посмотрите набор тестов .
Как?
источник
JavaScript (ES6), 71 байт
Принимает вход как
(message)(carrier)
.Попробуйте онлайн!
Альтернативная версия, 66 байт
Если мы можем принять сообщение как массив символов:
Попробуйте онлайн!
Редактировать : Спасибо @tsh за то, что заметил, что забыл удалить некоторый код при переходе с нерекурсивных на рекурсивные версии.
источник
p=
так как p передается параметром.Haskell,
124121107101979590 байтВызывает исключение «Неисчерпывающие шаблоны», если перевозчик не содержит сообщения.
Попробуйте онлайн!
Изменить: -5 байт благодаря @Laikoni.
источник
m==c
: попробуйте онлайн!Сетчатка 0.8.2 , 67 байт
Попробуйте онлайн! Принимает перевозчик в первой строке и сообщение во второй строке. Объяснение:
Процесс запускается из 1 или более одинаковых символов носителя. Если в сообщении также есть серия из 1 или более одинаковых символов, добавьте более короткий из двух циклов к выходу в двух экземплярах, в противном случае добавьте к выходу один символ носителя. Каждый запуск выходных символов заканчивается новой строкой, чтобы отличить ее от ввода. Знак «
(?!¶)
в конце» не позволяет регулярному выражению думать, что носитель является сообщением, когда сообщение исчерпано, как обычно$
разрешено совпадать с тем, где¶$
будет совпадать.Удалите все, если сообщение не было полностью закодировано.
Удалите новые строки из вывода.
источник
Чисто , 118 байт
Попробуйте онлайн!
Сначала принимает перевозчик, затем сообщение.
Ошибки,
Run time error, rule '$;2' in module 'main' does not match
если сообщение не подходит.источник
Рубин , 73 байта
Попробуйте онлайн!
Рекурсивная функция, принимает входные данные в виде массива символов.
На этот раз я надеялся использовать встроенный
squeeze
метод Ruby, который заключает подряд последовательные запуски одного и того же символа в один экземпляр. Но, к сожалению, нет - последние два тестовых случая все испортили так сильно, что мне пришлось прибегнуть к совершенно другому подходу, и это оказалось в основном портом ответа Арно .источник
Powershell, 134 байта
Сценарий возвращает,
empty string
если перевозчик не содержит символы сообщения в правильном порядке.Менее гольф тестовый скрипт:
Выход:
источник
C (gcc) , 69 + 12 = 81 байт
Компилировать с (12 байт)
Попробуйте онлайн!
источник