A190810을 계산하십시오 순서로 발생 2x+1하고 3x-1또한 할 1 기반 또는

당신의 작업은 매우 간단합니다 .A190810 의 n 번째 요소를 계산하십시오 .

A190810의 요소는 다음 규칙에 따라 계산됩니다.

  1. 첫 번째 요소는 1
  2. 순서가 증가하고 있습니다
  3. 경우 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])

이것은 an 번째 항목에 대한 기능 을 제공합니다 . 인덱스가 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에서 테스트하십시오 .


답변

Pyth, 20 19 바이트

hutS{+G,hyhGt*3hGQ0

온라인으로 사용해보십시오. 테스트 스위트.

0부터 시작하는 인덱싱을 사용합니다.