포인터 시퀀스 생성 (N-1))) FORALL N 일부 제한된 수

그런 어떤 순서로 포인터의 시퀀스를 정의 할 수 A (n은) = A ((N-1) – (a (N-1))) FORALL N 일부 제한된 수 이상. 예를 들어 시퀀스가 ​​시작되면

3 2 1

우리의 다음 용어는 것 2때문에 A (N-1) = 1 , (N-1) -1 = 1 , A (1) = 2 (이 예제는 당신이 할 계산 문제가되지 사용합니까 어떤 인덱스 그러나 제로 인덱스 항상 동일합니다.). 프로세스를 반복하면 무한 시퀀스를 얻습니다.

3 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2

직무

양의 정수의 초기 배열이 주어진 경우 해당 배열로 시작하는 포인터 시퀀스가 ​​출력됩니다.

출력 유형

프로그램이 함수를 함수로 작성하도록 선택하면 무한 정수 목록 또는 시퀀스를 색인화하는 함수로 출력을 유연하게 만들 수 있습니다. 전체 프로그램을 작성하기로 선택하면 시퀀스의 항을 무기한으로 출력 할 수 있습니다.

시작 배열과 색인의 두 가지 입력을 선택할 수도 있습니다. 이 작업을 선택하면 해당 인덱스의 시퀀스 항만 출력하면됩니다.


시퀀스 시작 전에 인덱싱이 필요한 시퀀스는 제공되지 않습니다. 예를 들어 , 다음 항을 해결 3하려면 항이 필요하기 때문에 유효한 입력이 아닙니다 3.

이것은 이므로 점수가 낮을수록 프로그램의 바이트 수가됩니다.

테스트 사례

단순성을 위해 테스트 사례가 잘립니다.

2 1   -> 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 ...
2 3 1 -> 2 3 1 3 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 ...
3 3 1 -> 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 ...
4 3 1 -> 4 3 1 3 4 4 3 3 4 4 4 3 4 4 4 4 3 4 4 4 4 3 4 4 4 4 3 4 ...



답변

자바 스크립트 (ES6), 25 바이트

a=>f=n=>a[n]||f(--n-f(n))

호출 될 때 f시퀀스의 지정된 색인에 항목을 제공 하는 함수 를 작성하는 익명 함수입니다 .

오해가 있으면 알려주세요.


답변

껍질 , 7 6 바이트

¡S!o_L

무한리스트를 돌려줍니다.
온라인으로 사용해보십시오!
TIO가 결과를 자르고 인쇄하는 데 시간이 걸립니다.

설명

연산자 ¡에는 몇 가지 의미가 있습니다. 여기서는 “기존 요소 목록에서 새 요소를 계산하는 함수를 반복하여 무한 목록 구성”을 사용하고 있습니다. 길이 N 의 목록이 주어지면 새 요소에는 1 기반 인덱스 N + 1이 있습니다. 목록의 마지막 요소 (이전 값)를 무효화하고 결과를 사용하여 목록에 색인을 작성하기 만하면됩니다.

¡S!o_L  Implicit input.
¡       Construct infinite list by iterating this function on input:
 S!      Element at index
    →    last element
  o_     negated.


답변

하스켈 , 36 바이트

리스트를 가져 와서 시퀀스를 인덱스하는 함수를 반환

l!n|n<length l=l!!n|e<-n-1=l!(e-l!e)

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

설명

여기서 우리는 !리스트 l와 인덱스 를 취하는 함수 를 정의하고 있습니다 n. 로 색인을 생성 한 n길이보다 작 으면를 반환 합니다. 이것은 내가 질문에서 준 함수의 재귀 적 정의를 따릅니다.llnl!((n-1)-l!(n-1))

동일한 프로그램이 ungolfed입니다.

a l n
 |n<length l = l!!n
 |otherwise = (a l) ((n-1) - (a l) (n-1))

내가 사용하는 e<-n-1할당하는 동안 바이트를 저장하는 대신에, 그렇지 않으면의 n-1e나중에 사용할 수 있도록.


답변

MATL , 13 9 바이트

:"tt0)_)h

초기 항과 n 개의 추가 항 (도전이 허용됨) 을 출력합니다. 여기서 n 은 입력으로 사용되는 양의 정수입니다.

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

설명

:"      % Implicitly input n. Do the following n times
  tt    %    Duplicate the sequence so far, twice. In the first iteration this
        %    implicitly inputs the array of initial terms
  0)    %    Get value of the last entry, say m
  _)    %    Get value of the entry which is m positions back from the last
  h     %    Append. This extends the array with the new entry
        % Implicit end. Implicitly display


답변

Mathematica, 63 바이트

두 개의 입력을 받는다

(Clear@a;(a@#2[[1]]=#)&~MapIndexed~#;a@n_:=a[n-1-a[n-1]];a@#2)&

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

Martin Ender에서 -3 바이트


답변

R , 55 바이트

f=function(a,n)"if"(n<=sum(a|1),a[n],f(a,n-1-f(a,n-1)))

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

두 개의 입력을받습니다.


답변

표준 ML (MLton) , 58 바이트

fun a$n=if n<length$then List.nth($,n)else a$(n-1-a$(n-1))

온라인으로 사용해보십시오! 이 함수 a는 초기 목록과 인덱스를 가져와 해당 인덱스의 시퀀스 요소를 반환합니다. 사용법 예 : a [4,3,1] 5yields 4.