โดยประมาณที่ห้าที่สมบูรณ์แบบ


10

เริ่มต้นที่ 1-TET ให้อารมณ์ที่เท่าเทียมกันซึ่งมีการประมาณที่ดีกว่าและดีกว่าของห้าที่สมบูรณ์แบบ (เพียงอัตราส่วน 3/2) ( ลำดับ OEIS A060528 )

คำอธิบายอย่างเป็นทางการของลำดับคัดลอกมาจาก OEIS:

รายการของอุณหภูมิเท่ากัน (ส่วนเท่า ๆ กันของระดับแปดเสียง) ซึ่งระดับขั้นที่ใกล้ที่สุดอยู่ใกล้และใกล้เคียงกับอัตราส่วนของสองโทนของความสามัคคีทางดนตรี: ที่สมบูรณ์แบบที่ 4, 4/3 และสมบูรณ์แบบที่ 5, 3/2

โปรดทราบว่าด้วยความสมมาตรความสมบูรณ์แบบที่สี่ไม่สำคัญ

สมมติว่าเรารู้ว่า 3 อยู่ในลำดับ ความถี่ใน 3-TET คือ:

2^0, 2^⅓, 2^⅔

ที่ไหน2^⅔เป็นที่ใกล้เคียงลอการิทึม3/2ประมาณของ

เป็น 4 ในลำดับหรือไม่ ความถี่ใน 4-TET คือ:

2^0, 2^¼, 2^½, 2^¾

ที่ไหนเป็นประมาณใกล้เคียงที่สุดของ2^½ 3/2สิ่งนี้ไม่ดีไปกว่า2^⅔ดังนั้น 4 จึงไม่อยู่ในลำดับ

ด้วยวิธีที่คล้ายกันเรายืนยันว่า 5 อยู่ในลำดับและอื่น ๆ

เมื่อกำหนดจำนวนเต็มnเป็นอินพุตเอาต์พุตต้องเป็นตัวเลข N แรกของลำดับตามลำดับ ตัวอย่างเช่นเมื่อn = 7ผลลัพธ์ควรเป็น:

1 2 3 5 7 12 29

คำอธิบายลำดับโดย xnor

ค่าคงที่ไม่มีเหตุผล log2(3)1.5849625007211563 สามารถประมาณโดยลำดับของเศษส่วนที่มีเหตุผล

21,32,53,85,117,1912,4629,

เศษส่วนจะรวมอยู่ในลำดับหากเป็นเศษส่วนที่ใกล้เคียงที่สุดด้วยระยะทางสัมบูรณ์ |pqlog2(3) |นั่นคือใกล้กว่าเศษส่วนอื่น ๆ ที่มีตัวหารที่เล็กกว่าหรือเท่ากัน

เป้าหมายของคุณคือการส่งออกครั้งแรก nส่วนตามลำดับ นี่คือลำดับA060528 ( ตาราง ) ตัวเลข (ไม่จำเป็น) มอบให้โดยA254351 ( ตาราง )

กฎ:

  1. อย่านำเข้าลำดับ A060528 โดยตรง
  2. รูปแบบไม่สำคัญตราบใดที่ตัวเลขสามารถแยกแยะได้ ในตัวอย่างด้านบนเอาต์พุตยังสามารถเป็น:

    [1,2,3,5,7,12,29]

  3. เช่นนี้เป็นรหัสกอล์ฟรหัสที่สั้นที่สุดเป็นไบต์ชนะ


5
สวัสดีและยินดีต้อนรับสู่ Code Golf SE! เราต้องการให้ความท้าทายทั้งหมดมีอยู่ในตัวเองดังนั้นคำอธิบายของลำดับจะช่วยได้มาก
AdmBorkBork

5
ฉันสับสนกับคำอธิบายจาก OEIS มันกล่าวถึงที่สมบูรณ์แบบที่ 4 เช่นกัน (อัตราส่วน 4/3) แต่ความท้าทายนั้นเกี่ยวกับที่สมบูรณ์แบบที่ 5 (อัตราส่วน 3/2) ฉันคิดว่ามันยังต้องการคำอธิบายว่าค่าลำดับเป็นตัวหารของการประมาณแบบมีเหตุผล
xnor

5
ฉันชอบความท้าทาย แต่ฉันพบว่าสิ่งที่เพิ่มลงในคำอธิบายยังทำให้เกิดความสับสนไม่รู้เกี่ยวกับดนตรีมากนัก ตัวอย่างเช่นฉันไม่รู้ว่า 1-TET หรือ 4-TET คืออะไรและดูเหมือนว่าไม่มีอะไรปรากฏบน Google ฉันจะลองเขียนคำอธิบายว่าฉันอธิบายลำดับนี้อย่างไร
xnor

3
@DannyuNDos Ah ใช่อารมณ์เท่าเทียมกัน 12 โทน นั่นคือเครื่องดนตรีโปรดของฉัน
Jo King

2
@DannyuNDos ขอบคุณ ดังนั้นการเปรียบเทียบอยู่ระหว่าง 1/2 และ log2 (1.5) ไม่ใช่ระหว่าง 2 ^ (1/2) และ 1.5 ควรชัดเจนในข้อความ
Luis Mendo

