Nel protocollo Bitcoin, 2016 è un numero molto speciale. La "difficoltà" di trovare un hash per creare un nuovo blocco viene regolata ogni 2.016 blocchi per cambiare approssimativamente una volta ogni due settimane.
Questo numero è stato scelto perché la difficoltà si adatta in modo che ogni blocco impieghi circa 10 minuti per essere trovato, e in due settimane ci sono 2 × 7 × 24 × 6 = 2.016 periodi di dieci minuti.
Per commemorare questa coincidenza numerica, il problema del nuovo anno di quest'anno riguarda Bitcoin - in particolare, l'algoritmo di hashing che usa per firmare i blocchi, SHA-256.
Il tuo compito è creare un programma che prenderà l'input di byte (almeno in ASCII) e produrrà un nonce in byte (nel formato che preferisci) che produrrà un hash SHA-256 contenente 2016
nella sua rappresentazione base64 quando aggiunto all'originale ingresso byte.
Ecco alcuni esempi di soluzioni valide, per gentile concessione dei motori che le persone hanno già generato, nonché degli hash che hanno prodotto:
> 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.)
L'unica libreria pre-costruita (diversa dalle funzioni standard di input e output) che il tuo programma può usare è una SHA256(bytes)
funzione che accetta l'input di byte e restituisce un hash SHA256, in qualsiasi formato incluso base64.
Vince il programma per fare questo nel minor numero di byte di codice sorgente.