В протоколе Биткойн 2016 - это особенное число. «Сложность» нахождения хеша для создания нового блока корректируется каждые 2 016 блоков, чтобы приблизительное изменение каждые две недели.
Это число было выбрано потому, что сложность подстраивается так, что каждый блок занимает около 10 минут, а через две недели 2 × 7 × 24 × 6 = 2,016 десятиминутных периодов.
Чтобы отметить это числовое совпадение, новогодняя проблема этого года касается биткойнов - в частности, алгоритма хеширования, который он использует для подписи блоков, 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.
Программа для этого в наименьшем количестве байтов исходного кода выигрывает.