린든 단어 분해


11

배경

린든 단어는 엄격하게 모든 다른 회전보다 사전 작은 비어 있지 않은 문자열입니다. Lyndon 단어의 연결로 문자열을 고유하게 고려하여 이러한 하위 단어가 사전 식으로 비 증가되도록 할 수 있습니다. 당신의 도전은 가능한 간결하게 이것을하는 것입니다.

세부

인쇄 가능한 ASCII 문자열의 Lyndon 단어 분해를 열거하는 함수 또는 프로그램을 순서대로 생성하여 결과 하위 문자열을 어떤 종류의 배열 또는 스트림으로 출력해야합니다. 문자는 코드 포인트로 비교해야하며 모든 표준 입력 및 출력 방법이 허용됩니다. 에 대한 평소처럼 바이트 승리의 짧은 프로그램입니다.

테스트 사례

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


이것은 <=ness 로 나누는 것과 같습니다 . (나는 이것을 더 잘 표현하는 방법을 모른다 :)
CalculatorFeline

이것은 첫 번째 문자와 모든 문자의 접두사보다 반복적으로 큰 문자를 취하는 것과 같습니다.
xnor

@xnor No. 'abac'는 Lyndon 단어입니다.
user1502040 2016 년

@ user1502040 알다시피, 관계는 재미있다. 이것을 잡는 몇 가지 테스트 사례를 추가하는 것이 좋습니다.
xnor

답변:


5

Pyth, 17 16 바이트

isaacg 덕분에 -1 바이트!

hf!ff>Y>YZUYT+./

온라인으로 사용해보십시오!

설명

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+./1 바이트가 적은 빈 문자열 케이스를 설명합니다.
isaacg 2016 년

감사합니다! 나는 더 짧은 길이 있어야한다고 느꼈다.
notjagan


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.