No protocolo Bitcoin, 2016 é um número muito especial. A "dificuldade" de encontrar um hash para criar um novo bloco é ajustada a cada 2.016 blocos para aproximar a alteração uma vez a cada duas semanas.
Esse número foi escolhido porque a dificuldade se ajusta de modo que cada bloco leva cerca de 10 minutos para ser encontrado e, em duas semanas, existem 2 × 7 × 24 × 6 = 2.016 períodos de dez minutos.
Para comemorar essa coincidência numérica, o problema do ano novo é sobre Bitcoin - especificamente, o algoritmo de hash usado para assinar blocos, SHA-256.
Sua tarefa é criar um programa que receba entrada de bytes (pelo menos ASCII) e produza um nonce em bytes (no formato de sua escolha) que produzirá um hash SHA-256 contendo 2016
em sua representação base64 quando anexado ao original entrada de bytes.
Aqui estão alguns exemplos de soluções válidas, cortesia dos motores que as pessoas já geraram, bem como os hashes que eles produziram:
> 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.)
A única biblioteca pré-criada (além das funções de entrada e saída padrão) que seu programa pode usar é uma SHA256(bytes)
função que recebe entrada de bytes e retorna um hash SHA256, em qualquer formato, incluindo base64.
O programa para fazer isso no menor número de bytes de código-fonte vence.