ยังไม่ได้ใช้คู่


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


ความจริงที่ว่าเลขคี่ของลำดับนั้นจะเป็นจำนวนเต็มบวกที่น้อยที่สุดซึ่งยังไม่ปรากฏในลำดับ ไม่เกี่ยวข้องใช่ไหม
อดัม

1
นอกจากนี้สิ่งที่คู่ ?
อดัม

@ Adámไม่มีกรณีนี้ ฉันไม่แน่ใจว่าสิ่งที่ให้ความประทับใจแก่คุณหรือไม่
ข้าวสาลี Wizard

1
@ Adámอีกวิธีหนึ่งในการคิดลำดับคือมันประกอบด้วยการตัดแบ่งคู่(n,2n)และแต่ละหมายเลขปรากฏเพียงครั้งเดียว แต่ละคู่ถูกเลือกให้มีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ในขณะที่ยึดมั่นกับข้อ จำกัด หลัง
Martin Ender

3
การประเมินค่า 2 adic ขององค์ประกอบคี่ของซีรีส์เสมอแม้กระทั่ง อาจเป็นประโยชน์กับใครบางคน
CalculatorFeline

คำตอบ:


11

Haskell, 40 ไบต์

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

Zero-based lสร้างลำดับเพิ่มขึ้นจากรายการจำนวนเต็มที่เหลือขี้เกียจ


7

