Antecedentes
Una palabra de Lyndon es una cadena no vacía que es estrictamente lexicográfica más pequeña que todas sus otras rotaciones. Es posible factorizar cualquier cadena de forma única como la concatenación de palabras de Lyndon de manera que estas subpalabras no sean lexicográficas; Su desafío es hacer esto de la manera más sucinta posible.
Detalles
Debe implementar una función o programa que enumere la factorización de palabras de Lyndon de cualquier cadena ASCII imprimible, en orden, generando las subcadenas resultantes como una matriz o secuencia de algún tipo. Los caracteres se deben comparar por sus puntos de código, y se permiten todos los métodos de entrada y salida estándar. Como de costumbre para code-golf , gana el programa más corto en bytes.
Casos de prueba
'' []
'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']
code-golf
string
combinatorics
user1502040
fuente
fuente
<=
ness. (No tengo idea de cómo expresar esto mejor: |)Respuestas:
Pyth,
1716 bytes-1 byte gracias a isaacg!
Pruébalo en línea!
Explicación
fuente
hf!ff>Y>YZUYT+./
representa el caso de cadena vacía con 1 byte menos.Jalea , 18 bytes
Pruébalo en línea!
fuente
Pyth - 28 bytes
Test Suite .
fuente