The periodstring adalah terpendek non-zero pergeseran sehingga string cocok itu sendiri, mengabaikan semua bagian yang overhang. Jadi misalnya, abcabcabada titik 3. Dengan konvensi kita katakan bahwa jika tidak ada pergeseran seperti itu maka string memiliki periode yang sama dengan panjangnya. Jadi periode abcdeis 5dan periode ais 1.
Dalam istilah yang lebih formal, periode string Sadalah minimum i > 0sehingga 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 1s dan 0s sehingga ada 2^nstring yang persis seperti itu (yaitu 2untuk 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, 128adalah:
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 nuntuk mana kode Anda berakhir pada waktu itu. Dalam kasus seri, jawaban yang melengkapi nkemenangan 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.