Hãy xem xét một chuỗi nhị phân S
có độ dài n
. Lập chỉ mục từ 1
, chúng ta có thể tính khoảng cách Hamming giữa S[1..i+1]
và S[n-i..n]
cho tất cả i
theo thứ tự từ 0
đến n-1
. Khoảng cách Hamming giữa hai chuỗi có độ dài bằng nhau là số vị trí mà tại đó các ký hiệu tương ứng khác nhau. Ví dụ,
S = 01010
cho
[0, 2, 0, 4, 0].
Điều này là do các 0
trận đấu 0
, 01
có Hamming khoảng cách hai đến 10
, các 010
trận đấu 010
, 0101
có Hamming khoảng cách bốn đến 1010
và cuối cùng là 01010
chính nó.
Tuy nhiên, chúng tôi chỉ quan tâm đến kết quả đầu ra trong đó khoảng cách Hamming nhiều nhất là 1. Vì vậy, trong nhiệm vụ này, chúng tôi sẽ báo cáo Y
nếu khoảng cách Hamming nhiều nhất là một và N
khác. Vì vậy, trong ví dụ của chúng tôi ở trên, chúng tôi sẽ nhận được
[Y, N, Y, N, Y]
Xác định f(n)
là số mảng riêng biệt của Y
s và N
s nhận được khi lặp trên tất cả 2^n
các chuỗi bit có thể có S
độ dài khác nhaun
.
Bài tập
Để tăng n
bắt đầu từ 1
, mã của bạn sẽ xuất raf(n)
.
Ví dụ câu trả lời
Đối với n = 1..24
, câu trả lời đúng là:
1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870
Chấm điểm
Mã của bạn sẽ lặp đi lặp lại từ n = 1
việc đưa ra câu trả lời cho mỗin
lượt. Tôi sẽ thời gian chạy toàn bộ, giết nó sau hai phút.
Điểm của bạn là cao nhất n
bạn đạt được trong thời gian đó.
Trong trường hợp hòa, câu trả lời đầu tiên sẽ thắng.
Mã của tôi sẽ được kiểm tra ở đâu?
Tôi sẽ chạy mã của bạn trên máy tính xách tay Windows 7 (hơi cũ) của tôi dưới cygwin. Do đó, vui lòng cung cấp bất kỳ trợ giúp nào bạn có thể để giúp thực hiện điều này dễ dàng.
Máy tính xách tay của tôi có RAM 8GB và CPU Intel i7 5600U@2.6 GHz (Broadwell) với 2 lõi và 4 luồng. Bộ hướng dẫn bao gồm SSE4.2, AVX, AVX2, FMA3 và TSX.
Các mục hàng đầu cho mỗi ngôn ngữ
- n = 40 ở Rust sử dụng CryptoMiniSat, bởi Anders Kaseorg. (Trong máy khách của Lubfox trong Vbox.)
- n = 35 trong C ++ bằng thư viện BuDDy, bởi Christian Seviers. (Trong máy khách của Lubfox trong Vbox.)
- n = 34 trong Clingo của tác giả Anders Kaseorg. (Trong máy khách của Lubfox trong Vbox.)
- n = 31 trong Rust của tác giả Anders Kaseorg.
- n = 29 trong Clojure của NikoNyrh.
- n = 29 in C bằng bartavelle.
- n = 27 trong Haskell bởi bartavelle
- n = 24 tính bằng Pari / gp bởi alephalpha.
- n = 22 trong Python 2 + pypy của tôi.
- n = 21 trong Mathematica bởi alephalpha. (Tự báo cáo)
Tiền thưởng trong tương lai
Bây giờ tôi sẽ đưa ra một khoản tiền thưởng 200 điểm cho bất kỳ câu trả lời nào đạt tới n = 80 trên máy của tôi trong hai phút.