รายการซ้ำของRecamán


14

ลำดับของRecamánถูกกำหนดดังนี้:

an={0ถ้า n = 0an-1-nถ้า an-1-n>0 และไม่ได้อยู่ในลำดับan-1+nมิฉะนั้น

หรือในรหัสหลอก:

a(0) = 0,
if (a(n - 1) - n) > 0 and it is not 
   already included in the sequence,
     a(n) = a(n - 1) - n 
else 
     a(n) = a(n - 1) + n. 

ตัวเลขแรกคือ ( OEIS A005132 ):

0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9, 24, 8, 25, 43, 62, 42, 63, 41, 18, 42

หากคุณศึกษาลำดับนี้คุณจะสังเกตเห็นว่ามีรายการที่ซ้ำกันเช่นa(20) = a(24) = 42(ดัชนี 0) เราจะโทรหาหมายเลขที่ซ้ำกันหากมีหมายเลขที่เหมือนกันอย่างน้อยหนึ่งหมายเลขต่อหน้าหมายเลขนั้น


ท้าทาย:

ใช้การป้อนข้อมูลจำนวนเต็มkและเอาท์พุททั้งสองคนแรกที่kตัวเลขที่ซ้ำกันในลำดับที่พวกเขาจะพบว่าเป็นที่ซ้ำกันในลำดับRecamánหรือเพียงk 'จำนวนวัน

หมายเลขที่ซ้ำกันครั้งแรกนี้คือ:

42, 43, 78, 79, 153, 154, 155, 156, 157, 152, 265, 261, 262, 135, 136, 269, 453, 454, 257, 258, 259, 260, 261, 262

สิ่งที่ควรทราบ:

  • A (n)ไม่นับว่าซ้ำกันถ้าไม่มีตัวเลขที่เหมือนกันในA (0) ... A (n-1)แม้ว่าA (n + m) == A (n)
  • 42 จะอยู่ก่อน 43 เนื่องจากมีการทำสำเนาเกิดขึ้นก่อนที่จะซ้ำซ้อน 43
  • ไม่เรียงลำดับ
  • มีองค์ประกอบที่ซ้ำกันในลำดับนี้ด้วย ตัวอย่างเช่นตัวเลขที่ 12 และ 23 เป็นทั้ง262 (ดัชนี 0)

กรณีทดสอบ (ดัชนี 0)

k      Output
    0      42
    9     152
   12     262
   23     262
  944    5197
  945   10023
10000   62114

นี่คือดังนั้นรหัสที่สั้นที่สุดในแต่ละภาษาชนะ!

คำอธิบายได้รับการสนับสนุน!



ทำไมไม่43เอาท์พุทก่อน42? มันจะปรากฏขึ้นครั้งแรกในลำดับของRecamán คุณหมายถึงผลลัพธ์ก่อนเป็นสิ่งแรกที่พบว่าซ้ำกันหรือไม่
Luis Mendo เมื่อ

1
43424243

ฉันยังได้เห็นคำถามทางคณิตศาสตร์ที่ได้รับความนิยมเมื่อเร็ว ๆ นี้: P
orlp

@ หรือไม่ huh? คุณสามารถลิงค์ไปได้หรือไม่ ฉันไม่ได้เห็นมัน ...
Stewie Griffin

คำตอบ:


5

ภาษา Wolfram (Mathematica) , 88 85 76 ไบต์

(For[i=k=j=p=0,k<#,i~FreeQ~p||k++,i=i|p;p+=If[p>++j&&FreeQ[i,p-j],-j,j]];p)&

ลองออนไลน์!

1 การจัดทำดัชนี

คำอธิบาย

For[

For ห่วง

i=k=j=p=0

i={a1,a2,...}kj=np=an-1

k<#

ทำซ้ำในขณะที่kน้อยกว่าอินพุท

i=i|p

ผนวกpกับการiใช้หัวAlternatives(รุ่นนักกอล์ฟListในกรณีนี้)

p+=If[p>++j&&FreeQ[i,p-j],-j,j]

jpjan-1>np-jian-1-np-jpj

i~FreeQ~p||k++

แต่ละซ้ำเพิ่มขึ้นkถ้าpไม่ได้อยู่ในi(คน||(= or) สั้นวงจรอื่น ๆ )

... ;p

pกลับ





2

JavaScript (ES6), 66 59 ไบต์

ส่งคืนคำศัพท์N-th , 0-indexed

i=>(g=x=>!g[x+=x>n&!g[x-n]?-n:n]||i--?g(g[n++,x]=x):x)(n=0)

ลองออนไลน์!

อย่างไร?

เราใช้g ()เป็นฟังก์ชั่นเรียกซ้ำหลักของเราและเป็นวัตถุในการติดตามรายการที่ซ้ำกัน

i => (                    // given i
  g = x =>                // g = recursive function and generic object
    !g[x +=               // update x:
      x > n & !g[x - n] ? //   if x is greater than n and x - n was not visited so far:
        -n                //     subtract n from x
      :                   //   else:
        n                 //     add n to x
    ]                     // if x is not a duplicate
    || i-- ?              // or x is a duplicate but not the one we're looking for:
      g(g[n++, x] = x)    //   increment n, mark x as visited and do a recursive call
    :                     // else:
      x                   //   stop recursion and return x
)(n = 0)                  // initial call to g() with n = x = 0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.