В протоколе Биткойн 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.
Программа для этого в наименьшем количестве байтов исходного кода выигрывает.
Ответы:
Perl 5.10+, 39 + 18 = 57 байт
Это должно быть выполнено с параметром
-nMDigest::SHA=/./
командной строки, который включен в число байтов. Он также используетsay
функцию Perl 5.10+ и поэтому должен запускаться с переключателем командной строки-M5.010
(или-E
), который считается бесплатным. Ввод должен быть предоставлен в stdin, без завершающей строки (если вы не хотите, чтобы новая строка считалась частью ввода).Примеры:
источник
Математика, 94
Эта функция будет пробовать положительные целые числа в качестве кандидатов. На моем ноутбуке уходит более 4 минут, чтобы получить правильный ответ.
Чем дольше, тем быстрее
~5x
реализация ( ) использует распараллеливание:источник
Рубин,
8786 байтЯ не уверен, правильно ли я понял задачу, но она находит
196870
через несколько секунд, если вы введетеfoo
.источник
PowerShell, 150
152153байтапример
источник
C #, 179 байт
Подобно решению PowerShell, только дольше.
источник