这是音乐的反面:这个和弦是什么?,即按给定的和弦打印音符。这次输入的是和弦中的音符列表,您的任务是输出它是哪个和弦。
您的程序应支持以下三重和弦。例子以C为根。其他根的和弦是相同的和弦,所有音符都旋转,因此C将成为该根音,例如Dmaj由D,F#和A组成。
C C#D D#E F F#G G#A A#B
Db Eb Gb Ab Bb
Cmaj C E G
Cm C D# G
Caug C E G#
Cdim C D# F#
Csus4 C F G
Csus2 C D G
请注意,Caug与Eaug和G#aug相同,而Csus4与Fsus2相同。您可以输出其中之一,但如果全部输出,则有额外的好处。
下表列出了奖金的第七和弦:
C C#D D#E F F#G G#A A#B
Db Eb Gb Ab Bb
C7 C E G A#
Cm7 C D# G A#
Cmmaj7 C D# G B
Cmaj7 C E G B
Caug7 C E G# A#
Cdim7 C D# F# A
规则
- 您可以编写完整的程序或函数。
- 输入内容是注释列表,以空格或其他方便的字符分隔。它也可以是字符串数组(如果从函数参数中获取输入)或该数组的字符串表示形式。
- 输入不必按特定顺序进行。
- 输入中可能有重复的注释。必须像对待其中只有一个一样对待它们。
- 输出是和弦的名称。如果将输出多个名称,则适用相同的输入规则。
- 如果输入不是受支持的和弦,则应按原样打印笔记。您的程序还可以支持上表中未列出的其他和弦(有效,但没有奖金)。
- 您可以使用Wikipedia文章中列出的其他符号。但是,如果选择
C
C大调,则无论哪种情况都应添加可读的前缀,以区分带有单个音符的和弦。 - 您不能将内置功能用于此任务(如果有)。
- 这是代码高尔夫球。以字节为单位的最短代码获胜。
例子
- 输入:
C D# G
输出:Cm
。 - 输入:
C Eb G
输出:Cm
。 - 输入:
C Eb F#
输出:Cdim
。 - 输入:
F A C#
输出:Faug
,Aaug
,C#aug
,Dbaug
或者Faug Aaug C#aug
,Faug Aaug Dbaug
以任何顺序。 - 输入:
F D F F F F A A F
输出:Dm
。 - 输入:
C D
输出:C D
。
奖金
- 如果有多个解释(对于aug,sus4 / sus2和dim7),则如果打印全部,则返回-30。
- -70如果还支持第七和弦。
- -200如果接受MIDI输入并打印接收到的每个和弦。请注意,注释不必同时开始或结束。您可以决定在中间状态下会发生什么(只要它不会崩溃或停止工作)。您可以假设打击乐通道中没有音符(或者如果方便的话,只有一个通道)。建议还提供文本(或数组)版本进行测试,尤其是与平台相关的版本。
输入的内容可以是平坦的还是仅使用锐利的?是否应处理B#之类的注释?
—
feersum'1
@feersum它可以有单位(除非您要求获得-200奖金)。添加了一些示例。你并不需要处理
—
jimmy23013
B#
,Cb
等等
你说
—
Gareth 2015年
Csus4 is the same as Gsus2
。我想你的意思Csus2 is the same as Gsus4
不是吗?
@Gareth ...是的。固定。
—
jimmy23013 2015年