17
In the Bitcoin protocol, 2016 is a very special number. The "difficulty" of finding a hash to create a new block is adjusted every 2,016 blocks to approximate changing once every two weeks.
This number was chosen is because the difficulty adjusts itself so that every block takes about 10 minutes to be found, and in two weeks, there are 2 × 7 × 24 × 6 = 2,016 ten-minute periods.
To commemorate this numerical coincidence, this year's New Year's problem is about Bitcoin — specifically, the hashing algorithm it uses to sign blocks, SHA-256.
Your task is to create a program that will take byte input (in at least ASCII) and output a nonce in bytes (in the format of your choice) that will produce a SHA-256 hash containing 2016
in its base64 representation when appended to the original byte input.
Here are some examples of valid solutions, courtesy of the engines people have already generated, as well as the hashes they produced:
> 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.)
The only pre-built library (other than standard input and output functions) your program may use is a SHA256(bytes)
function that takes byte input and returns a SHA256 hash, in any format including base64.
The program to do this in the fewest bytes of source code wins.
1Call me crazy, but isn't this bitcoin mining by another name? – Codefun64 – 2016-01-01T06:10:37.680
1Also, define a "pre-built library". My language's SHA-256 function produces the hash, but not the Base64 hash. Therefore, I would also need to use conversion to bytes, then conversion into characters, then conversion into Base64. – LegionMammal978 – 2016-01-01T11:41:55.327
@LegionMammal978 A "pre-built library" would be any function defined outside the code that counts for this challenge. So you can create a base64 wrapper function for your SHA-256 function, in order to use it in this problem. – Joe Z. – 2016-01-01T16:28:28.817
@Codefun64 This is a code problem that simulates the procedure used in Bitcoin mining, but does not itself mine for bitcoins. – Joe Z. – 2016-01-03T02:43:32.930