大约完美的五分之一


10

从1-TET开始,给出均等的气质,这些气质越来越接近完美的第五(正比3/2)。(OEIS序列A060528

序列的正式描述,从OEIS复制:

一系列相等的气质(八度的等分度),其最接近音阶的步阶越来越接近于两个音乐和声调的比率:完美的4th,4/3和完美的5th,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) |

您的目标是按顺序输出前分母。这些是序列A060528)。分子(不是必需的)由A254351给出(n

规则:

  1. 不要直接导入序列A060528。
  2. 只要数字是可区分的,格式就无关紧要。在上面的示例中,输出也可以是:

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

  3. 由于这是一个代码高尔夫球,因此以字节为单位的最短代码为准。


5
嗨,欢迎来到Code Golf SE!我们要求所有挑战都是独立的,因此在此对顺序进行描述将有很大帮助。
AdmBorkBork

5
我对OEIS的描述感到困惑。它也提到了完美的第4位(比率4/3),但是挑战是关于完美的第5位(比率3/2)。我认为还需要说明,序列值是有理逼近的分母。
xnor19

5
我喜欢挑战,但是我发现添加到说明中的内容仍然令人困惑,对音乐了解不多。例如,我不知道什么是1-TET或4-TET,并且Google似乎没有任何显示。我将尝试撰写有关如何描述此序列的说明。
xnor19

3
@DannyuNDos啊,是的,12个音调相等的气质。这是我最喜欢的乐器
乔金

2
@DannyuNDos谢谢。因此,比较是在1/2和log2(1.5)之间,而不是在2 ^(1/2)和1.5之间。文本中应该更清楚地说明这一点
Luis Mendo

Answers:


5

05AB1E19 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循环具有基于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, ... 在线尝试!
19

@OOurous是的,对于任何没有无限精度的语言来说,迟早都是不可避免的,尽管我很惊讶它这么早就以Python使用的32位浮点数出现。我将等待挑战作者阐明答案的有效范围。
xnor19 19/09 / 25,7

使用的字符会少于2 * numpy.log2(3)完整的拼写数字吗?(甚至更好numpy.log2(9)
-JDL

@JDL需要此代码:from numpy import*log2(9)
乔纳森·艾伦,

啊,这就是我假设python像R一样工作而您package::function无需package先加载即可编写的内容!
JDL

2

干净128 111 108个字节

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)

在线尝试!

应该达到Real64位双精度类型的限制。


2

MATL27 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.