Các cặp chưa sử dụng


21

Hãy xác định một chuỗi các số nguyên dương. Chúng tôi sẽ xác định chuỗi trên các số chẵn sẽ gấp đôi số hạng trước đó. Các chỉ số lẻ của chuỗi sẽ là số nguyên dương nhỏ nhất chưa xuất hiện trong chuỗi.

Dưới đây là các điều khoản cặp vợ chồng đầu tiên.

1,2,3,6,4,8,5,10,7,14,9,18,11,22,12,24,13,26,15,30

Bạn cũng có thể coi đây là danh sách các cặp được ghép (n, 2n) trong đó n là số nguyên dương ít được sử dụng nhất cho đến nay.

Bài tập

Cho một số n là đầu vào tính n thứ trong chuỗi này.

Đây là vì vậy bạn nên cố gắng giảm thiểu kích thước của mã nguồn như được đo bằng byte.

OEIS A036552


Thực tế là các chỉ số lẻ của chuỗi sẽ là số nguyên dương nhỏ nhất chưa xuất hiện trong chuỗi. là không liên quan, phải không?
Adám

1
Còn nữa, cặp đôi nào?
Adám

@ Adám Không, đây không phải là trường hợp. Tôi không chắc điều gì mang lại cho bạn ấn tượng đó có lẽ tôi đã nói từ này kém.
Phù thủy lúa mì

1
@ Adám một cách khác để nghĩ về chuỗi là nó bao gồm các cặp được nối (n,2n)và mỗi số chỉ xuất hiện một lần. Mỗi cặp được chọn là nhỏ nhất có thể trong khi tuân thủ các ràng buộc sau.
Martin Ender

3
Giá trị 2-adic của các yếu tố kỳ lạ của loạt luôn luôn là chẵn. Có thể hữu ích cho ai đó.
Máy

Câu trả lời:


11

Haskell, 40 byte

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

Không dựa trên. ltăng dần xây dựng chuỗi từ một danh sách lười biếng của các số nguyên còn lại.


7

JavaScript (ES6), 92 82 69 67 65 byte

n=>(F=i=>i^n?F(a[b=i&1?2*b:(g=k=>a[k]?g(k+1):k)(1)]=-~i):b)(a={})

Làm sao?

Chúng tôi theo dõi:

  • Giá trị được chèn cuối cùng b .
  • Tất cả các giá trị gặp phải trước đây trong bảng tra cứu a .

Trong nội bộ, chúng tôi đang sử dụng chỉ số dựa trên 0 i . Do đó, các hành vi kỳ quặc và thậm chí bị đảo ngược:

  • Tại các vị trí lẻ, giá trị tiếp theo chỉ đơn giản là 2 * b.

  • Tại các vị trí chẵn, chúng tôi sử dụng hàm đệ quy g () và bảng tra cứu a để xác định giá trị khớp nhỏ nhất:

    (g = k => a[k] ? g(k + 1) : k)(1)

Để lưu một vài byte, tôi được khởi tạo để{} thay vì 0. Điều này bắt buộc chúng tôi sử dụng:

  • i^nđể so sánh tôi với n({}) ^ n === n trong khi ({}) - nđánh giá NaN.
  • -~iđể tăng tôi , vì ({}) + 1sẽ tạo ra một chuỗi.

Bản giới thiệu



5

Python 3 , 80 72 69 byte

-7 byte nhờ ông Xcoder !

f=lambda n:n and[f(n-1)*2,min({*range(n+1)}-{*map(f,range(n))})][n%2]

Hãy thử trực tuyến!


