Dalam protokol Bitcoin, 2016 adalah angka yang sangat istimewa. "Kesulitan" menemukan hash untuk membuat blok baru disesuaikan setiap 2.016 blok untuk perkiraan perubahan setiap dua minggu.
Jumlah ini dipilih karena kesulitan menyesuaikan diri sehingga setiap blok membutuhkan waktu sekitar 10 menit, dan dalam dua minggu, ada 2 × 7 × 24 × 6 = 2.016 periode sepuluh menit.
Untuk memperingati angka kebetulan ini, masalah Tahun Baru tahun ini adalah tentang Bitcoin - khususnya, algoritma hashing yang digunakan untuk menandatangani blok, SHA-256.
Tugas Anda adalah untuk menciptakan sebuah program yang akan mengambil input byte (setidaknya ASCII) dan output Nonce dalam bytes (dalam format pilihan Anda) yang akan menghasilkan SHA-256 hash yang mengandung 2016
di-nya base64 representasi ketika ditambahkan dengan aslinya input byte.
Berikut adalah beberapa contoh solusi yang valid, milik mesin yang telah dihasilkan orang, serta hash yang mereka hasilkan:
> foo
Nonce: 196870
SHA256 hash: OCUdDDtQ42wUlKz2016x+NROo8P2lbJf8F4yCKedTLE=
> bar
Nonce: 48230
SHA256 hash: CNcaOCQgT7bnlQzQPXNwuBu8/LYEdk2016khRaROyZk=
> happynewyear
Nonce: 1740131
SHA256 hash: XsKke6z2016BzB+wRNCm53LKJ6TW6ir66GwuC8oz1nQ=
> 2016
Nonce: 494069
SHA256 hash: rWAHW2YFhHCr22016zw+Sog6aW76eImgO5Lh72u6o5s=
(note: the nonces don't actually have to be ASCII numbers; you can do
any byte input you find convenient.)
Satu-satunya perpustakaan yang dibangun sebelumnya (selain fungsi input dan output standar) yang dapat digunakan oleh program Anda adalah SHA256(bytes)
fungsi yang mengambil input byte dan mengembalikan hash SHA256, dalam format apa pun termasuk base64.
Program untuk melakukan ini dalam bytes kode sumber paling sedikit menang.
Jawaban:
Perl 5.10+, 39 + 18 = 57 byte
Ini perlu dijalankan dengan
-nMDigest::SHA=/./
saklar baris perintah, yang termasuk dalam jumlah byte. Ini juga menggunakan fitur Perl 5.10+say
, dan karena itu perlu dijalankan dengan-M5.010
(atau-E
) saklar baris perintah, yang dianggap gratis. Input harus diberikan pada stdin, tanpa baris baru tambahan (kecuali jika Anda ingin baris baru dianggap bagian dari input).Contoh:
sumber
Mathematica, 94
Fungsi ini akan mencoba bilangan bulat positif sebagai kandidat. Dibutuhkan lebih dari 4 menit di laptop saya untuk mendapatkan jawaban yang benar.
~5x
Implementasi yang lebih lama namun lebih cepat ( ) memanfaatkan paralelisasi:sumber
Ruby,
8786 byteSaya tidak yakin apakah saya memahami tantangan dengan benar, tetapi ia menemukan
196870
dalam beberapa detik jika Anda memberi masukanfoo
.sumber
PowerShell, 150
152153byteContoh
sumber
C #, 179 byte
Mirip dengan solusi PowerShell, lebih lama.
sumber