이진 반복 시퀀스


10

이진 반복 시퀀스는 재귀 적으로 정의 된 다음 형식의 시퀀스입니다.

이진 반복 시퀀스 정의

이것은 피보나치 ( x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1) 서열과 루카스 ( x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1) 서열 의 일반화입니다 .

도전

감안할 때 n, x, y, a, alpha, 및 beta임의의 적절한 형식으로 출력 n대응하는 이진 시퀀스의 반복 일 용어.

규칙

  • 순서를 1- 인덱스 또는 0- 인덱스로 선택할 수 있지만 모든 입력에 대해 선택 사항이 일관성이 있어야하며 응답에서 선택한 사항을 기록해야합니다.
  • 유효하지 않은 입력 (예 : 이전에 종료 n되는 시퀀스 또는 정의되지 않은 용어를 참조하는 시퀀스 F(-1)또는 F(k)위치 k > n) 이 제공되지 않는다고 가정 할 수 있습니다 . 이것의 결과로, x그리고 y항상 긍정적 인 것입니다.
  • 입력 및 출력은 항상 언어의 자연 정수 유형의 경계 내에서 정수입니다. 언어에 무제한 정수가있는 경우 입력 및 출력 범위 내에 있습니다 [2**31, 2**31-1](예 : 32 비트 부호있는 2의 보수 정수 범위).
  • ay정의에 따라 항상 정확한 값을 포함합니다 .

테스트 사례

참고 : 모든 테스트 사례는 인덱스가 0입니다.

x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1, n = 6 => 13
x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1, n = 8 => 47
x = 3, y = 5, a = [2, 3, 5, 7, 11], alpha = 2, beta = 3, n = 8 => 53
x = 1, y = 3, a = [-5, 2, 3], alpha = 1, beta = 2, n = 10 => -67
x = 5, y = 7, a = [-5, 2, 3, -7, -8, 1, -9], alpha = -10, beta = -7, n = 10 => 39

복용합니까 a합리적으로 역순 수에?
Dennis

@ 데니스 예, 그렇습니다.
Mego

알겠습니다
Dennis

답변:


2

젤리 , 11 바이트

⁴Cịæ.⁵ṭµ¡⁶ị

온라인으로 사용해보십시오!  1  |  2  |  3  |  4  |  5 

작동 원리

⁴Cịæ.⁵ṭµ¡⁶ị  Main link. Arguments: a; [x, y]; [α, β]; n (1-based)

       µ     Combine the links to the left into a chain.
        ¡    Execute that chain n times, updating a after each execution.
⁴              Yield [x, y].
 C             Complement; yield [1 - x, 1 - y].
  ị            Retrieve the elements of a at those indices.
               Indexing is 1-based and modular in Jelly, so this retrieves
               [a[-x], a[-y]] (Python syntax).
     ⁵         Yield [α, β].
   æ.          Take the dot product of [a[-x], a[-y]] and [α, β].
         ⁶   Yield n.
          ị  Retrieve the element of a at index n.

2

파이썬 2, 62 바이트

x,y,l,a,b=input();f=lambda n:l[n]if n<y else a*f(n-x)+b*f(n-y)

직접 재귀 솔루션. 모든 입력은 n함수 인수를 제외하고 STDIN에서 가져옵니다 . 분할은 기본적으로 허용됩니다 (충분하지만).

0으로 거짓이 될 수 있기 때문에 and/or대신 바이트를 절약 할 수있는 방법이없는 것 같습니다 .if/elsel[n]


2

파이썬 2, 59 바이트

x,y,A,a,b,n=input()
exec'A+=a*A[-x]+b*A[-y],;'*n
print A[n]

Ideone에서 테스트하십시오 .


2

자바 스크립트 (ES6), 51 44 바이트

(x,y,z,a,b)=>g=n=>n<y?z[n]:a*g(n-x)+b*g(n-y)

이 함수는 부분적으로 커리 (예 : f(1,2,[1,1],1,1)(8)34를 반환)합니다. 중간 함수를 서로 독립적으로 만드는 데 2 ​​바이트가 필요합니다 (현재 생성 된 함수 만 올바르게 작동 함).

편집 : @Mego 덕분에 전달 된 배열에 항상 y결과 의 첫 번째 요소가 포함되어 있음을 간과했기 때문에 7 바이트가 절약되었습니다 .


@Mego 자주 질문의 세부 사항을 간과하지만 그 중 하나가 특히 미묘한 인상을 받았습니다.
Neil

2

하스켈, 54 48 바이트

l@(x,y,a,p,q)%n|n<y=a!!n|k<-(n-)=p*l%k x+q*l%k y

0

J, 43 바이트

{:{](],(2>@{[)+/ .*]{~1-@>@{[)^:(3>@{[)>@{.

A 의 초기 시퀀스가 ​​주어지면 x , y , αβ 의 매개 변수를 사용하여 다음 항을 n 번 계산합니다 . 이후 확장 된 시퀀스에서 n 번째 항을 선택 하여 결과로 출력합니다.

용법

J는 1 개 또는 2 개의 인수 만 지원하므로 모든 매개 변수를 상자 목록의 목록으로 그룹화합니다. 초기 시드 값 A 가 먼저오고 , 목록으로 xy 의 매개 변수가오고, 목록으로 αβ 의 매개 변수가오고 , 값 n으로 끝납니다 .

   f =: {:{](],(2>@{[)+/ .*]{~1-@>@{[)^:(3>@{[)>@{.
   2 3 5 7 11;3 5;2 3;8
┌──────────┬───┬───┬─┐
│2 3 5 7 11│3 5│2 3│8│
└──────────┴───┴───┴─┘
   f 2 3 5 7 11;3 5;2 3;8
53
   f _5 2 3 _7 _8 1 _9;5 7;_10 _7;10
39
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.