给定一个ascii乐谱,您必须能够输出音符及其相应的长度。乐谱将包含5到15个音符,并在音阶上转录。壁由五条水平线组成,由-(减号)字符组成,由空格线隔开。音箱中的底线相当于音符'E‘。底线上方的空格线表示'F',其音高比它下面的'E‘高。这一情况继续如下。注意,在“A”处重新开始之前,音符只会上升到“G”。见下文:
F ----------
E
D ----------
C
B ----------
A
G ----------
F
E ----------注意,这些字母不包括在输入中。音符叠加在音箱顶部,使用o(小写)字符来表示“音符头”。这个音符头表示音符的频率,因此它的字母表示如下所示。例如,下面放在分数上的注释表示'A‘:
----
----
----
o
----
----一个音符,就像上面的'A‘一样,被称为’整个音符‘,将被演奏一个完整的节拍。其他的持续时间可以通过包括从音符上升的“词干”,以及在零到三个“旗子”之间来表示。阀杆由三个连(管,或垂直条)字符组成,这些字符堆放在音头上方。没有旗子的杆被认为是“四分之一音符”,并演奏四分之一的节拍。标志是\(反斜杠)字符,手在茎的右手边。每个杆把演奏音符的时间减半。每个音符的长度将是以下之一:完整音符、四分之一音符、第八音符、第十六音符或第三十二音符。每种类型的笔记都是这样查找A的:
--------------------
----|---|\--|\--|\--
| | |\ |\
----|---|---|---|\--
o o o o o
--------------------
--------------------把一个以上的音符放在一起会给你一个分数。每个音符可以被认为是四个字符宽,一个注释在每个四个字符块的第一列。例如:
|\
----|\--|\----------
|\ | |\
----o---|---o---|\--
| o |
|---------------o---
|
o-------------------
--------------------上面的例子按顺序包括以下注释:四分之一音符'G‘、第三十二音符'D’、第八个音符'C‘、整个音符'D’和第十六音符'B‘。输出中的每个音符都应该是格式字母/长度,其中字母是a,长度是音符长度的分数,与整个音符相比。作为例外,如果注释是一个完整的注释,则不应打印长度和/字符。输出中的每个音符都应该用一个空格隔开。因此,对于上面的分数,您的代码应该输出以下内容:
G/4 D/32 C/8 D B/16最短代码获胜(空格不算在内)。
编辑:固定错误的间隔在一个输入。
一些样本输入:
|\
----|\--|-------------------
|\ | |
|---|---o---------------o---
| o |\
o---------------|\--|\------
|\ |\ |\
------------|\--|\--o-------
|\ o
------------o---------------产出:B/8C/8D/8 E/32 F/32 G/32 D
----------------o-------------------
o
------------o-----------------------
o
--------o---------------------------
o
----o-------------------------------
o
o-----------------------------------产出:e、G、B、D、F、A、C、E
|\
|\
|\
------------o-------|-----------
| o | |\
|---|\--------------|---|\------
| | o |\
o---|---|\--------------o---|\--
o |\ |\
--------|\------------------|---
o o
--------------------------------产出: B/4 A/8 F/32 F/32英C/4 B/32 F/16
发布于 2011-07-30 15:08:24
exit echo}.,>,&.>/_4<@((a.{~32,65+7|4+i.&'o'),(>&0#('/',0":2^]))@((+/@(=&'\'))+2*'|'&e.))@;\|:|.[;._2]stdin''未高尔夫球:
str =: stdin''
lines =: [;._2] str NB. split on the last character, the newline
rotated =: |: |. lines NB. lines reversed, then transposed
pitch =: 65 + 7 | 4 + i.&'o' NB. ord('A') + ( line.index('o') + 4 ) % 7
has_stem =: '|' & e. NB. '|' in line?
backslash_count =: (+/ @ (=&'\') ) NB. sum(char = '\\' for char in line)
denom_exp =: backslash_count + 2 * has_stem
fraction =: (>&0 # ('/', 0": 2 ^ ])) NB. slash + 2^denom_exp, if denom_exp > 0
suffix =: fraction @ denom_exp
note_string =: (a. {~ 32,pitch) , suffix NB. map(chr, (ord(' '), pitch)) + suffix
boxed_note_string =: < @ note_string @ ; NB. box the string so it doesn't get padded
each_note_of_the =: boxed_note_string NB. compute the note for a block of 4 lines
join_to_one_box =: , &. >
exit echo }. , > join_to_one_box / _4 each_note_of_the \ rotated发布于 2012-12-05 05:28:12
import sys
a=[x[:-1]+' '*99 for x in sys.stdin]
for x in range(0,99,4):
b=''.join((y[x:x+4] for y in a))+'o'
c=2**(b.count('\\')+('|'in b)*2)
print'FEDCBAGFE '[b.index('o')/4-len(a)+9]+('','/'+`c`)[c>1],我已经用Python编写了两天的代码,我发现像import sys、sys.stdin.read、sys.stdout.write这样的东西是扩展性的。
https://codegolf.stackexchange.com/questions/3230
复制相似问题