Fattorizzazione delle parole di Lyndon


11

sfondo

Una parola Lyndon è una stringa non vuota che è strettamente lessicograficamente più piccola di tutte le altre sue rotazioni. È possibile considerare qualsiasi stringa in modo univoco come la concatenazione delle parole di Lyndon in modo tale che queste parole secondarie siano lessicograficamente non crescenti; la tua sfida è di farlo nel modo più breve possibile.

Dettagli

È necessario implementare una funzione o un programma che enumera la fattorizzazione in parole Lyndon di qualsiasi stringa ASCII stampabile, in ordine, producendo le sottostringhe risultanti come una matrice o un flusso di qualche tipo. I caratteri devono essere confrontati con i loro punti di codice e sono consentiti tutti i metodi di input e output standard. Come al solito per il , vince il programma più breve in byte.

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


Si noti che questo equivale a dividere per <=ness. (Non ho idea di come esprimerlo meglio: |)
CalculatorFeline

È equivalente a prendere ripetutamente il primo carattere e il prefisso di tutti i personaggi più grandi di esso?
xnor

@xnor No. 'abac' è una parola di Lyndon.
user1502040

@ user1502040 Vedo, i legami sono interessanti. Suggerirei di aggiungere alcuni casi di test che catturano questo.
xnor

Risposte:


5

Pyth, 17 16 byte

-1 byte grazie a isaacg!

hf!ff>Y>YZUYT+./

Provalo online!

Spiegazione

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+./tiene conto della stringa vuota con 1 byte in meno.
isaacg,

Bene grazie! Mi sembrava che ci fosse stato un modo più breve.
Notjagan,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.