Sebuah string x
menghasilkan sebuah string y
jika y
merupakan sebuah substring dari pengulangan tak terbatas x
. Misalnya abc
menghasilkan bcabcab
.
Tulis sebuah program untuk menemukan string terpendek, leksikografis terkecil yang akan menghasilkan input. Anda diberi input standar satu baris teks. Anda harus mencetak string penghasil ke output standar. Sebagai contoh:
memasukkan
bcabcabca
keluaran
abc
Kode terpendek menang. Anda dapat berasumsi bahwa input hanya berisi karakter az (dan baris baru tambahan jika Anda mau).
code-golf
kolmogorov-complexity
subsequence
Keith Randall
sumber
sumber
bac
dalam contoh Anda, bukanabc
?bac
s yang berulang .(bca)^n
, yang artinyabca
sama validnya dengan contoh yang diberikanabc
.bca
bukan yang terkecil secara leksikografis.Jawaban:
Ruby 1.9, 40 karakter
Mengasumsikan input tidak diakhiri oleh baris baru. Juga mungkin sangat lambat untuk hasil yang lebih besar.
sumber
Python
88185 karakterKeluaran:
sumber
bacabac
dengan benar.Haskell,
299128 karakterTerima kasih kepada jloy! Sekarang versi keduanya jauh lebih pendek dan saya percaya benar.
sumber
cabcabcabc
menghasilkanabcabc
, jadi solusi ini tidak cukup ada. Saya pikir Anda harus memodifikasiq++q++q
untuk mendapatkan hasil yang diinginkan. Namun, upaya cepat saya untuk memperbaiki hal-hal yang terbentur mencapai 145 karakter. (Spoiler ada di sini: gist.github.com/1035161 )(/=)""
kondisi? Sepertinya tidak melakukan apa-apa. Selain itu, menghilangkan lambdas membantu: Anda dapat menyingkirkan w sama sekali menggunakan.
operator dan mengubah fungsi utamamain=interact s
untuk menyimpan beberapa karakter.permutations
alih-alihtails
.Python,
121137129 karakterEDIT: memperbaiki bug yang ditemukan oleh JiminP
sumber
aabab
untuk stringababa
... :(Ruby 1.9, 36
Menggunakan pendekatan yang sama dengan solusi Ventero.
sumber
Python,
161 159 166 140 141 134132 karakterEDIT : Memutar kode setelah membaca komentar Jules Olléon. Menghapus 'bug' yang
bcdabcdab
menghasilkanabbc
.EDIT2 : Memperbaiki bug (
abaa
hasil dalamaaa
) yang terlihat oleh Jules Olléon.Saya tidak tahu tentang Python dengan baik, jadi kode ini mungkin 'tidak golf'.
Saya suka aturan ini:
Anda dapat menganggap input hanya berisi karakter ...
Input & Output
sumber
i-=1
bukani=i-1
. Begitu juga untuk increment.Mathematica 124 byte
Spasi dan baris baru (dengan adanya titik koma di ujung garis) tidak memiliki arti dalam Mathematica dan disertakan di sini untuk keterbacaan.
Input masuk di antara tanda kutip di baris pertama. Jika disusun kembali sebagai fungsi, itu membutuhkan input string seperti:
maka itu 128 byte.
The
For
Loop mengambil pertamai
karakter input dan mengulangi mereka setidaknya sampai panjang input, kemudian memeriksa apakah input adalah substring dari hasilnya. Setelah menemukan panjang periode string,StringPartition
perintah merangkai dua salinan periode itu dan mengambil semua substring dari panjangnya (pada dasarnya mendapatkan semua permutasi siklik), kemudianFirst@Sort
menemukan yang pertama dari mereka ketika dipesan secara leksikografis.sumber
javascript 96 Karakter.
Plunkr bekerja
sumber