У протоколі Bitcoin, 2016 рік - це дуже особливе число. "Складність" пошуку хешу для створення нового блоку коригується кожні 2016 блоків, щоб приблизно змінюватись раз на два тижні.
Це число було обрано тому, що складність підлаштовується так, що для кожного блоку потрібно близько 10 хвилин, і за два тижні виникають 2 × 7 × 24 × 6 = 2,016 десятихвилинні періоди.
Щоб відзначити цей чисельний збіг, новорічна проблема цього року стосується Bitcoin - конкретно алгоритму хешування, який він використовує для підписання блоків, SHA-256.
Ваше завдання - створити програму, яка буде приймати введення байтів (принаймні, ASCII) і виводити без байтів у форматі (на ваш вибір), який видасть хеш SHA-256, що міститься 2016
в його представленні base64, коли додається до оригіналу введення байтів
Ось кілька прикладів дійсних рішень, люб’язність двигунів, які люди вже створили, а також хеши, які вони виробляли:
> 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.)
Єдина заздалегідь створена бібліотека (крім стандартних функцій введення та виводу), яку може використовувати ваша програма, - це SHA256(bytes)
функція, яка приймає байтові дані та повертає хеш SHA256 у будь-якому форматі, включаючи base64.
Виграє програма для цього в найменших байтах вихідного коду.