任务
编写一个程序,确定调到给定频率并在给定位置按下的弦的音调,以及失调多少分。
为简单起见,假定产生的声音的频率与按下声音的右侧的弦长成反比。
注意:此任务仅涉及基音,而不涉及泛音/其他谐波。
输入项
您的程序获得了两条数据:
任意长度的字符串,表示所讨论的字符串。该字符串将用X标记,该字符串将被按下。
[-----] is a string divided in six sections (five divisions). [--X--] is a string pressed at the exact center of the string. [X----] is a string pressed at 1/6 the length of the string. (Length used is 5/6) [-X--] is a string pressed at 2/5 of the length of the string. (Length used is 3/5)
假设音符使用右侧的字符串部分来发声
X
。- 一个数字(不一定是整数),表示调弦的频率。该数字的精度最多为十进制小数点后四位。
可以假设通过的频率在10 Hz
和之间40000 Hz
。
输入可以您选择的格式传递。请在答案中指定如何将输入接受到程序中。
输出量
您的程序必须输出在十二音调相同的音调系统中最接近的音符*,以及输出最接近的音符的美分数,以该字符串表示的声音将被(舍入为最接近的美分)。
+n
应使用n
美分表示钞票上方-n
/下方的美分,以及用于在钞票上方/下方表示美分的美分。
注释应以科学的音高符号输出。假设A4已调至440Hz
。使用b和#表示平坦/清晰音符。注意:可以使用锋利的或平坦的。对于的注释466.16Hz
,可以输出A#
或Bb
。
输出格式取决于您,只要输出仅包含两个先前指定的信息即可(即,不允许打印每个可能的输出)。
*最接近的音符是指与输入所表示的声音最接近的音符,以美分为单位(因此,50 cents
声音中的音符)。如果声音50 cents
远离两个不同的音符(四舍五入后),则可以输出两个音符中的任何一个。
例子
您的程序应适用于所有情况,而不仅仅是以下示例。
Output Input Frequency Input String
A4, +0 cents 220 [-----X-----]
A5, +0 cents 220 [--------X--]
D5, -2 cents 440 [--X--------]
B4, -49 cents 440 [X----------]
A#4, +19 cents* 314.1592 [X-]
Eb9, +8 cents* 400 [-----------------------X]
Eb11,+8 cents* 100 [--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------X]
D#1, +49 cents* 10 [--X]
A0, -11 cents 11.7103 [---X--]
*可能已经输出了尖锐或平坦。
可能有用的链接
这是 代码高尔夫球 如此短的答案胜出。
[-X--]
,将字符串分成4个位置(因此分为5个部分),并在这些划分的第二个位置按。因此,将其按2/5
,使用的长度为3/5
。
-
基本上代表了部门的位置,谢谢您的解释!
[--X--]
字符串,将字符串按在x
放置的分隔的中间,而[-X--]
按照此逻辑,最后一个字符串应为3/8(而不是2/5)。还是我理解不对?