Напишите программу, которая кодирует данный текст в свой собственный текст, предоставленный в качестве ввода, не нарушая его логику. Программа также должна работать как декодер, восстанавливая исходное сообщение из его текста. Он должен сохранять свои функции кодирования / декодирования после преобразования.
Говоря более формально, требуемая программа P должна выполнить следующие преобразования с заданным текстом сообщения M:
P (M, P) -> P *
P * (P *) -> M
Здесь P * - преобразованная программа, которая также должна удовлетворять вышеуказанным правилам, а именно:
P * (M2, P *) -> P **
P ** (P **) -> M2
и так далее ... Каждая последующее кодирование не стирает ранее закодированный текст, поэтому P ** несет два сообщения - M и M2.
Самый простой способ для программы отличить режимы кодирования / декодирования - это наличие дополнительного аргумента M, но окончательное решение остается за вами, если оно четко указано. Программа может прочитать свой собственный текст из файла. Если на выбранном языке нет средств для этого, исходный текст можно передать в программу любым другим способом.
Конечно, есть тривиальные решения, так что это скорее конкурс популярности. Тем не менее, я накладываю ограничение на запрет комментариев в тексте программы.
источник
Ответы:
Perl
Это одна строка в Perl только потому, что это возможно.
Сообщения пишутся после
__DATA__
, самые последние сначала.источник
питон
Знаешь что? Почему бы не сделать это одним выражением?
Старое сообщение; Функция P принимает указанные аргументы и выводит полученный код / декодированный текст.
источник
JavaScript
Не уверен, правильно ли я понимаю формулировку проблемы: мой декодер будет декодировать любую программу и возвращает последнее сообщение, закодированное в данной программе.
Тестовый код:
источник
партия
Обратите внимание, что после «последней строки» должен быть возврат каретки
goto :EOF
.Это берет два ввода от стандартного ввода. Первое, что вы хотите сделать;
e
илиd
(кодировать и декодировать). Второй вход зависит от первого - если первый вход естьe
, то вторым входом будет сообщение, которое вы хотите закодировать - если это такd
, то вторым входом будет номер сообщения, которое вы хотите декодировать (который будет предоставляется после кодирования сообщения).источник
кобра
Пока идея тривиальна, исполнение указанной идеи менее реальна.
кодирование
Кодирование сообщения в программе добавит строку
.message = .message ? x
сразу послеdef main
. Эта строка проверяет, имеет ли значение.message
nil, и если да, то устанавливает.message
целочисленный массив, содержащий значения кодов символов каждого символа в сообщении; нулевая проверка и позиционирование позволяют избежать перезаписи нового сообщения более старым. Новая программа сохранена вencode.cobra
Декодирование
При декодировании программы в конце основного метода добавляются три строки, которые заставляют программу преобразовывать коды символов в
.message
строку, которая затем сохраняетсяmessage.txt
при запуске новой программы. Новая программа затем сохраняетсяdecode.cobra
и вызывается компилятор.decode.cobra
используется как временный файл и не может использоваться для кодирования или декодирования другого сообщения, использования оригинала илиencode.cobra
источник