Buat program yang mencetak jumlah MD5 dari sumbernya dalam formulir:
MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Tanpa kecurangan - Anda tidak bisa hanya membaca file sumber dan menghitung jumlahnya. Program tidak boleh membaca informasi eksternal apa pun.
Tentu saja Anda dapat menggunakan perpustakaan MD5 yang tersedia untuk bahasa Anda.
code-golf
quine
cryptography
Petr Pudlák
sumber
sumber
Jawaban:
Python
157149Keluaran:
Verifikasi di ideone
sumber
24ba0a79636297dab8803f571d4e3b44 md.py
menggunakan md5sum di linux\n
) pada akhir program saya saya mendapatkan hash Anda diposting:24ba0a79636297dab8803f571d4e3b44
. Saya cukup yakin bahwa Anda memiliki baris baru ekstra. (Saya yakin beberapa editor akan melakukan ini secara otomatis)Python 2, 91 byte
Menggunakan varian Python quine yang tidak perlu mengulang semuanya dua kali. Diuji pada ideone .
sumber
Perl + Digest :: MD5, 89 byte
Tidak ada tautan TIO karena Digest :: MD5 tidak diinstal pada TIO. Perhatikan bahwa ini membutuhkan tingkat kesesuaian bahasa diatur ke 5.10 atau lebih tinggi (
-M5.010
; ini tidak membawa penalti byte sesuai dengan aturan PPCG.Penjelasan
Ini adalah satu lagi tantangan "cetak fungsi kode sumber", yang berarti bahwa hal itu dapat diselesaikan dengan sepele melalui konstruktor quine universal.
Konstruktor quine universal
Kami menggunakan
q()
notasi string (yang bersarang) untuk menginisialisasi$_
, variabel "default" yang digunakan Perl untuk argumen yang hilang. Lalu kitaeval
dengan argumen yang hilang, sehingga string di dalamq()
akan dievaluasi.String di dalam
q()
adalah deskripsi cara membuat seluruh program; kita tentukan sisa program secara literal, lalu gunakan unescaped$_
untuk mengganti seluruh string di dalam.Teknik ini dengan demikian menciptakan string dengan konten yang identik dengan sumber seluruh program; kita bisa mencetaknya untuk menghasilkan quine. Kita juga bisa melakukan hal-hal lain terlebih dahulu, membuat konstruktor quine universal.
Sisa dari program ini
Sangat sederhana: mengimpor bawaan MD5, lalu mencetak string tetap yang ditentukan dalam pertanyaan (tidak layak untuk mengompresnya, saya percaya bahwa di Perl, dekompresor akan mengambil lebih banyak ruang daripada hanya menyatakan string secara harfiah), dan menggunakan MD5 bawaan pada string yang kami dapatkan melalui konstruktor quine universal.
sumber
Node.js REPL (versi 0.9.3),
9694 byteMenggunakan versi Node.js terakhir yang ada saat tantangan ini diposting. Saya telah melacak dokumentasi 9 November 2012 untuk modul kripto Node.js, dan itu mendukung semua fungsi yang saya gunakan di sini pada hari itu.
Jika Anda tidak ingin menginstal versi antik Node.js hanya untuk menguji kode ini, yakinlah juga berfungsi di versi terbaru.
Node.js REPL (versi 7.0.0), 81 byte
Dan ini adalah versi yang menggunakan fungsi panah ES6.
Sunting : terima kasih kepada Anders Kaseorg karena menunjukkan kesalahan pada versi Node.js 0.9.3 saya, memperbaiki yang menyimpan dua byte.
sumber
`${s};x(x)`
tidak.