양의 정수 시퀀스를 정의 해 봅시다. 짝수에 대한 순서를 이전 항의 두 배로 정의합니다. 시퀀스의 홀수 인덱스는 시퀀스에 아직 나타나지 않은 가장 작은 양의 정수입니다.
첫 커플 용어는 다음과 같습니다.
1,2,3,6,4,8,5,10,7,14,9,18,11,22,12,24,13,26,15,30
이것을 연결 쌍 (n, 2n) 의 목록으로 생각할 수도 있습니다. 여기서 n 은 가장 사용되지 않은 양의 정수입니다.
태스크
입력 으로 숫자 n이 주어지면 이 순서에서 n 번째 항을 계산하십시오 .
이것은 코드 골프 이므로 바이트 단위로 측정 할 때 소스 코드의 크기를 최소화해야합니다.
답변
하스켈, 40 바이트
l(a:r)=a:2*a:l[x|x<-r,x/=2*a]
(l[1..]!!)
제로 기반. l
남아있는 정수의 게으른 목록에서 시퀀스를 점진적으로 빌드합니다.
답변
자바 스크립트 (ES6), 92 82 69 67 65 바이트
n=>(F=i=>i^n?F(a[b=i&1?2*b:(g=k=>a[k]?g(k+1):k)(1)]=-~i):b)(a={})
방법?
우리는 다음을 추적합니다.
- 마지막으로 삽입 된 값 b .
- 조회 테이블에서 이전에 발견 된 모든 값 a .
내부적으로 우리는 0 기반 인덱스 i를 사용하고 있습니다. 따라서 홀수 및 짝수 동작이 반전됩니다.
-
홀수 위치에서 다음 값은 단순히
2 * b
입니다. -
짝수 위치에서 재귀 함수 g () 와 조회 테이블 a 를 사용하여 가장 작은 일치 값을 식별합니다.
(g = k => a[k] ? g(k + 1) : k)(1)
몇 바이트를 절약하기 위해 i{}
대신 로 초기화됩니다 0
. 이것은 우리에게 다음을 사용하도록 강요합니다.
i^n
비교 I를 가진 N 때문에({}) ^ n === n
반면({}) - n
가 평가NaN
.-~i
문자열을 생성 하기 때문에 i 를 증가시킵니다({}) + 1
.
데모
let f =
n=>(F=i=>i^n?F(a[b=i&1?2*b:(g=k=>a[k]?g(k+1):k)(1)]=-~i):b)(a={})
for(n = 1; n <= 20; n++) {
console.log('a[' + n + '] = ' + f(n));
}
답변
파이썬 3 , 80 72 69 바이트
Mr. Xcoder 덕분에 -7 바이트 !
f=lambda n:n and[f(n-1)*2,min({*range(n+1)}-{*map(f,range(n))})][n%2]
답변
답변
수학 , 56 53 바이트
JungHwan Min 감사합니다 -3 바이트 !
(w={};Do[w~FreeQ~k&&(w=w~Join~{k,2k}),{k,#}];w[[#]])&
OEIS 링크에 제공된 Mathematica 표현을 기반으로합니다.
답변
PHP , 64 바이트
for(;$argn-$i++;)if($i&$$e=1)for(;${$e=++$n};);else$e*=2;echo$e;
PHP , 77 바이트
for(;$argn-$i++;$r[]=$e)if($i&1)for(;in_array($e=++$n,$r););else$e*=2;echo$e;
PHP , 78 바이트
for(;$argn-$i++;)$e=$r[]=$i&1?end(array_diff(range($i,1),$r?:[])):2*$e;echo$e;
답변
PHP, 56 바이트
while($$n=$i++<$argn)for($n*=2;$i&$$k&&$n=++$k;);echo$n;
PHP, 75 72 바이트
for($a=range(1,$argn);$i++<$argn;)$a[~-$n=$i&1?min($a):2*$n]=INF;echo$n;