Создайте программу, которая печатает сумму MD5 ее источника в виде:
MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Нет обмана - вы не можете просто прочитать исходный файл и вычислить его сумму. Программа не должна читать какую-либо внешнюю информацию.
Конечно, вы можете использовать библиотеку MD5, доступную для вашего языка.
code-golf
quine
cryptography
Петр Пудлак
источник
источник
Ответы:
Python
157149Выход:
Проверка на ideone
источник
24ba0a79636297dab8803f571d4e3b44 md.py
использую md5sum в Linux\n
) в конце моей программы я получаю хэш вас в курсе:24ba0a79636297dab8803f571d4e3b44
. Я вполне уверен, что у вас есть дополнительный перевод строки. (Я думаю, что некоторые редакторы сделают это автоматически)Python 2, 91 байт
Использование варианта Python quine, который не требует повторения всего дважды. Проверено на идеоне .
источник
Perl + Digest :: MD5, 89 байт
Нет ссылки на TIO, потому что Digest :: MD5 не установлен на TIO. Обратите внимание, что для этого необходимо, чтобы уровень соответствия языка был установлен на 5,10 или выше (
-M5.010
это не влечет за собой байтовых штрафов в соответствии с правилами PPCG.объяснение
Это еще одна задача «напечатать функцию из исходного кода», означающая, что ее можно решить тривиально с помощью универсального конструктора quine.
Универсальный конструктор Quine
Мы используем
q()
строковую нотацию (которая встраивается) для инициализации$_
, переменную «по умолчанию», которую Perl использует для пропущенных аргументов. Затем мыeval
с отсутствующим аргументом, так что строка внутриq()
будет оценена.Строка внутри
q()
является описанием того, как создать всю программу; мы указываем остальную часть программы буквально, затем используем unescaped,$_
чтобы заменить всю строку внутри.Таким образом, техника создает строку с идентичным содержимым для всего исходного кода программы; мы могли бы напечатать это, чтобы произвести quine. Мы также можем сначала сделать что-то другое, создав универсальный конструктор quine.
Остальная часть программы
Очень просто: импортируйте встроенную MD5, затем напечатайте фиксированную строку, указанную в вопросе (сжимать ее не стоит, я считаю, что в Perl декомпрессор займет больше места, чем просто буквальное указание строки), и используйте встроенную MD5 на строка, которую мы получили через универсальный конструктор Quine.
источник
Node.js REPL (версия 0.9.3),
9694 байтаИспользование последней версии Node.js, существовавшей на момент публикации этого вызова. Я отследил документацию по шифрованию Node.js от 9 ноября 2012 года , и он поддерживал все функции, которые я использовал здесь в тот день.
Если вы не хотите устанавливать античную версию Node.js просто для тестирования этого кода, будьте уверены, он также работает в самой последней версии.
Node.js REPL (версия 7.0.0), 81 байт
А вот версия с использованием функций стрелок ES6.
Изменить : спасибо Anders Kaseorg за указание на ошибку в моей версии Node.js 0.9.3, исправление которой сохранило два байта.
источник
`${s};x(x)`
.