그런 어떤 순서로 포인터의 시퀀스를 정의 할 수 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
길이보다 작 으면를 반환 합니다. 이것은 내가 질문에서 준 함수의 재귀 적 정의를 따릅니다.l
l
n
l!((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-1
를 e
나중에 사용할 수 있도록.
답변
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 바이트
답변
답변
표준 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] 5
yields 4
.