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']
pengguna1502040
sumber
Terkait
xnor
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.
notjagan
sumber
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
1

Jelly , 18 byte

ṙJ¹ÐṂF⁼
ŒṖÇ€Ạ$ÐfṀȯ

Cobalah online!

Dennis
sumber
0

Pyth - 28 byte

hf&SI_T.Am.A>Rdt.u.>N1tddT./

Test Suite .

Maltysen
sumber
1
Ini tampaknya gagal pada string kosong.
user1502040