快速的音乐复习:
钢琴键盘包含88个音符。在每个八度音阶上,有12个音符,C, C♯/D♭, D, D♯/E♭, E, F, F♯/G♭, G, G♯/A♭, A, A♯/B♭
和B
。每次您按下“ C”时,花样都会重复八度。
音符通过以下方式唯一标识:1)字母(包括尖锐或平整),以及2)八度,即从0到8的数字。键盘的前三个音符为A0, A♯/B♭
和B0
。之后是八度1 C1, C♯1/D♭1, D1, D♯1/E♭1, E1, F1, F♯1/G♭1, G1, G♯1/A♭1, A1, A♯1/B♭1
和八度的全色标B1
。在这之后是八度音阶2、3、4、5、6和7的全色阶。然后,最后一个音符为C8
。
每个音符对应于20-4100 Hz范围内的频率。用A0
起始于恰好27.500赫兹,每个对应音符是两个,或大致1.059463第十二根先前音符倍。一个更通用的公式是:
其中,n是音符的编号,A0为1。(更多信息在此处)
挑战
编写一个程序或函数,该程序或函数接受代表音符的字符串,并打印或返回该音符的频率。我们将#
在尖锐的符号(或为您的youngins的标签)上使用磅符号b
,在扁平的符号上使用小写字母。所有输入看起来都(uppercase letter) + (optional sharp or flat) + (number)
没有空格。如果输入超出键盘范围(小于A0或大于C8),或者有无效,缺失或多余的字符,则这是无效的输入,您无需进行处理。您还可以放心地假设您不会得到任何奇怪的输入,例如E#或Cb。
精确
由于不可能真正实现无限精度,因此我们可以说在真实值的1%以内的任何值都是可以接受的。在不赘述的情况下,一分是两个的1200的根,即1.0005777895。让我们用一个具体的例子来使它更清楚。假设您输入的是A4。此注释的确切值为440 Hz。一旦平分440 / 1.0005777895 = 439.7459
。440 * 1.0005777895 = 440.2542
因此,只要有一次锐利,任何大于439.7459但小于440.2542的数字都足以精确计数。
测试用例
A0 --> 27.500
C4 --> 261.626
F#3 --> 184.997
Bb6 --> 1864.66
A#6 --> 1864.66
A4 --> 440
D9 --> Too high, invalid input.
G0 --> Too low, invalid input.
Fb5 --> Invalid input.
E --> Missing octave, invalid input
b2 --> Lowercase, invalid input
H#4 --> H is not a real note, invalid input.
请记住,您不必处理无效的输入。如果您的程序假装它们是真实的输入并打印出一个值,那是可以接受的。如果您的程序崩溃了,那也是可以接受的。当你得到任何东西都可能发生。有关输入和输出的完整列表,请参见此页
像往常一样,这是代码高尔夫球,因此存在标准漏洞,并且最短答案以字节为单位。
H
什么呢?H
含义B是仅在德语国家/地区使用的AFAIK。(在这里B
是Bb的意思。)英国和爱尔兰所说的B在西班牙和意大利称为Si或Ti,就像在Do Re Mi Fa Sol La Si中一样。