Utwórz program, który drukuje sumę MD5 swojego źródła w postaci:
MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Bez oszukiwania - nie można po prostu odczytać pliku źródłowego i obliczyć jego sumy. Program nie może czytać żadnych informacji zewnętrznych.
Oczywiście możesz użyć biblioteki MD5 dostępnej dla twojego języka.
code-golf
quine
cryptography
Petr Pudlák
źródło
źródło
Odpowiedzi:
Python
157149Wydajność:
Weryfikacja w ideone
źródło
24ba0a79636297dab8803f571d4e3b44 md.py
korzystam z md5sum w\n
) na końcu moim programie mam hash ty pisał:24ba0a79636297dab8803f571d4e3b44
. Jestem całkiem pewien, że masz dodatkową nową linię. (Wierzę, że niektórzy redaktorzy zrobią to automatycznie)Python 2, 91 bajtów
Korzystanie z wariantu quine Pythona, który nie wymaga powtarzania wszystkiego dwa razy. Testowany na ideonie .
źródło
Perl + Digest :: MD5, 89 bajtów
Brak łącza TIO, ponieważ Digest :: MD5 nie jest zainstalowany na TIO. Zauważ, że wymaga to ustawienia poziomu zgodności języka na 5.10 lub wyższy (
-M5.010
; nie wiąże się to z karą bajtową zgodnie z zasadami PPCG.Wyjaśnienie
Jest to kolejne wyzwanie „wypisz funkcję kodu źródłowego”, co oznacza, że można go w prosty sposób rozwiązać za pomocą uniwersalnego konstruktora quine.
Uniwersalny konstruktor quine
Do
q()
inicjalizacji używamy notacji łańcuchowej (która zagnieżdża)$_
, „domyślnej” zmiennej, której Perl używa do brakujących argumentów. Następnie mamyeval
z brakującym argumentem, aby łańcuch wewnątrz wartości byłq()
oceniany.Ciąg wewnątrz
q()
jest opisem, jak stworzyć cały program; określamy resztę programu dosłownie, a następnie używamy nieskalowanego,$_
aby podstawić cały ciąg znaków do środka.W ten sposób technika tworzy ciąg o identycznej treści do źródła całego programu; moglibyśmy go wydrukować, by stworzyć quine. Możemy jednak najpierw zrobić inne rzeczy, tworząc uniwersalnego konstruktora quine.
Reszta programu
Bardzo proste: zaimportuj wbudowany MD5, a następnie wydrukuj stały ciąg znaków określony w pytaniu (nie warto go kompresować, uważam, że w Perlu dekompresor zajmowałby więcej miejsca niż tylko podanie ciągu literalnie) i używałby wbudowanego MD5 ciąg otrzymany przez uniwersalny konstruktor quine.
źródło
Node.js REPL (wersja 0.9.3),
9694 bajtyKorzystanie z ostatniej wersji Node.js, która istniała w momencie opublikowania tego wyzwania. Wyśledziłem dokumentację z dnia 9 listopada 2012 r. Dotyczącą modułu kryptograficznego Node.js i obsługiwał on wszystkie funkcje, z których korzystałem tutaj w ciągu dnia.
Jeśli nie masz ochoty instalować starodawnej wersji Node.js tylko w celu przetestowania tego kodu, bądź pewien, że działa on również w najnowszej wersji.
Node.js REPL (wersja 7.0.0), 81 bajtów
A oto wersja wykorzystująca funkcje strzałek ES6.
Edycja : podziękowania dla Andersa Kaseorga za wskazanie błędu w mojej wersji Node.js 0.9.3, co naprawiło zapisanie dwóch bajtów.
źródło
`${s};x(x)`
nie była.