Fatoração da palavra Lyndon

11

fundo

Uma palavra de Lyndon é uma string não vazia, estritamente lexicograficamente menor do que todas as outras rotações. É possível fatorar qualquer string exclusivamente como a concatenação das palavras de Lyndon, de modo que essas subpalavras sejam lexicograficamente não crescentes; seu desafio é fazer isso da maneira mais sucinta possível.

Detalhes

Você deve implementar uma função ou programa que enumere a fatoração da palavra Lyndon de qualquer sequência ASCII imprimível, em ordem, produzindo as substrings resultantes como uma matriz ou fluxo de algum tipo. Os caracteres devem ser comparados por seus pontos de código, e todos os métodos padrão de entrada e saída são permitidos. Como sempre, no , o programa mais curto em bytes vence.

Casos de teste

''           []
'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']
user1502040
fonte
Observe que isso é equivalente à divisão por <=ness. (Eu não tenho idéia de como expressar isso melhor: |)
CalculatorFeline
Isso é equivalente a pegar repetidamente o primeiro caractere e o prefixo de todos os caracteres maiores que ele?
xnor
@xnor Não. 'abac' é uma palavra de Lyndon.
user1502040
@ user1502040 Entendo, os laços são interessantes. Eu sugiro adicionar alguns casos de teste que capturam isso.
xnor

Respostas:

5

Pitão, 17 16 bytes

-1 byte graças a isaacg!

hf!ff>Y>YZUYT+./

Experimente online!

Explicação

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
fonte
1
hf!ff>Y>YZUYT+./é responsável pelo caso de cadeia vazia com 1 byte a menos.
Isaacg
Bom obrigado! Eu senti que deveria ter havido um caminho mais curto.
notjagan
0

Pitão - 28 bytes

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

Conjunto de Teste .

Maltysen
fonte
1
Isso parece falhar na string vazia.
user1502040