The period
string adalah terpendek non-zero pergeseran sehingga string cocok itu sendiri, mengabaikan semua bagian yang overhang. Jadi misalnya, abcabcab
ada titik 3
. Dengan konvensi kita katakan bahwa jika tidak ada pergeseran seperti itu maka string memiliki periode yang sama dengan panjangnya. Jadi periode abcde
is 5
dan periode a
is 1
.
Dalam istilah yang lebih formal, periode string S
adalah minimum i > 0
sehingga S[1,n-i] == S[i+1,n]
(pengindeksan dari 1
).
Untuk string S yang diberi kekuatan dua panjang, kami akan menghitung periode semua awalan kekuatan dua panjangnya. Sebagai contoh, pertimbangkan S = abcabcab
. Periode yang akan kami hitung adalah:
'a', 1
'ab', 2
'abca', 3
'abcabcab', 3
Kami sebenarnya hanya akan menampilkan array periode, yaitu [1, 2, 3, 3]
.
Untuk kekuatan positif yang diberikan dari dua n
, pertimbangkan semua string biner yang mungkin S
. Ingat bahwa string biner hanyalah string 1
s dan 0
s sehingga ada 2^n
string yang persis seperti itu (yaitu 2
untuk kekuatan n
). Untuk masing-masing kita dapat menghitung array periode ini.
Tantangannya adalah untuk menulis kode yang mengambil
n
(kekuatan dua) sebagai input dan menghitung berapa banyak array yang berbeda.
Jawabannya n = 1, 2, 4, 8, 16, 32, 64, 128
adalah:
1, 2, 6, 32, 320, 6025, 216854, 15128807
Rangkaian lengkap periode berbeda untuk n = 4
:
1, 1, 1
1, 1, 3
1, 1, 4
1, 2, 2
1, 2, 3
1, 2, 4
Skor
Saya akan menjalankan kode Anda di komputer saya yang menjalankan Ubuntu selama 10 menit. Skor Anda adalah yang terbesar n
untuk mana kode Anda berakhir pada waktu itu. Dalam kasus seri, jawaban yang melengkapi n
kemenangan tercepat bersama . Jika ada ikatan dalam waktu 1 detik pada timing, jawaban pertama yang diposting menang.
Bahasa dan perpustakaan
Anda dapat menggunakan bahasa dan perpustakaan yang tersedia yang Anda suka. Harap sertakan penjelasan lengkap tentang cara menjalankan / kompilasi kode Anda di Linux jika memungkinkan. `
Kode Anda sebenarnya harus menghitung jawaban dan tidak, misalnya, hanya menampilkan nilai yang telah dihitung.
Entri terkemuka
- 2 menit dan 21 detik untuk n = 128 dalam C # oleh Peter Taylor
- 9 detik untuk n = 32 di Rust oleh isaacg
n
, apakah Anda akan menerimanya? Tidak didefinisikan dengan baik di mana batas antara hardcoding dan komputasi aktual.
abcab
. Semua kecuali 3 huruf terakhir adalah abcab
. Ini cocok, dan menghapus sejumlah kecil huruf tidak cocok.