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


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.

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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.