Trong giao thức Bitcoin, năm 2016 là một con số rất đặc biệt. "Khó khăn" của việc tìm kiếm một hàm băm để tạo một khối mới được điều chỉnh cứ sau 2.016 khối để thay đổi gần đúng cứ sau hai tuần.
Con số này được chọn là do độ khó tự điều chỉnh sao cho mỗi khối mất khoảng 10 phút để được tìm thấy và trong hai tuần, có 2 × 7 × 24 × 6 = 2.016 khoảng thời gian mười phút.
Để kỷ niệm sự trùng hợp về số này, vấn đề năm mới của năm nay là về Bitcoin - cụ thể là thuật toán băm mà nó sử dụng để ký các khối, SHA-256.
Nhiệm vụ của bạn là tạo ra một chương trình sẽ lấy đầu vào byte (ít nhất là ASCII) và xuất ra một byte không theo byte (theo định dạng bạn chọn) sẽ tạo ra hàm băm SHA-256 chứa 2016
trong biểu diễn base64 của nó khi được thêm vào bản gốc đầu vào byte.
Dưới đây là một số ví dụ về các giải pháp hợp lệ, lịch sự của các công cụ mà mọi người đã tạo ra, cũng như các băm mà họ tạo ra:
> 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.)
Thư viện được xây dựng sẵn duy nhất (ngoài các hàm đầu vào và đầu ra tiêu chuẩn) mà chương trình của bạn có thể sử dụng là một SHA256(bytes)
hàm lấy đầu vào byte và trả về hàm băm SHA256, ở bất kỳ định dạng nào kể cả base64.
Chương trình để làm điều này trong vài byte mã nguồn chiến thắng.