Faktorisasi kata Lyndon


11

Latar Belakang

Sebuah kata Lyndon adalah string non-kosong yang ketat leksikografi lebih kecil daripada semua rotasi lainnya. Dimungkinkan untuk memfaktorkan setiap string secara unik sebagai gabungan kata-kata Lyndon sedemikian rupa sehingga sub-kata ini secara leksikografis tidak meningkat; tantangan Anda adalah melakukan ini sejelas mungkin.

Detail

Anda harus mengimplementasikan fungsi atau program yang menyebutkan faktorisasi kata Lyndon dari string ASCII yang dapat dicetak, untuk menghasilkan substring yang dihasilkan sebagai array atau aliran dari beberapa jenis. Karakter harus dibandingkan dengan poin kode mereka, dan semua metode input dan output standar diperbolehkan. Seperti biasa untuk , program terpendek dalam byte menang.

Uji Kasus

''           []
'C'          ['C']
'aaaaa'      ['a', 'a', 'a', 'a', 'a']
'K| '        ['K|', ' ']
'abaca'      ['abac', 'a']
'9_-$'       ['9_', '-', '$']
'P&O(;'      ['P', '&O(;']
'xhya{Wd$'   ['x', 'hy', 'a{', 'Wd', '$']
'j`M?LO!!Y'  ['j', '`', 'M', '?LO', '!!Y']
'!9!TZ'      ['!9!TZ']
'vMMe'       ['v', 'MMe']
'b5A9A9<5{0' ['b', '5A9A9<5{', '0']


Perhatikan bahwa ini sama dengan pemisahan oleh <=ness. (Saya tidak tahu bagaimana mengekspresikan ini dengan lebih baik: |)
CalculatorFeline

Apakah ini setara dengan berulang kali mengambil karakter pertama dan awalan semua karakter lebih besar dari itu?
xnor

@ xnor No. 'abac' adalah kata Lyndon.
user1502040

@ user1502040 Begitu ya, ikatannya menarik. Saya sarankan menambahkan beberapa test case yang menangkap ini.
xnor

Jawaban:


5

Pyth, 17 16 byte

-1 byte terima kasih kepada isaacg!

hf!ff>Y>YZUYT+./

Cobalah online!

Penjelasan

hf!ff>Y>YZUYT+./
              ./    Take all possible disjoint substring sets of [the input]
             +      plus [the input] itself (for the null string case).
 f                  Filter for only those sets which
  !f        T       for none of the substrings
    f  >YZUY        is there a suffix of the substring
     >Y             lexographically smaller than the substring itself.
h                   Return the first (i.e. the shortest) such set of substrings.

1
hf!ff>Y>YZUYT+./menyumbang case string kosong dengan 1 byte lebih sedikit.
isaacg

Terima kasih banyak! Saya merasa pasti ada jalan yang lebih pendek.
notjagan


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.