주어진 문자열로 몇 개의 메사가 시작합니까?


11

다음 조건이 충족되면 비어 있지 않은 문자열 목록을 메사 라고하겠습니다 .

  1. 나열된 각 문자열은 비어 있지 않으며 첫 번째 문자열에서 발생하는 문자 만 사용합니다.
  2. 연속되는 각 문자열은 이전 문자열보다 정확히 한 문자 더 깁니다.
  3. 목록에있는 문자열은 목록 에있는 다른 문자열 의 하위 시퀀스 가 아닙니다 .

"메사"라는 용어는 다음과 같이 시각화하는 것입니다 ( xs는 다양한 문자이어야 함).

    xx..x
    xx..xx
    xx..xxx
    .
    .
    .
    xx..xxx..x 

주의 : 그것은 오직 많은 수의 메사 만이 주어진 문자열로 시작한다는 수학적 사실입니다. 하위 시퀀스하위 문자열 의 차이점에 유의하십시오 . 예를 들어, 'anna'은 'banana'의 하위 시퀀스 (하위 문자열이 아님)입니다.

도전:

  • 비어 있지 않은 임의의 영숫자 입력 문자열을 사용하고 해당 문자열로 시작하는 메사 수를 출력하는 가장 짧은 프로그램을 작성하십시오.

입력 (stdin) :

  • 비어 있지 않은 영숫자 문자열

출력 (stdout) :

  • 입력 문자열로 시작하는 메사 수입니다.

채점 :

  • 승자는 바이트 수가 가장 적은 프로그램입니다.

메사 예제

하나의 메사 만 시작합니다 a:

a

하나의 메사 만 시작합니다 aa:

aa

많은 메사로 시작 ab:

ab        ab        ab        ab        (and so on)
          baa       aaa       bbb
                    bbba      bbaa
                              baaaa
                              aaaaaa

메사의 독창성은 어떻게 결정됩니까? 예를 들어, 내가 가질 수있다 ab, bbb단지 두 번째 항에서 정지하여 메사한다. 유효합니까? 아니면 항상 가능한 길게 만들어야합니까? 또한, 여러 가능한 재 배열이있는 경우입니다 nth(같은 용어는 baa, aba, aab) 그들은 (물론 그들은 모든 규칙을 따르의 제공)뿐만 아니라, 별도의 암석 모든 계산합니까?
mellamokb

@mellamokb-전혀 다른 점이 있다면 다른 메사입니다. 예를 들면, ab, ab/baa, ab/bbb, ab/bbb/bbaa, ab/bbb/bbaa/baaaa, ab/bbb/bbaa/baaaa/aaaaaa다른 암석이다.
res

@mellamokb-당신은 다른 좋은 질문을 제기합니다; 예를 들어, 주어진 문자열로 시작하는 최대 길이 메사 수와 최대 길이는 얼마 입니까? 이 질문의 다른 버전은 주어진 크기의 알파벳을 수정하고 (알파벳 크기는 입력이 될 것입니다) 주어진 알파벳의 문자 만 사용하는 모든 메사 (조건 # 1없이 정의 됨)를 고려할 것입니다.
res

답변:



2

루비, 142 자

m=->l{[*l[0].chars].repeated_permutation(l[-1].size+1).reduce(1){|s,x|l.any?{|y|x*''=~/#{[*y.chars]*'.*'}/}?s:s+m[l+[x*'']]}}
p m[[gets.chop]]

이 알고리즘은 구성 적입니다. 즉, 입력 문자열에 대해 가능한 모든 메사를 작성하고 계산합니다. 프로그램을 정말 느리게 만듭니다. 그러나 코드 골프입니다.

예제 실행 :

> a
1
> aa
1
> ab
43

길이가 3 (예 :) 인 사소한 이진 문자열로 시작하는 모든 메사 aab가 가능한 길이이지만 확실하지는 않습니다. 귀하의 프로그램이 한 시간 정도 실행되었습니다. 주의 : 두 개 이상의 고유 한 문자가 포함 된 입력에 대해서는 가능한 출력이 없습니다. 예를 들어, 시작하는 메사 중 일부 abc7000 번째 Ackermann 수 보다 큰 길이 를 갖습니다 .
res

C #에서 최적화 된 버전을 작성했으며 300,000항목을 생성 한 후에도 aab처음 10 개 정도의 용어가 모두 동일하다는 것을 알았습니다. 그래서 나는 두 글자보다 큰 것은 불가능할 것이라고 생각합니다. 적어도 지능과 휴리스틱 계산이 없으면 안됩니다.
mellamokb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.