Faktoryzacja słów Lyndona

11

tło

Lyndon słowo jest niepusty ciąg znaków, który jest ściśle leksykograficznie mniejszy niż wszystkich innych swoich obrotów. Możliwe jest uwzględnienie dowolnego łańcucha unikatowo jako konkatenacji słów Lyndona, tak aby słowa te nie leksykograficznie nie zwiększały się; Twoim wyzwaniem jest zrobienie tego tak zwięźle, jak to możliwe.

Detale

Powinieneś zaimplementować funkcję lub program, który wylicza faktoryzację słowa Lyndona dowolnego drukowalnego ciągu ASCII, w celu uzyskania wynikowych podciągów jako tablicy lub strumienia. Znaki powinny być porównywane według ich punktów kodowych i dozwolone są wszystkie standardowe metody wejścia i wyjścia. Jak zwykle dla , wygrywa najkrótszy program w bajtach.

Przypadki testowe

''           []
'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']
użytkownik1502040
źródło
Powiązane
xnor
Zauważ, że jest to równoważne z podziałem według <=ness. (Nie mam pojęcia, jak lepiej to wyrazić: |)
CalculatorFeline
Czy to równoznaczne z wielokrotnym przyjmowaniem pierwszego znaku i prefiksu wszystkich znaków większych od niego?
xnor
@ xnor Nie. „abac” jest słowem Lyndona.
user1502040,
@ user1502040 Widzę, więzi są interesujące. Sugeruję dodanie kilku przypadków testowych, które to wychwytują.
xnor

Odpowiedzi:

5

Pyth, 17 16 bajtów

-1 bajt dzięki isaacg!

hf!ff>Y>YZUYT+./

Wypróbuj online!

Wyjaśnienie

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
źródło
1
hf!ff>Y>YZUYT+./uwzględnia pustą wielkość ciągu z 1 bajtem mniej.
isaacg
Fajnie dzięki! Czułem, że musiała być krótsza droga.
notjagan
0

Pyth - 28 bajtów

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

Pakiet testowy .

Maltysen
źródło
1
To wydaje się nie działać na pustym ciągu.
user1502040,