W protokole Bitcoin 2016 to bardzo szczególna liczba. „Trudność” znalezienia skrótu w celu utworzenia nowego bloku jest dostosowywana co 2016 bloków w celu przybliżonej zmiany raz na dwa tygodnie.
Ta liczba została wybrana, ponieważ trudność dostosowuje się tak, że znalezienie każdego bloku zajmuje około 10 minut, a za dwa tygodnie są 2 × 7 × 24 × 6 = 2016 dziesięciominutowych okresów.
Aby upamiętnić ten numeryczny zbieg okoliczności, tegoroczny problem noworoczny dotyczy Bitcoinów - w szczególności algorytmu haszującego używanego do podpisywania bloków, SHA-256.
Twoim zadaniem jest stworzenie programu, który pobierze dane bajtowe (co najmniej ASCII) i wyświetli wartość nonce w bajtach (w wybranym przez Ciebie formacie), która po dodaniu do oryginału wygeneruje skrót SHA-256 zawierający 2016
w swojej reprezentacji base64 wprowadzanie bajtów.
Oto kilka przykładów prawidłowych rozwiązań, dzięki uprzejmości silników, które ludzie już wygenerowali, a także wygenerowanych przez nich skrótów:
> 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.)
Jedyną gotową biblioteką (inną niż standardowe funkcje wejścia i wyjścia), z której może korzystać Twój program, jest SHA256(bytes)
funkcja pobierająca dane bajtowe i zwracająca skrót SHA256 w dowolnym formacie, w tym base64.
Program do wykonania tego w najmniejszej liczbie bajtów kodu źródłowego wygrywa.