Факторизація слова Ліндона


11

Фон

Ліндон слово не є символом нового рядка , яка є строго словниковий менше , ніж усіма іншими його обертання. Будь-який рядок можна однозначно визначити як конкатенація ліндонських слів так, що ці підслови лексикографічно не збільшуються; Ваше завдання - зробити це якомога коротше.

Деталі

Ви повинні реалізувати функцію або програму, яка перераховує ліндографічну факторизацію будь-якої друкованої рядка ASCII для того, щоб виводити результуючі підрядки як масив чи потік якогось типу. Символи слід порівнювати за кодовими точками, а всі стандартні методи введення та виводу дозволені. Як зазвичай для , виграє найкоротша програма в байтах.

Випробування

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


Зауважте, що це еквівалентно розщепленню за <=ness. (Я не маю уявлення, як це краще виразити: |)
CalculatorFeline

Чи це еквівалент повторному прийому першого символу та префікса всіх символів більших за нього?
xnor

@xnor No. 'abac' - слово Ліндона.
user1502040

@ user1502040 Я бачу, зв’язки цікаві. Я б запропонував додати кілька тестових випадків, які сприймають це.
xnor

Відповіді:


5

Pyth, 17 16 байт

-1 байт завдяки isaacg!

hf!ff>Y>YZUYT+./

Спробуйте в Інтернеті!

Пояснення

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+./припадає на регістр порожнього рядка на 1 байт менше.
isaacg

Приємно, дякую! Я відчував, що, мабуть, був коротший шлях.
notjagan


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.