당신의 작업은 매우 간단합니다 .A190810 의 n 번째 요소를 계산하십시오 .
A190810의 요소는 다음 규칙에 따라 계산됩니다.
- 첫 번째 요소는 1
- 순서가 증가하고 있습니다
- 경우
x
다음 순서로 발생2x+1
하고3x-1
또한 할
1 기반 또는 0 기반 인덱싱을 사용할 수 있지만 0 기반 인덱싱을 사용하는 경우 답변에서 말하십시오.
테스트 사례
a(1) = 1
a(2) = 2
a(3) = 3
a(4) = 5
a(5) = 7
a(10) = 17
a(20) = 50
a(30) = 95
a(55) = 255
이것이 코드 골프이기 때문에 바이트 단위의 최단 답변이 이깁니다!
답변
젤리 , 16 바이트
×3’;Ḥ‘$;
1Ç¡ṢQ³ị
매우 비효율적입니다. 온라인으로 사용해보십시오!
작동 원리
1Ç¡ṢQ³ị Main link. Argument: n (integer)
1 Set the return value to 1.
Ç¡ Execute the helper link n times.
Ṣ Sort the resulting array.
Q Unique; deduplicate the sorted array.
³ị Retrieve its n-th element.
×3’;Ḥ‘$; Helper link. Argument: A (array)
×3 Multiply all elements of A by 3.
’ Decrement the resulting products.
$ Combine the two links to the left into a monadic chain.
Ḥ Unhalve; multiply all elements of A by 2.
‘ Increment the resulting products.
; Concatenate 3A-1 and 2A+1.
; Concatenate the result with A.
답변
파이썬 2, 88 83 72 바이트
이 답변의 프로그램을 역순으로 읽으십시오 …
Dennis 덕분에 여전히 느리고 짧습니다.
L=1,;exec'L+=2*L[0]+1,3*L[0]-1;L=sorted(set(L))[1:];'*input()
print L[0]
이것은 빠르게 실행되지 않지만 더 짧습니다 ( 83 바이트) . 각 반복을 정렬하고 제거하고 첫 번째 요소를 제거하면 목록에 인덱스가 필요하지 않습니다. 결과는 단순히 n
반복 후 첫 번째 요소 입니다.
데니스를 골라 낸 것 같습니다. :디
L=[1]
n=input()
while n:L+=[2*L[0]+1,3*L[0]-1];n-=1;L=sorted(set(L))[1:]
print L[0]
이 버전 ( 88 바이트 ) 이하는 정말 빠르게 실행되어 약 2 초 안에 500000 번째 요소를 찾습니다.
꽤 간단합니다. n
추가 된 모든 요소가 최대 2 개의 고유 한 요소를 추가 할 수 있으므로 요소보다 3 배 더 많은 요소가있을 때까지 목록의 요소를 계산 하십시오. 그런 다음 중복 n
요소를 제거하고 th 요소를 정렬하고 인쇄하십시오 (인덱싱되지 않음).
L=[1]
i=0
n=input()
while len(L)<3*n:L+=[2*L[i]+1,3*L[i]-1];i+=1
print sorted(set(L))[n]
답변
파이썬 2, 59 바이트
t={1}
exec'm=min(t);t=t-{m}|{2*m+1,3*m-1};'*input()
print m
@ mbomb007의 Python answer을 기반으로 합니다. Ideone에서 테스트하십시오 .
답변
하스켈, 76 73 69 바이트
a#b=mod a b<1&&t(div a b)
t x=x<2||(x-1)#2||(x+1)#3
(filter t[1..]!!)
0부터 시작하는 인덱스를 사용합니다. 사용 예 : (filter t[1..]!!) 54
-> 255
.
반복적으로 삽입 2x+1
하고 3x-1
대부분의 다른 답변에서 볼 수 있듯이 목록을 작성하는 대신 모든 정수 1
를 반복하여 반복적으로 적용 (x-1) / 2
하거나 (x+1) / 3
나눌 수 있는지 감소시킬 수 있는지 확인합니다 .
답변
하스켈, 77 74 바이트
import Data.List
i=insert
f(x:y)=x:f(i(2*x+1)$i(3*x-1)y)
a=(!!)(nub$f[1])
이것은 a
n 번째 항목에 대한 기능 을 제공합니다 . 인덱스가 0입니다. 또는 a=nub$f[1]
전체 목록을 게으르게 만듭니다.
Reinhard Zumkeller Set
코드 의 목록 변형입니다 .
답변
파이썬 2, 88 84 바이트
g=lambda k:g(k%2*k/2)|g(k%3/2*-~k/3)if k>1else k
f=lambda n,k=1:n and-~f(n-g(k),k+1)
Ideone에서 테스트하십시오 .