완벽한 5 분의 1


10

1-TET에서 시작하여 완벽한 5 분의 1에 대한 더 나은 근사값을 갖는 동일한 기질을 제공하십시오 (비율 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 개의 숫자 여야합니다. 예를 들어, when 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 ( table )입니다. 분자 (필수 아님)는 A254351 ( table )에 의해 제공됩니다.

규칙 :

  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 아 그래, 12 톤의 동일한 기질. 그것이 내가 가장 좋아하는 악기입니다.
Jo King

2
@DanyuNDos 감사합니다. 따라서 비교는 2 ^ (1/2)와 1.5 사이가 아니라 1/2와 log2 (1.5) 사이입니다. 본문에서 더 명확
해져야

답변:


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
S : 그동안 루프는 1 기반 인덱스 .. 왜 멋진 대답은,하지만 난 지금 궁금하네요 모든입니다
케빈 Cruijssen

4

Wolfram Language (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

파이썬 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를 사용합니다2로그2(). 부정확성이 결국 순서를 깨뜨릴 것이기 때문에 몇 자리의 정확도가 필요한지 확신하지 못했기 때문에의 전체 부동 소수점 정밀도를 사용했습니다 2 * numpy.log2(3).


1
이것은 665 이후에 두 가지 용어를 추가로 제공 ..., 665, (1995), (4655), 8286, ... 합니다. 온라인으로 사용해보십시오!
OUurous

@ Οurous 예, 파이썬이 사용하는 것처럼 32 비트 부동 소수점으로 너무 일찍 나타났습니다. 챌린지 작성자가 답변이 얼마나 멀리 필요한지 명확히 할 때까지 기다립니다.
xnor

2 * numpy.log2(3)철자가 아닌 숫자 를 사용하는 것이 더 적지 않습니까? (또는 더 나은 방법 numpy.log2(9))
JDL

이 코드가 필요한 @JDL : from numpy import*log2(9).
Jonathan Allan

아, 그것은 파이썬이 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.