아직 사용하지 않은 쌍


21

양의 정수 시퀀스를 정의 해 봅시다. 짝수에 대한 순서를 이전 항의 두 배로 정의합니다. 시퀀스의 홀수 인덱스는 시퀀스에 아직 나타나지 않은 가장 작은 양의 정수입니다.

첫 커플 용어는 다음과 같습니다.

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 번째 항을 계산하십시오 .

이것은 이므로 바이트 단위로 측정 할 때 소스 코드의 크기를 최소화해야합니다.

OEIS A036552


시퀀스의 홀수 인덱스가 시퀀스에 아직 나타나지 않는 가장 작은 양의 정수라는 사실 . 관련이 없습니까?
Adám

1
또한 어떤 쌍을 이루고 있습니까?
Adám

@ Adám 아니요, 그렇지 않습니다. 나는 이것이 당신에게 어쩌면 내가 이것을 잘못 말한 것 같은 느낌을 주는지 확실하지 않습니다.
밀 마법사

1
@ Adám 시퀀스를 생각하는 또 다른 방법은 연결된 쌍으로 구성 (n,2n)되며 각 숫자는 한 번만 나타납니다. 각 쌍은 후자의 제약 조건을 준수하면서 가능한 가장 작은 것으로 선택됩니다.
Martin Ender

3
시리즈의 홀수 요소에 대한 2 가지 평가는 항상 짝수입니다. 누군가에게 유용 할 수 있습니다.
CalculatorFeline

답변:


11

하스켈, 40 바이트

l(a:r)=a:2*a:l[x|x<-r,x/=2*a]
(l[1..]!!)

제로 기반. l남아있는 정수의 게으른 목록에서 시퀀스를 점진적으로 빌드합니다.


7

자바 스크립트 (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.

데모



5

파이썬 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]

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


1
78 바이트에set(...) 대해서는`{* ...}로 응답 할 수 있습니다
Mr. Xcoder

@ Zacharý 당신은 내 의견을 듣고 있었나요? 그렇다면 Python 3 의 집합 {*...}대신을 사용할 수 있습니다 set(...).
Mr. Xcoder

나는 생각없이 의견을 {...for...in...}말하고 몇 분 후에 더 많은 사람들이 될 것임을 깨달았습니다 .
Zacharý

당신은 두 번을 사용하기 때문에 실제로는 4 바이트를 절약 할 수
씨 Xcoder






3

05AB1E , 16 15 14 바이트

1- 색인.
시퀀스에서 홀수 인덱스에있는 요소의 이진 표현이 짝수의 0으로 끝나는 사실을 사용합니다. A003159 .

Lʒb1¡`gÈ}€x¹<è

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

설명

