在比特币协议中,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。
该程序以最少的源代码字节为准。
1
叫我疯了,但是这个比特币挖矿难道不是另一个名字吗?
—
Codefun64 '16
另外,定义一个“预构建库”。我的语言的SHA-256函数生成哈希,但不会生成Base64哈希。因此,我还需要使用转换为字节,然后转换为字符,然后转换为Base64。
—
LegionMammal978 '16
@ LegionMammal978“预构建库”可以是在代码之外定义的,对此挑战至关重要的任何函数。因此,您可以为SHA-256函数创建base64包装函数,以便在此问题中使用它。
—
Joe Z.
@ Codefun64这是一个代码问题,可模拟比特币挖掘中使用的过程,但本身不会挖掘比特币。
—
Joe Z.