注释


9

挑战

给定列表注释,您必须返回相应的目录。

笔记

音符必须在A到G的范围内,并且八度范围在2到6范围内。格式为音符八度,#代表锐利和b平坦。例如:A7F#3

标签

制表是一种通过图解表示乐器来编写音乐的方法。它通常表示为五行,上面有数字。

线上写的数字代表用来获得所需音高的品格。例如,谱号的第一行上的数字3表示演奏者应在高E(第一弦)的第三个琴格上按下。数字0表示螺母—即一个开放的字符串。

琴码不能大于22,吉他为六弦。

制表必须采用标准ASCII格式。您不得包括任何技术指标(锤击,滑动等)。每个音符用五个破折号隔开。如果是两位数,请将破折号减少到四个。

标签的开头应如下所示:

e |-----
B |-----
G |-----
D |-----
A |-----
E |-----

最后应该是这样的:

-----|

对于所有行。


(来源:justinguitar.com

Input: C3 C3 D3 E3 F3

Output:

e |-----------------------------------|
B |-----------------------------------|
G |-----------------------------------|
D |-----------------0-----2-----3-----|
A |-----3-----3-----------------------|
E |-----------------------------------|

获奖

最短的代码胜出


我们需要在输出中使用适当的字符串吗?是什么阻止我们输出仅使用E字符串的制表法?
danmcardle 2014年

@crazedgremlin您需要考虑八度。仅使用E字符串表示该音符将不在适当的八度中。
Beta Decay

为了将音符提高一个八度,我们可以在品格值上增加12个品格。有没有防止我错过的规则?
danmcardle 2014年

@crazedgremlin您可以,但是仅提供两个八度。
Beta Decay

我只是在做书呆子,但您从来没有说过我不能拥有一支1000品格的超长吉他。
danmcardle 2014年

Answers:


8

Python 3 – 329 328 319 300

这是我在codegolf.se上的第一篇文章,可能不是最佳选择。我在这里读了很多文章,但是大概在50个小时之前进行了我的第一次高尔夫编程。想尝试,不过!

编辑:删除了1个字节,不需要在那里输出额外的破折号

编辑2:删除了9个字节,从注释字符串中删除了一些空格

编辑3:通过转换filter()为生成器删除了19个字节

a,b='C B#oC#DboD oD#EboE FboF E#oF#GboG oG#AboA oA#BboB Cb',input().split()
for f in range(6):print('eBGDAE'[f]+' |-----'+''.join([((str(d[-1])if f==6-len(d)else'')+'-'*6)[:6]for d in[[c-d+9for d in b"%*/48="if c+9>=d]for c in[12*int(g[-1])+a[:a.index((g[:-1]+' ')[:2])].count('o')for g in b]]])+'|')

有点不满意:

a='C B#oC#DboD oD#EboE FboF E#oF#GboG oG#AboA oA#BboB Cb' # string of notes
b=input().split()                                         # read user input
for f in range(6):                    # loop through the strings

  print('eBGDAE'[f] + ' |-----' +     # string identifier and start of string
  ''.join([                           # join notes of tablature
  ((str(d[-1])                        # highest string the note can be played on
  if f == 6 - len(d)                  # if this is the correct string print the fret
  else '')                            # if not then only dashes
  + '-' * 6)                          # print the dashes after the fret
  [:6]                                # but only until 6 chars per note

  for d in [                          # loop through strings
  [c - d                              # calculate fret number
  + 9                                 # add back the 9 (explained below)
  for d in b"%*/48="                  # string values increased by 9 as ASCII bytes
  if c + 9 >= d]                      # filter to remove too high-pitched strings

  for c in [                          # loop through note values
  12 * int(g[-1]) +                   # octave value
  a[:a.index(                         # part of note string before this note
  (g[:-1] + ' ')[:2])]                # unique note identifier
  .count('o')                         # o's (frets) between C and this note
  for g in b]]])                      # loop through notes

  + '|')                              # end tablature

这太棒了!:)
Beta Decay
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.