首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主次二分法

主次二分法
EN

Code Golf用户
提问于 2012-09-29 10:57:24
回答 1查看 575关注 0票数 15

给出一个和弦列表,将它们标记为“大调”或“小调”。

输入

输入将是一个和弦的列表,每一行一个,由一个空格分隔的3个音符组成。每个注释将由大写字母(A-G)和可选意外(#b)组成。和弦可以是任意倒置的(即音符可以按任何顺序排列)。

输出

如果和弦是大调,则输出“大调”。如果和弦是次要的,输出‘次要’。如果和弦既非大调也非小调,则输出空行。

示例

输入

代码语言:javascript
复制
C E G
F Ab C
C Eb Gb
E G B
Db F Ab
Bb G D
D A Gb

输出

代码语言:javascript
复制
Major
Minor

Minor
Major
Minor
Major

测试脚本

与我过去的一些问题一样,我再次屠宰了一些最初由乔伊文特罗创建的测试脚本,以便为这个问题提供一些测试用例:

  • bash
  • Powershell

用法:./test [your program and its arguments]

奖励

我可以验证的每一个条目,如果符合规范,通过测试,并且显然已经尝试过打高尔夫,都会得到我的支持(所以请提供使用说明和你的答案)。2012年10月13日之前的最短解决方案将被接受为赢家。

--一个小理论

对于那些没有音乐理论知识的人来说,这里有足够的信息让你们能够竞争。

一个大调或小和弦是由三个音符组成的,这三个音符由一个特定的半音模式隔开。如果我们认为和弦的根(下音)是0,那么一个主要和弦是0-4-7模式,小和弦是0-3-7模式。有些音符是半音相距的,有些音符是隔音的,这使得事情变得更加尴尬。来自Ab-G#的半音词的传播情况如下:

代码语言:javascript
复制
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 EbCb Eb AbCb Ab Eb等相同。这些变奏曲中的每一个仍然是一个小和弦。

EN

回答 1

Code Golf用户

发布于 2012-09-29 12:37:17

Python,160

代码语言:javascript
复制
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:0
票数 4
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/8523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档