L                 # range [1 ... input]
 ʒ      }         # filter, keep only elements whose
  b               # ... binary representation
   1¡             # ... split at 1's
     `gÈ          # ... ends in an even length run
         €x       # push a doubled copy of each element in place
           ¹<è    # get the element at index (input-1)

3

파이썬 2 , 59 51 49 바이트

f=lambda n,k=2:2/n%-3*(1-k)or f(n+~(k&-k)%-3,k+1)

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

배경

모든 양의 n 정수는 n = 2 o (n) c (n)으로 고유하게 표현 될 수 있습니다 . 여기서 c (n) 은 홀수입니다.

하자 ⟨a N을N> 0 도전 사양에서 순서합니다.

모든 양의 정수 n 에 대해 o (a 2n-1 ) 은 짝수입니다. 이후 O (a 2N ) = O (2A 2N-1 ) = O이 (a 2N-1 ) + (1) ,이 주장에 상당 O (a 2N를 ) 홀수 항상.

클레임이 거짓이라고 가정하고 2m-1 이 시퀀스의 첫 번째 홀수 인덱스가되어 o (a 2m-1 ) 가 홀수라고 가정합니다. 이것은 2m을 시퀀스의 첫 번째 짝수 인덱스로 만들어 o (a 2m-1 ) 이 짝수 임을 유의하십시오 .

O (a 2m-1 ) 홀수 및 0 있도록 짝수 2m-1 로 나누어 2 . 정의에 의하면, 2m-1 은 IS 아직 순서에 표시되지 작은 양의 정수 즉, 2m-1 / 2 출두해야합니다. 하자 k는 의 (제 1) 수의 인덱스 2m-1 / 2 에 .

이후 O (a K ) = O (a 2m-1 / 2) = O (a 2m-1 ) - 1 , 심지어는 minimality 인 N 을 의미 k는 홀수이다. 차례로,이 수단 K + 1 = 2A의 K = A 2m-1 의 정의 모순 2m-1 .

작동 원리

아직 오지 않았다


3

R , 70 69 65 바이트

function(n){for(i in 2*1:n)F[i-1:0]=which(!1:n%in%F)[1]*1:2
F[n]}

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

하나의 인수를 취하는 익명 함수 F기본값 FALSE또는 0너무 알고리즘이 정확하게 어떤 양의 정수가 아직 순서 없음을 평가하는 것이.

알고리즘은 한 쌍의 생성 for(이하 방식으로 루프 i에서 진행 2하는 2n작성자 2)

           which(!1:n%in%l)[1]     # the missing value
                              *1:2 # keep one copy the same and double the next
l[i-1:0]=                         # store into l at the indices i-1 and i


2

펄 6 , 50 바이트

{(1,{@_%2??2*@_[*-1]!!first *∉@_,1..*}...*)[$_]}

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

  • 1, { ... } ... *는 첫 번째 이후의 각 항이 중괄호로 구분 된 코드 블록에 의해 제공되는 지연 생성 무한 시퀀스입니다. 블록이@_ 배열을 배열의 전체 현재 시퀀스를받습니다.
  • 현재 요소 수가 홀수 ( @_ % 2) 이면 짝수 색인 요소를 생성하므로 다음 요소는 지금까지 마지막 요소의 두 배 2 * @_[*-1]입니다.
  • 그렇지 않으면 시퀀스에 아직 나타나지 않은 첫 번째 양의 정수를 얻습니다 first * ∉ @_, 1..*.
  • $_외부 함수에 대한 인수입니다. 함수의 반환 값을 제공하여 무한 시퀀스로 인덱싱합니다.

1

수학, 82 바이트

(s={};a=1;f=#;While[f>0,If[s~FreeQ~a,s~AppendTo~{a,2a}];a++;f--];Flatten[s][[#]])&

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


58 bytes in Mathematica (although I should probably just post a separate answer since the idea is pretty different).
notjagan

Did you copy that from OEIS link?
J42161217

I modified it to fit the task and to be golfed more, but it more or less is the same as the OEIS link.
notjagan

1
@not post a new answer if you want and credit the author
J42161217


1

C# (Visual C# Interactive Compiler), 82 bytes

x=>{int y=1;for(var s="";x>2;x-=2)for(s+=2*y+":";s.Contains(++y+""););return x*y;}

Try it online!

-6 bytes thanks to @ASCIIOnly!


C#8 may be too new to be common on online interpreters for now, added to the fact that csi is a Mono thing so you'd have to wait for Mono to implement it and add it to a stable build (if it hasn't already)
ASCII-only

sadly it isn't easy to check for this in C#
ASCII-only

Use this to start? But yeah, doesn't seem like a straightforward thing. docs.microsoft.com/en-us/dotnet/api/…
dana

1
86? - don't think the :s are needed since it will be the largest number in the list
ASCII-only

Also 2.0 => 2f
dana

0

Clojure, 102 bytes

#(nth(loop[l[0 1 2 3]i %](if(= i 0)l(recur(conj l(*(last l)2)(nth(remove(set l)(range))0))(dec i))))%)

Iterates n times to build up the sequence and returns the nth item, 1-indexed.


0

Ruby, 60 bytes

->n,*a{eval"v+=1while a[v];a[v]=a[2*v]=v+v*n%=2;"*(n/2+v=1)}

0-indexed. We loop n/2+1 times, generating two values each time and storing them by populating an array at their indices. v+v*n%2 gives the output, either v or v*2 depending on the parity of n.


0

Ruby, 49 bytes

->n{*s=t=0;s|[t+=1]==s||s<<t<<t*2until s[n];s[n]}

Start with [0], add pairs to the array until we have at least n+1 elements, then take the n+1th (1-based)

Try it online!


0

JavaScript (ES6), 60 65 bytes

An iterative solution.

n=>eval("for(s={},i=0;n;)s[++i]?0:(s[i+i]=--n)?--n?0:i+i:i")

Less golfed

n=>{
  s = {}; //hashtable for used values
  for(i=0; n; )
  {
    if ( ! s[++i] )
    {
      s[i*2] = 1; // remember i*2 is already used
      if (--n)
        if (--n)
          0;
        else
          result = i*2;
      else
        result = i;
    }
  }
  return result;  
}

Test

F=
n=>eval("for(s={},i=0;n;)s[++i]?0:(s[i+i]=--n)?--n?0:i+i:i")

for (a=1; a < 50; a++)
  console.log(a,F(a))


0

Jelly, 13 12 10 bytes

ḤRọ2ḂĠZFị@

This uses the observation from my Python answer.

Try it online!

How it works

ḤRọ2ḂĠZFị@  Main link. Argument: n

Ḥ           Unhalve; yield 2n.
 R          Range; yield [1, ... , 2n].
  ọ2        Compute the order of 2 in the factorization of each k in [1, ..., 2n].
    Ḃ       Bit; compute the parity of each order.
     G      Group the indices [1, ..., 2n] by the corresponding values.
      Z     Zip/transpose the resulting 2D array, interleaving the indices of 0
            with the indices of 1, as a list of pairs.
       F    Flatten. This yields a prefix of the sequence.
        ị@  Take the item at index n.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.