1
Bạn có thể lặp lại set(...)với `{* ...} cho 78 byte
Ông Xcoder

@ Zacharý Bạn có muốn nhận xét của tôi không? Nếu vậy, một bộ trong Python 3 có thể {*...}thay thế set(...).
Ông Xcoder

Tôi đã bình luận mà không suy nghĩ, tôi nhận ra một vài phút sau đó {...for...in...}sẽ tạm biệt nhiều hơn.
Zacharý

Trên thực tế, nó sẽ tiết kiệm được 4 byte, bởi vì bạn sử dụng nó hai lần
Ông Xcoder





3

PHP, 56 byte

while($$n=$i++<$argn)for($n*=2;$i&$$k&&$n=++$k;);echo$n;

PHP, 75 72 byte

for($a=range(1,$argn);$i++<$argn;)$a[~-$n=$i&1?min($a):2*$n]=INF;echo$n;

Dùng thử trực tuyến


3

05AB1E , 16 15 14 byte

1 chỉ mục.
Sử dụng thực tế là biểu diễn nhị phân của các phần tử tại các chỉ số lẻ trong chuỗi kết thúc bằng số 0 chẵn : A003159 .

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

Hãy thử trực tuyến!

Giải trình

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

Python 2 , 59 51 49 byte

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

Hãy thử trực tuyến!

Lý lịch

Mọi số nguyên n dương có thể được biểu thị duy nhất là n = 2 o (n) c (n) , trong đó c (n) là số lẻ.

Hãy ⟨a nn> 0 là chuỗi từ thách thức spec.

Chúng tôi khẳng định rằng, đối với tất cả các số nguyên dương n , o (a 2n-1 ) là chẵn. Vì o (a 2n ) = o (2a 2n - 1 ) = o (a 2n - 1 ) + 1 , điều này tương đương với việc tuyên bố rằng o (a 2n ) luôn là số lẻ.

Giả sử xác nhận là sai và đặt 2m-1 là chỉ số lẻ đầu tiên của chuỗi sao cho o (a 2m-1 ) là số lẻ. Lưu ý rằng điều này làm cho 2m là chỉ số chẵn đầu tiên của chuỗi sao cho o (a 2m-1 ) là chẵn.

o (một 2m-1 ) là số lẻ và 0 là thậm chí, vì vậy một 2m-1 chia hết cho 2 . Theo định nghĩa, một 2m-1số nguyên dương nhỏ nhất chưa xuất hiện trong chuỗi , có nghĩa là một 2m-1 /2 phải đã xuất hiện trước đó. Hãy k là (đầu tiên) chỉ số của một 2m-1 /2 trong một .

o (a k ) = o (a 2m - 1/2) = o (a 2m - 1 ) - 1 là chẵn, nên tối thiểu của n ngụ ý rằng k là số lẻ. Đổi lại, các phương tiện này mà một k + 1 = 2a k = a 2m-1 , mâu thuẫn với định nghĩa của một 2m-1 .

Làm thế nào nó hoạt động

chưa đến


3

R , 70 69 65 byte

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

Hãy thử trực tuyến!

Một hàm ẩn danh có một đối số. Fmặc định FALSEhoặc 0để thuật toán đánh giá chính xác rằng chưa có số nguyên dương nào trong chuỗi.

Thuật toán tạo các cặp trong một forvòng lặp theo cách sau ( iđi từ 2đến 2nbởi 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

Perl 6 , 50 byte

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

Hãy thử trực tuyến!

  • 1, { ... } ... *là một chuỗi vô hạn được tạo ra một cách lười biếng trong đó mỗi thuật ngữ sau lần đầu tiên được cung cấp bởi khối mã được phân tách bằng dấu ngoặc. Vì khối tham chiếu @_mảng, nó nhận được toàn bộ chuỗi hiện tại trong mảng đó.
  • Nếu số phần tử hiện tại là số lẻ ( @_ % 2), thì chúng ta đang tạo một phần tử được lập chỉ mục chẵn, do đó phần tử tiếp theo gấp đôi phần tử cuối cùng mà chúng ta có cho đến nay : 2 * @_[*-1].
  • Mặt khác, chúng ta nhận được số nguyên dương đầu tiên chưa xuất hiện trong chuỗi : first * ∉ @_, 1..*.
  • $_là đối số cho hàm ngoài. Nó lập chỉ mục vào chuỗi vô hạn, đưa ra giá trị trả về của hàm.

1

Toán học, 82 byte

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

Hãy thử trực tuyến!


58 byte trong Mathicala (mặc dù tôi có lẽ chỉ nên đăng một câu trả lời riêng vì ý tưởng này khá khác nhau).
notjagan

Bạn đã sao chép từ liên kết OEIS?
J42161217

Tôi đã sửa đổi nó để phù hợp với nhiệm vụ và được chơi gôn nhiều hơn, nhưng ít nhiều nó cũng giống như liên kết OEIS.
notjagan

1
@không đăng câu trả lời mới nếu bạn muốn và ghi có tác giả
J42161217


1

C # (Trình biên dịch tương tác Visual C #) , 82 byte

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

Hãy thử trực tuyến!

-6 byte nhờ @ASCIIOnly!


Hiện tại, C # 8 có thể còn quá mới đối với các phiên dịch viên trực tuyến, thêm vào thực tế rằng csi là một thứ Mono nên bạn phải chờ Mono triển khai và thêm nó vào một bản dựng ổn định (nếu nó không ' t đã)
ASCII - chỉ

thật đáng buồn khi không dễ dàng kiểm tra điều này trong C #
ASCII - chỉ

Sử dụng cái này để bắt đầu? Nhưng vâng, dường như không phải là một điều đơn giản. docs.microsoft.com/en-us/dotnet/api/ từ
dana

1
86? - đừng nghĩ số :s là cần thiết vì nó sẽ là số lớn nhất trong danh sách
ASCII - chỉ

Ngoài ra 2.0=>2f
dana

0

Clojure, 102 byte

#(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))))%)

Lặp lại nthời gian để xây dựng chuỗi và trả về nmục thứ 1, được lập chỉ mục 1.


0

Ruby, 60 byte

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

Chỉ số 0. Chúng tôi lặp lại n/2+1thời gian, tạo hai giá trị mỗi lần và lưu trữ chúng bằng cách điền vào một mảng tại các chỉ mục của chúng. v+v*n%2đưa ra đầu ra, vhoặc v*2tùy thuộc vào tính chẵn lẻ của n.


0

Ruby , 49 byte

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

Bắt đầu với [0], thêm các cặp vào mảng cho đến khi chúng ta có ít nhất n + 1 phần tử, sau đó lấy n + 1th (dựa trên 1)

Hãy thử trực tuyến!


0

JavaScript (ES6), 60 65 byte

Một giải pháp lặp đi lặp lại.

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

Ít chơi gôn

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;  
}

Kiểm tra

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

Thạch , 13 12 10 byte

ḤRọ2ḂĠZFị@

Điều này sử dụng sự quan sát từ câu trả lời Python của tôi .

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Ḥ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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.