Im Bitcoin-Protokoll ist 2016 eine ganz besondere Nummer. Die "Schwierigkeit", einen Hash zu finden, um einen neuen Block zu erstellen, wird alle 2.016 Blöcke so angepasst, dass sie sich ungefähr alle zwei Wochen ändert.
Diese Zahl wurde gewählt, weil sich der Schwierigkeitsgrad so anpasst, dass es ungefähr 10 Minuten dauert, bis jeder Block gefunden ist, und in zwei Wochen gibt es 2 × 7 × 24 × 6 = 2.016 Zehn-Minuten-Perioden.
Zum Gedenken an diesen numerischen Zufall geht es beim diesjährigen Neujahrsproblem um Bitcoin - insbesondere um den Hashing-Algorithmus zum Signieren von Blöcken, SHA-256.
Ihre Aufgabe ist es, ein Programm zu erstellen, das Byte-Eingaben (in mindestens ASCII) und eine Nonce in Byte (im Format Ihrer Wahl) ausgibt, die einen SHA-256-Hash erzeugt, der 2016
in seiner base64- Darstellung enthalten ist, wenn er an das Original angehängt wird Byte-Eingabe.
Hier sind einige Beispiele für gültige Lösungen, die mit freundlicher Genehmigung der Motoren erstellt wurden, sowie die von ihnen erstellten Hashes:
> 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.)
Die einzige vorgefertigte Bibliothek (außer den Standard-Eingabe- und Ausgabefunktionen), die Ihr Programm verwenden kann, ist eine SHA256(bytes)
Funktion, die Byteeingaben akzeptiert und einen SHA256-Hash in einem beliebigen Format einschließlich base64 zurückgibt.
Das Programm, das dies in den wenigsten Bytes des Quellcodes ausführt, gewinnt.