Factorisation des mots de Lyndon


11

Contexte

Un mot Lyndon est une chaîne non vide qui est strictement lexicographiquement plus petite que toutes ses autres rotations. Il est possible de factoriser n'importe quelle chaîne uniquement comme la concaténation des mots de Lyndon de telle sorte que ces sous-mots sont lexicographiquement non croissants; votre défi est de le faire aussi succinctement que possible.

Détails

Vous devez implémenter une fonction ou un programme qui énumère la factorisation des mots Lyndon de toute chaîne ASCII imprimable, dans l'ordre, en sortant les sous-chaînes résultantes sous la forme d'un tableau ou d'un flux quelconque. Les caractères doivent être comparés par leurs points de code, et toutes les méthodes d'entrée et de sortie standard sont autorisées. Comme d'habitude pour le , le programme le plus court en octets l'emporte.

Cas de test

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


Notez que cela équivaut à une division par <=ness. (Je ne sais pas comment mieux l'exprimer: |)
CalculatorFeline

Est-ce équivalent à prendre à plusieurs reprises le premier caractère et le préfixe de tous les caractères plus gros que lui?
xnor

@xnor No. 'abac' est un mot de Lyndon.
user1502040

@ user1502040 Je vois, les liens sont intéressants. Je suggère d'ajouter des cas de test qui attrapent cela.
xnor

Réponses:


5

Pyth, 17 16 octets

-1 octet grâce à isaacg!

hf!ff>Y>YZUYT+./

Essayez-le en ligne!

Explication

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+./représente le cas de chaîne vide avec 1 octet de moins.
isaacg

Bien, merci! J'avais l'impression qu'il devait y avoir un chemin plus court.
notjagan


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.