指导方针
任务
给定两个以字符串或列表/数组形式输入的音符,计算它们之间有多少个半音(包括音符本身),并以数字形式输出。
半音说明:
半音是键盘上移或下移的一步。一个例子是C到C#。如您所见,音符C在白色音符上,而C#在其上方是黑色音符。半音是从黑色音符到下一个白色音符(向上或向下)的跳跃,除了:
- 企业对企业
- C到B
- E到F
- 从F到E
例子
'A, C' -> 4
'G, G#' -> 2
'F#, B' -> 6
'Bb, Bb' -> 13
规则
- 两个音符之间的最大距离是13个半音。
- 第二个输入的注释将始终位于第一个输入的注释上方。
- 您可以将输入作为字符串或数组/列表。如果将其作为字符串,则注释将以逗号分隔(例如
String -> 'A, F'
,Array -> ['A', 'F']
)。 - 您可以假设您将始终得到两个有效的注释。
- 锐利将表示为
#
,单位将表示为b
- 您的代码必须支持等效谐波(例如,它必须同时支持F#和Gb)
- 您的代码不需要支持以命名的注释,但是可以不带尖锐或平整的名称来命名(即,您不需要支持E#或Cb)。如果您的代码确实支持它,则可以加分。
- 您的代码不需要支持双尖或双平。
- 您可以假设,如果您获得了相同的音符或相同的音高(例如“ Gb,Gb”或“ A#,Bb”),则第二个音符将不比第一个音符高一个八度。
- 这是代码高尔夫,因此字节数最少的答案会获胜。
Cb
或这样的音符E#
吗?那双尖锐/平坦的东西呢?
(X, Y]
C至C#为1个半音,而C至C为12个半音。
G -> G#
因为它们都包括在内。