คำตอบ:


5

05AB1E , 19 18 ไบต์

µ¯ßNLN/3.²<αßDˆ›D–

ลองออนไลน์!

µ                      # repeat until counter == input
 ¯                     #  push the global array
  ß                    #  get the minimum (let's call it M)
   N                   #  1-based iteration count
    L                  #  range 1..N
     N/                #  divide each by N
       3.²             #  log2(3)
          <            #  -1
           α           #  absolute difference with each element of the range
            ß          #  get the minimum
             Dˆ        #  add a copy to the global array
               ›       #  is M strictly greater than this new minimum?
                D–     #  if true, print N
                       #  implicit: if true, add 1 to the counter

1
คำตอบที่ดี แต่สิ่งที่ฉันสงสัยในตอนนี้คือสาเหตุที่ while-loop มีดัชนี 1 ตัว .. : S
Kevin Cruijssen

4

ภาษา Wolfram (Mathematica) , 62 60 ไบต์

Denominator@NestList[Rationalize[r=Log2@3,Abs[#-r]]&,2,#-1]&

ลองออนไลน์!


ความแม่นยำเท่าไหร่
Dannyu NDos

@DannyuNDos ฟังก์ชั่นนี้ใช้ค่าที่แน่นอนดังนั้นการคำนวณสามารถทำได้เพื่อความแม่นยำโดยพลการ
attinat

คุณชนะการท้าทาย
Dannyu NDos

5
@DannyuNDos ทำไมยอมรับคำตอบอย่างรวดเร็ว? นอกจากนี้ยังเป็นการดีกว่าที่จะไม่ยอมรับคำตอบเลย ..
attinat

เกี่ยวกับข้อผิดพลาดในการใช้ภาษาอื่น ๆ ฉันพบว่าฉันต้องการนำเสนอวิธีการอื่นในการให้คะแนนคะแนน ดังนั้นจงยึดมั่น
Dannyu NDos


2

Python 2 , 92 ไบต์

E=k=input()
n=0
while k:
 n+=1;e=abs((3.169925001442312*n-1)%2-1)/n
 if e<E:print n;E=e;k-=1

ลองออนไลน์!

ใช้ค่าคงที่3.169925001442312สำหรับ2log2(3). 2 * numpy.log2(3)ผมไม่แน่ใจว่ากี่หลักของความถูกต้องจะต้องเนื่องจากความไม่ถูกต้องจะแบ่งลำดับในที่สุดดังนั้นผมจึงใช้ความแม่นยำลอยเต็มรูปแบบของ


1
มีสองข้อกำหนดเพิ่มเติมหลังจาก 665: ..., 665, (1995), (4655), 8286, ... ลองออนไลน์!
Οurous

@ ใช่แล้วนั่นเป็นเรื่องที่หลีกเลี่ยงไม่ได้ไม่ช้าก็เร็วสำหรับภาษาใด ๆ ที่ไม่มีความแม่นยำอย่างไม่มีที่สิ้นสุดแม้ว่าฉันจะแปลกใจที่มันโผล่ขึ้นมาเร็วขนาด 32 บิตที่ Python ใช้ ฉันจะรอให้นักเขียนที่ท้าทายอธิบายให้ชัดเจนว่าต้องใช้คำตอบมากแค่ไหน
xnor

จะใช้อักขระน้อยกว่า2 * numpy.log2(3)แทนที่จะใช้ตัวสะกดเต็มหรือไม่ (หรือดียิ่งขึ้นnumpy.log2(9))
JDL

@JDL ที่จะต้องมีรหัสนี้และfrom numpy import* log2(9)
Jonathan Allan

อานั่นคือสิ่งที่ฉันได้รับโดยสมมติว่า python ทำงานอย่าง R และคุณสามารถเขียนได้package::functionโดยไม่ต้องโหลดpackageก่อน!
JDL


2

MATL , 27 25 ไบต์

1`@:@/Q3Zl-|X<hY<tdzG-}df

ลองออนไลน์!

คำอธิบาย

1       % Push 1. This initiallizes the vector of distances
  `     % Do...while
  @:    %   Range [1, 2, ..., k], where k is the iteration index, staring at 1
  @/    %   Divide by k, element-wise. Gives [1/k, 2/k, ..., 1]
  Q     %   Add 1, element-wise. Gives [(k+1/k, (k+2)/k, ..., 2]
  3Zl   %   Push log2(3)
  -|    %   Absolute difference, element-wise
  X<    %   Minimum
  h     %   Concatenate with vector of previous distances
  Y<    %   Cumulative minimum
  t     %   Duplicate
  dz    %   Consecutive differences, number of nonzeros. This tells how many
        %   times the cumulative minimum has decreased
  G-    %   Subtract input n. This is the loop condition. 0 means we are done
}       % Finally (execute on loop exit)
  d     %   Consecutive differences (of the vector of cumulative differences)
  f     %   Indices of nonzeros. This is the final result
        % End. A new iteration is executed if the top of the stack is nonzero
        % Implicit display

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