给定一个和弦列表,将其标记为“大”或“小”。
输入值
输入将是和弦列表,每行一个,由3个音符隔开。每个便笺将由大写的便笺名称(A
- G
)和可选的偶然的(#
或b
)组成。和弦可以以任何反转(即音符可以以任何顺序)。
输出量
如果和弦是大和弦,则输出“ Major”。如果和弦较小,则输出“ Minor”。如果和弦既不是大和小,则输出空白行。
例
输入值
C E G
F Ab C
C Eb Gb
E G B
Db F Ab
Bb G D
D A Gb
输出量
Major
Minor
Minor
Major
Minor
Major
测试脚本
就像我过去的一些问题一样,我再次选择了一些最初由Joey和Ventero创建的测试脚本,以针对该问题提供一些测试用例:
用法: ./test [your program and its arguments]
奖赏
我可以验证符合规格,通过测试并且显然已经尝试过打高尔夫球的每条条目都会收到我的赞誉(因此,请在回答中提供使用说明)。最短的解决方案将在2012年10月13日结束之前被接受。
一点理论
对于那些没有音乐理论知识的人来说,这里有足够的信息供您竞争。
一个大和弦由三个音符组成,这三个音符由特定的半音模式分开。如果我们认为和弦的根(底音)为0,则大和弦为0-4-7模式,小和弦为0-3-7模式。有些音符是半音分开的,有些音符是音调分开的事实,使事情变得更加尴尬。来自Ab
- 的半音的传播G#
如下:
G#/Ab A A#/Bb B/Cb B#/C C#/Db D D#/Eb E/Fb E#/F F#/Gb G G#/Ab
0 1 2 3 4 5 6 7 8 9 10 11 12
G#/Ab
表示G#
与相同的音符Ab
。从中我们可以看到,和弦Ab C Eb
是大和弦,那Ab Cb Eb
是次要的。
为了使问题进一步复杂化,该和弦Eb Cb Ab
被认为与和相同Ab Cb Eb
,依此类推。这些变奏中的每一个仍然是次要的和弦。Cb Eb Ab
Cb Ab Eb