Các period
của một chuỗi là khác không thay đổi ngắn nhất để các chuỗi phù hợp với bản thân, bỏ qua bất kỳ bộ phận nhô ra. Vì vậy, ví dụ, abcabcab
có thời gian 3
. Theo quy ước, chúng tôi nói rằng nếu không có sự dịch chuyển như vậy thì một chuỗi có chu kỳ bằng độ dài của nó. Vì vậy, thời kỳ abcde
là 5
và thời kỳ a
là 1
.
Trong các điều khoản chính thức hơn, khoảng thời gian của một chuỗi S
là tối thiểu i > 0
sao cho S[1,n-i] == S[i+1,n]
(lập chỉ mục từ 1
).
Đối với một chuỗi S có công suất có hai độ dài, chúng ta sẽ tính khoảng thời gian của tất cả các tiền tố có độ dài hai chiều. Ví dụ, xem xét S = abcabcab
. Các giai đoạn chúng tôi sẽ tính toán là:
'a', 1
'ab', 2
'abca', 3
'abcabcab', 3
Trong thực tế, chúng ta sẽ chỉ xuất ra các mảng thời gian, đó là [1, 2, 3, 3]
.
Đối với một sức mạnh tích cực nhất định của hai n
, hãy xem xét tất cả các chuỗi nhị phân có thể S
. Hãy nhớ lại rằng một chuỗi nhị phân chỉ đơn giản là một chuỗi 1
s và 0
s để có chính xác 2^n
các chuỗi như vậy (đó là 2
sức mạnh n
). Đối với mỗi một chúng ta có thể tính toán mảng thời gian này.
Thách thức là viết mã lấy
n
(một lũy thừa hai) làm đầu vào và tính toán có bao nhiêu mảng khác nhau như vậy.
Câu trả lời cho n = 1, 2, 4, 8, 16, 32, 64, 128
:
1, 2, 6, 32, 320, 6025, 216854, 15128807
Toàn bộ các mảng thời gian riêng biệt cho n = 4
là:
1, 1, 1
1, 1, 3
1, 1, 4
1, 2, 2
1, 2, 3
1, 2, 4
Ghi bàn
Tôi sẽ chạy mã của bạn trên máy tính chạy Ubuntu trong 10 phút. Điểm của bạn là lớn nhất n
mà mã của bạn chấm dứt trong thời gian đó. Trong trường hợp hòa, câu trả lời hoàn thành n
chiến thắng nhanh nhất chung lớn nhất. Trong trường hợp có một ràng buộc trong vòng 1 giây về thời gian, câu trả lời đầu tiên được đăng sẽ thắng.
Ngôn ngữ và thư viện
Bạn có thể sử dụng bất kỳ ngôn ngữ và thư viện có sẵn mà bạn thích. Vui lòng bao gồm một lời giải thích đầy đủ về cách chạy / biên dịch mã của bạn trong Linux nếu có thể.
Mã của bạn thực sự nên tính toán các câu trả lời và không, ví dụ, chỉ xuất các giá trị được tính toán trước.
Mục hàng đầu
- 2 phút và 21 giây cho n = 128 trong C # của Peter Taylor
- 9 giây cho n = 32 trong Rust bởi isaacg
n
, bạn có chấp nhận nó không? Nó không được xác định rõ đâu là ranh giới giữa mã hóa cứng và điện toán thực tế.
abcab
. Tất cả trừ 3 chữ cái cuối cùng là abcab
. Những kết hợp này và loại bỏ một số lượng nhỏ hơn các chữ cái không khớp.