Lyndon Wortfaktorisierung


11

Hintergrund

Ein Lyndon-Wort ist eine nicht leere Zeichenfolge, die streng lexikografisch kleiner ist als alle anderen Rotationen. Es ist möglich, jede Zeichenfolge als Verkettung von Lyndon-Wörtern eindeutig zu faktorisieren, sodass diese Unterwörter lexikografisch nicht ansteigen. Ihre Herausforderung besteht darin, dies so kurz wie möglich zu halten.

Einzelheiten

Sie sollten eine Funktion oder ein Programm implementieren, das die Lyndon-Wortfaktorisierung einer druckbaren ASCII-Zeichenfolge auflistet, um die resultierenden Teilzeichenfolgen als Array oder Stream auszugeben. Zeichen sollten anhand ihrer Codepunkte verglichen werden, und alle Standardeingabe- und -ausgabemethoden sind zulässig. Wie beim , gewinnt das kürzeste Programm in Bytes.

Testfälle

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


Beachten Sie, dass dies der Aufteilung nach <=Ness entspricht. (Ich habe keine Ahnung, wie ich das besser ausdrücken kann: |)
CalculatorFeline

Entspricht dies der wiederholten Verwendung des ersten Zeichens und des Präfixes aller Zeichen, die größer als dieses sind?
xnor

@xnor Nein. 'abac' ist ein Lyndon-Wort.
user1502040

@ user1502040 Ich sehe, Krawatten sind interessant. Ich würde vorschlagen, einige Testfälle hinzuzufügen, die dies erfassen.
xnor

Antworten:


5

Pyth, 17 16 Bytes

-1 Byte dank isaacg!

hf!ff>Y>YZUYT+./

Probieren Sie es online aus!

Erläuterung

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+./berücksichtigt den leeren Zeichenfolgenfall mit 1 Byte weniger.
isaacg

Nett, danke! Ich hatte das Gefühl, dass es einen kürzeren Weg gegeben haben muss.
Notjagan


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.