JavaScript (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 .
  • ค่าทั้งหมดที่พบก่อนหน้านี้ในตารางการค้นหา

ภายในที่เรากำลังใช้ดัชนี 0 ตามฉัน พฤติกรรมที่แปลกและแม้กระทั่งจะคว่ำ:

  • 2 * bตำแหน่งที่แปลกค่าถัดไปก็คือ

  • ที่ตำแหน่งคู่เราใช้ฟังก์ชันเรียกซ้ำg ()และตารางค้นหาaเพื่อระบุค่าการจับคู่ที่เล็กที่สุด:

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

บันทึกไม่กี่ไบต์, ฉันจะเริ่มต้นที่จะมากกว่า{} 0สิ่งนี้บังคับให้เราใช้:

  • i^nเพื่อเปรียบเทียบผมกับnเพราะ({}) ^ n === nในขณะที่ประเมิน({}) - nNaN
  • -~iเพื่อเพิ่มiเพราะ({}) + 1จะสร้างสตริง

การสาธิต



5

Python 3 , 80 72 69 ไบต์

-7 ไบต์ขอบคุณMr. Xcoder !

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

ลองออนไลน์!


1
คุณสามารถ repace set(...)ด้วย `{* ... } เป็น78 bytes
Mr. Xcoder

@ Zacharýคุณอ้างถึงความคิดเห็นของฉันหรือไม่? ถ้าเป็นเช่นนั้นชุดใน Python 3สามารถ{*...}แทนset(...)ได้
Mr. Xcoder

ฉันแสดงความคิดเห็นโดยไม่คิดฉันรู้ว่าอีกไม่นานหลังจากนั้น{...for...in...}จะเป็นลาก่อน
Zacharý

ที่จริงแล้วมันจะประหยัด 4 ไบต์เพราะคุณใช้สองครั้ง
Mr. Xcoder






3

05AB1E , 16 15 14 ไบต์

1 การจัดทำดัชนี
ใช้ความจริงที่ว่าฐานเป็นตัวแทนขององค์ประกอบที่ดัชนีแปลกในลำดับที่จะสิ้นสุดลงในจำนวนแม้แต่ของ zeroes: 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

Python 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 nn> 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 (ก2m-1 )เป็นเลขคี่และ0คือแม้ดังนั้น2m-1คือหารด้วย2 ตามคำนิยาม 2m-1เป็นจำนวนเต็มบวกที่เล็กที่สุดยังไม่ปรากฏในลำดับหมายความว่า2m-1 /2จะต้องปรากฏออกมาก่อน ให้kเป็น (ตอนแรก) ดัชนีของ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

Perl 6 , 50 ไบต์

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

ลองออนไลน์!

  • 1, { ... } ... *เป็นลำดับอนันต์ที่สร้างขึ้นอย่างเกียจคร้านซึ่งแต่ละเทอมหลังจากคำแรกถูกจัดเตรียมโดยบล็อกโค้ด brace-delimited ตั้งแต่บล็อกอ้างอิง@_อาร์เรย์มันจะได้รับลำดับปัจจุบันทั้งหมดในอาร์เรย์นั้น
  • หากจำนวนองค์ประกอบปัจจุบันเป็นเลขคี่ ( @_ % 2) เราจะสร้างองค์ประกอบที่มีการจัดทำดัชนี2 * @_[*-1]สม่ำเสมอดังนั้นองค์ประกอบถัดไปจะเพิ่มเป็นสองเท่าขององค์ประกอบสุดท้ายที่เรามีอยู่จนถึงปัจจุบัน:
  • first * ∉ @_, 1..*มิฉะนั้นเราจะได้รับจำนวนเต็มบวกครั้งแรกที่ยังไม่ปรากฏในลำดับ:
  • $_เป็นอาร์กิวเมนต์ของฟังก์ชั่นด้านนอก มันจัดทำดัชนีในลำดับอนันต์โดยให้ค่าส่งคืนของฟังก์ชัน

1

Mathematica, 82 ไบต์

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

ลองออนไลน์!


58 bytesใน Mathematica (แม้ว่าฉันควรจะโพสต์คำตอบแยกต่างหากเนื่องจากความคิดแตกต่างกันมาก)
notjagan

คุณคัดลอกมาจากลิงค์ OEIS หรือไม่
J42161217

ฉันแก้ไขมันเพื่อให้เหมาะกับงานและเพื่อตีกอล์ฟให้มากขึ้น แต่มันมากหรือน้อยก็เหมือนกับลิงค์ OEIS
notjagan

1
@ ไม่โพสต์คำตอบใหม่หากคุณต้องการและให้เครดิตผู้เขียน
J42161217


1

C # (Visual C # Interactive Compiler) , 82 ไบต์

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

ลองออนไลน์!

-6 ไบต์ขอบคุณ @ASCIIOnly!


C # 8 อาจใหม่เกินกว่าที่จะพบได้ทั่วไปในล่ามออนไลน์ในตอนนี้เพิ่มไปจากข้อเท็จจริงที่ว่า csi เป็นสิ่งโมโนดังนั้นคุณต้องรอให้โมโนนำไปใช้และเพิ่มไปยังโครงสร้างที่มั่นคง (ถ้ายังไม่มี ' t แล้ว)
ASCII เท่านั้น

เศร้ามันไม่ใช่เรื่องง่ายในการตรวจสอบนี้ใน C #
ASCII เท่านั้น

ใช้สิ่งนี้เพื่อเริ่ม? แต่ใช่ดูเหมือนจะไม่ตรงไปตรงมา docs.microsoft.com/en-us/dotnet/api/…
dana

1
86? - อย่าคิดว่า:จำเป็นต้องใช้เพราะมันจะเป็นจำนวนที่มากที่สุดในรายการ
ASCII เท่านั้น

ยัง2.0=>2f
ดานา

0

Clojure, 102 ไบต์

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

ทำซ้ำnครั้งเพื่อสร้างลำดับและส่งคืนnรายการ th ซึ่งมีการจัดทำดัชนี 1 รายการ


0

Ruby, 60 ไบต์

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

0 การจัดทำดัชนี เราวนn/2+1ครั้งสร้างค่าสองค่าในแต่ละครั้งและเก็บค่าโดยการเติมอาร์เรย์ที่ดัชนี v+v*n%2จะช่วยให้การส่งออกทั้งvหรือขึ้นอยู่กับความเท่าเทียมกันของv*2n


0

Ruby , 49 ไบต์

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

เริ่มต้นด้วย [0] เพิ่มคู่เข้ากับอาร์เรย์จนกว่าเราจะมีองค์ประกอบอย่างน้อย n + 1 จากนั้นจึงใช้ n + 1th (อิง 1)

ลองออนไลน์!


0

JavaScript (ES6), 60 65ไบต์

ทางออกวนซ้ำ

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

น้อย 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;  
}

ทดสอบ

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

เยลลี่ , 13 12 10 ไบต์

ḤRọ2ḂĠZFị@

สิ่งนี้ใช้การสังเกตจากคำตอบของ Pythonคำตอบของฉันหลาม

ลองออนไลน์!

มันทำงานอย่างไร

Ḥ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.