给出一个和弦列表,将它们标记为“大调”或“小调”。
输入将是一个和弦的列表,每一行一个,由一个空格分隔的3个音符组成。每个注释将由大写字母(A-G)和可选意外(#或b)组成。和弦可以是任意倒置的(即音符可以按任何顺序排列)。
如果和弦是大调,则输出“大调”。如果和弦是次要的,输出‘次要’。如果和弦既非大调也非小调,则输出空行。
C E G
F Ab C
C Eb Gb
E G B
Db F Ab
Bb G D
D A GbMajor
Minor
Minor
Major
Minor
Major与我过去的一些问题一样,我再次屠宰了一些最初由乔伊和文特罗创建的测试脚本,以便为这个问题提供一些测试用例:
用法:./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 12G#/Ab意味着G#和Ab是相同的音符。从这里我们可以看到和弦Ab C Eb是一个主要的和弦,而Ab Cb Eb是次要的。
更复杂的是,和弦Eb Cb Ab被认为与Ab Cb Eb、Cb Eb Ab和Cb Ab Eb等相同。这些变奏曲中的每一个仍然是一个小和弦。
发布于 2012-09-29 12:37:17
f='A#BC D EF G3453543'.find
try:
while 1:x,y,z=sorted(map(lambda x:f(x[0])+f(x[1:])+1,raw_input().split()));print'MMianjoorrr'[f(`y-x`+`z-y`)/14:-1:2]
except:0https://codegolf.stackexchange.com/questions/8523
复制相似问题