许多人喜欢播放音乐来娱乐和娱乐。不幸的是,有时候音乐很难。这就是为什么你在这里!
任务
使那些苦苦挣扎的人更容易阅读音乐是您的工作。您需要编写一个程序或函数,将乐谱作为输入,并输出写在该谱上的音符名称。
员工,谱号和笔记
一个音乐的工作人员,或破碎,是五横,插图中它们是四个空格。每条线或每条空格代表不同的音符(音高),具体取决于谱号。
有几种不同的谱号可供选择,但我们现在只处理一种:高音谱号。在高音谱号上,音符在谱表上的表示方式如下:
线数 F - - - - - D ---------- B ---------- G - - - - - E ----------
空间 ---------- Ë ---------- C ---------- 一种 ---------- F ----------
输入格式
输入将作为单个字符串给出,如下所示:
--------------- --------------- --------------- --------------- ---------------
职员的五行和四个空格由九行字符组成。职员的行用-
(连字符)字符构成,空格用(空格)构成。每行与下一行之间用一个换行符隔开,例如:
-----\n \n-----\n \n-----\n \n-----\n \n-----\n
行的长度是任意的(可以由您的编程语言处理的合理数量),并且每行的字符长度与其他行的长度完全相同。还要注意,行的长度总是可以被三整除的(以适应一个音符的样式,然后是两行不带音符的列)。
通过用代替相应的-
或字符,在此工作人员上放置注释
o
。也可以通过半音(音符与其相邻音符之间的频率差的一半)在音高上提高(清晰)或降低(平坦)。这将由#
和b
分别代替o
。每个音符将与下-
一个音符精确地用两个字符隔开,并且第一个音符将始终出现在-
和(空格)字符的第一个“列”上。
输出便笺名称时,程序应始终使用与谱表上A B C D E F G
给定便笺相对应的大写字母()。对于锐(#
)和平板(b
)的笔记,你的程序需要追加#
和b
,分别对应的说明信。对于不清晰或不平坦的自然音符,应附加一个(空格)。
例
输入:
--------------------- o-- Ø --------------- o -------- Ø --------- b -------------- Ø --- o -------------------- Ø ------------------------
*请注意,此示例中的所有“空白”实际上都是(空格字符)。
在这种情况下(简单的F大音阶),您的程序应输出以下内容:
FGA Bb CDEF
请注意,输出字符之间的间距应完全如上所示,以与谱表上的注释正确匹配。在所有音符名称之间,有两个(空格)字符,除了
Bb
和之间C
。在b
这里代替的一个(空间)的字符。
另一个示例
输入:
------------------------ Ø ------------------#----- # ------------ o ----------- Ø ------#----------------- # o -----------------------
输出:
E F# G# A B C# D# E
祝
输入好运的另一个示例:
--------------------- oo --------------------- Ø --------------------- --------------- o--o-- ---------------------
输出:
E E E C E G G
规则
- 仅在E平至F锐利的五行人员范围内给出注释(挑战除外,请参见下文)
- 任何音符都可以是尖锐或平坦的,而不仅仅是音乐中常见的音符(例如,尽管实际上B#实际上只是作为C演奏,但B#仍可以出现在输入中)
- 您可以假设每3列中只有一个音符(因此不会出现和弦或类似的声音,也不会休息)
- 您可以假设最后一个音符后面将有两列没有音符
- 您可以假设,即使是工作人员的最后一行,也要跟一个换行符
- 输入应来自STDIN(或等效语言)或作为功能参数
- 输出应为STDOUT(或等效语言),如果程序是函数,则应作为返回结果
- 允许使用标准漏洞和内置插件!音乐是关于实验和演奏的。继续并与您的语言一起玩(尽管认识到利用漏洞可能不会产生最有趣的程序)
- 这是代码高尔夫球,因此以字节为单位的最短程序获胜
奖金挑战
- 如果您的程序还可以成功处理人员顶行(G,G#,Gb)上方的空间,则为-10%。
- 如果您的程序还可以成功处理人员底线下方的空间(D,D#,Db),则为-10%
- 在这种情况下,您的程序将在开始和结束处添加另外一行;这些行应与其他九行完全相同