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.
Antworten:
Perl 5.10+, 39 + 18 = 57 Bytes
Dies muss mit der
-nMDigest::SHA=/./
Befehlszeilenoption ausgeführt werden, die in der Byteanzahl enthalten ist. Es verwendet auch die Perl 5.10+say
-Funktion und muss daher mit dem-M5.010
(oder-E
) Befehlszeilenschalter ausgeführt werden, der als kostenlos gilt. Die Eingabe sollte in stdin ohne nachfolgende Zeilenumbrüche erfolgen (es sei denn, Sie möchten, dass die Zeilenumbrüche als Teil der Eingabe betrachtet werden).Beispiele:
quelle
Mathematica, 94
Diese Funktion probiert positive ganze Zahlen als Kandidaten aus. Auf meinem Laptop dauert es über 4 Minuten, um die richtige Antwort zu erhalten.
Eine längere, jedoch schnellere (
~5x
) Implementierung nutzt die Parallelisierung:quelle
Ruby,
87-86BytesIch bin nicht sicher, ob ich die Herausforderung richtig verstanden habe, aber sie wird
196870
in wenigen Sekunden gefunden, wenn Sie Eingaben machenfoo
.quelle
PowerShell, 150
152153ByteBeispiel
quelle
C # 179 Bytes
Ähnlich wie bei der PowerShell-Lösung, nur länger.
quelle