Xấp xỉ thứ năm hoàn hảo


10

Bắt đầu từ 1-TET, đưa ra các tính khí bằng nhau có xấp xỉ tốt hơn và tốt hơn so với thứ năm hoàn hảo (chỉ tỷ lệ 3/2). ( Trình tự OEIS A060528 )

Mô tả chính thức của chuỗi, được sao chép từ OEIS:

Một danh sách các tính khí bằng nhau (các phân chia bằng nhau của quãng tám) có các bước tỷ lệ gần nhất gần hơn và gần hơn với các tỷ lệ của hai giai điệu hòa hợp âm nhạc: thứ 4, 4/3 hoàn hảo và bổ sung cho thứ 5, 3/2 hoàn hảo.

Lưu ý rằng bằng cách đối xứng, thứ tư hoàn hảo không thành vấn đề.

Hãy nói rằng chúng ta biết rằng 3 là trong chuỗi. Các tần số trong 3-TET là:

2^0, 2^⅓, 2^⅔

Trường hợp 2^⅔gần đúng logarit gần nhất của 3/2.

Là 4 trong chuỗi? Các tần số trong 4-TET là:

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

Trường hợp 2^½gần đúng nhất của 3/2. Điều này không tốt hơn 2^⅔, vì vậy 4 không nằm trong chuỗi.

Bằng phương pháp tương tự, chúng tôi xác nhận rằng 5 nằm trong chuỗi, v.v.

Khi được cung cấp một số nguyên nlàm đầu vào, đầu ra phải là N số đầu tiên của chuỗi theo thứ tự. Ví dụ: khi nào n = 7, đầu ra phải là:

1 2 3 5 7 12 29

Mô tả trình tự bởi xnor

Không hợp lý thường xuyên đăng nhập2(3)1.5849625007211563Giáo dục có thể xấp xỉ bằng một chuỗi các phân hợp lý

21,32,53,số 85,117,1912,4629,Giáo dục

Một phần được bao gồm trong chuỗi nếu đó là phần gần nhất mới theo khoảng cách tuyệt đối |pq-đăng nhập2(3) |, nghĩa là gần hơn bất kỳ phân số nào khác có mẫu số nhỏ hơn hoặc bằng nhau.

Mục tiêu của bạn là xuất ra mẫu số n đầu tiên theo thứ tự. Đây là chuỗi A060528 ( bảng ). Các tử số (không bắt buộc) được đưa ra bởi A254351 ( bảng )

Quy tắc:

  1. Không nhập trực tiếp chuỗi A060528.
  2. Định dạng không quan trọng miễn là các số có thể phân biệt được. Trong ví dụ trên, đầu ra cũng có thể là:

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

  3. Vì đây là môn đánh gôn, mã ngắn nhất tính bằng byte sẽ thắng.


5
Xin chào và chào mừng đến với Code Golf SE! Chúng tôi yêu cầu tất cả các thử thách phải khép kín, vì vậy một mô tả ở đây về trình tự sẽ là một trợ giúp tuyệt vời.
admBorkBork

5
Tôi bối rối trước mô tả từ OEIS. Nó cũng đề cập đến thứ 4 hoàn hảo (tỷ lệ 4/3), nhưng thách thức là về thứ 5 hoàn hảo (tỷ lệ 3/2). Tôi nghĩ rằng nó cũng cần giải thích rằng các giá trị chuỗi là mẫu số của các xấp xỉ hợp lý.
xnor

5
Tôi thích thử thách, nhưng tôi thấy những thứ được thêm vào mô tả vẫn khó hiểu, không biết nhiều về âm nhạc. Chẳng hạn, tôi không biết 1-TET hay 4-TET là gì và dường như không có gì hiển thị trên Google. Tôi sẽ thử viết một lời giải thích về cách tôi mô tả trình tự này.
xnor

3
@DannyuNDos À đúng rồi, khí chất bình đẳng 12 tông. Đó là nhạc cụ yêu thích của tôi
Jo King

2
@DannyuNDos Cảm ơn. Vì vậy, so sánh là giữa 1/2 và log2 (1.5), không phải giữa 2 ^ (1/2) và 1.5. Điều đó cần được làm rõ hơn trong văn bản
Luis Mendo

Câu trả lời:


5

05AB1E , 19 18 byte

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

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

µ                      # 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
Câu trả lời hay, nhưng tất cả tôi đang tự hỏi ngay bây giờ là tại sao vòng lặp while có các chỉ số dựa trên 1 ..: S
Kevin Cruijssen

4

Ngôn ngữ Wolfram (Mathicala) , 62 60 byte

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

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


Có bao nhiêu độ chính xác?
Danielu NDos

@DannyuNDos Hàm này sử dụng các giá trị chính xác, do đó việc tính toán có thể được thực hiện với độ chính xác tùy ý.
attinat

Bạn chiến thắng thử thách.
Danielu NDos

5
@DannyuNDos tại sao chấp nhận một câu trả lời này một cách nhanh chóng? Tốt hơn hết là không nên chấp nhận câu trả lời nào cả ..
attinat

Liên quan đến các lỗi dấu phẩy động mà các ngôn ngữ khác đang mắc phải, tôi muốn trình bày một phương pháp thay thế cho điểm số phân bổ. Hãy giữ lấy.
Danielu NDos


2

Python 2 , 92 byte

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

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

3.1699250014423122đăng nhập2(3)2 * numpy.log2(3)


1
Điều này cung cấp thêm hai điều khoản sau 665: ..., 665, (1995), (4655), 8286, ... Hãy thử trực tuyến!
Οurous

@ Οurous Vâng, điều đó sớm muộn cũng không thể tránh khỏi đối với bất kỳ ngôn ngữ nào mà không có độ chính xác vô hạn, mặc dù tôi ngạc nhiên khi nó xuất hiện quá sớm với số float 32 bit khi Python sử dụng. Tôi sẽ chờ người viết thử thách làm rõ về câu trả lời cần phải làm việc bao xa.
xnor

nó sẽ không phải là ít ký tự để sử dụng 2 * numpy.log2(3)hơn là số được đánh vần đầy đủ? (Hoặc thậm chí tốt hơn, numpy.log2(9))
JDL

@JDL sẽ yêu cầu mã này: from numpy import*log2(9).
Jonathan Allan

ah, đó là những gì tôi nhận được khi giả sử python hoạt động như R và bạn có thể viết package::functionmà không cần tải packagetrước!
JDL

2

Sạch , 128 111 108 byte

import StdEnv
c=ln 3.0/ln 2.0
?d=abs(toReal(toInt(c*d))/d-c)
$i=take i(iterate(\d=until((>)(?d)o?)inc d)1.0)

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

Phải hoạt động đến giới hạn của Realloại chính xác kép 64 bit.


2

MATL , 27 25 byte

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

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

Giải trình

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

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.