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']


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.

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.