Ghi chú cho Tablature


9

Thử thách

Đưa ra một danh sách một ghi chú, bạn phải trả về khuôn mẫu tương ứng.

Ghi chú

Các ghi chú phải nằm trong phạm vi từ A đến G và phạm vi quãng tám là 2 đến 6. Các định dạng là ghi chú quãng tám với #đại diện cho một sắc nét và bđại diện cho một căn hộ. Vd: A7hoặc F#3.

Tab

Tablature là một phương pháp viết nhạc, bằng cách biểu đồ bằng nhạc cụ. Nó thường được biểu diễn dưới dạng năm dòng với các số trên chúng.

Các số được viết trên các dòng đại diện cho băn khoăn được sử dụng để có được cao độ mong muốn. Ví dụ, số 3 được viết trên dòng trên cùng của nhân viên cho biết rằng người chơi nên nhấn xuống ở băn khoăn thứ ba trên E cao (chuỗi đầu tiên). Số 0 biểu thị đai ốc - nghĩa là một chuỗi mở.

Số băn khoăn có thể không lớn hơn 22 và guitar là sáu dây.

Tablature phải ở định dạng ASCII tiêu chuẩn . Bạn không được bao gồm bất kỳ chỉ số kỹ thuật nào (búa trên, trượt, v.v.). Tách từng nốt bằng năm dấu gạch ngang. Trong trường hợp chữ số kép, giảm số lượng dấu gạch ngang xuống còn bốn.

Phần đầu của tab sẽ trông như thế này:

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

Và kết thúc sẽ giống như:

-----|

cho tất cả các dòng.


(nguồn: justing Ức.com )

Thí dụ

Input: C3 C3 D3 E3 F3

Output:

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

Chiến thắng

Mã ngắn nhất sẽ thắng


Chúng ta có cần sử dụng các chuỗi thích hợp trong đầu ra của chúng tôi không? Điều gì ngăn chúng ta xuất ra tablature chỉ sử dụng chuỗi E?
danmcardle

@craenedgremlin Bạn cần tính đến quãng tám. Chỉ sử dụng chuỗi E có nghĩa là ghi chú sẽ không nằm trong quãng tám thích hợp.
Beta Decay

Để tăng ghi chú bằng một quãng tám, chúng ta có thể thêm 12 phím tắt vào giá trị băn khoăn. Có một quy tắc để ngăn chặn điều này mà tôi bỏ lỡ?
danmcardle

@craenedgremlin Bạn có thể, nhưng điều này chỉ cung cấp hai quãng tám.
Beta Decay

Tôi chỉ là người tầm phào, nhưng bạn không bao giờ nói rằng tôi không thể có một cây đàn guitar thực sự dài với 1000 phím đàn.
danmcardle

Câu trả lời:


8

Con trăn 3 - 329 328 319 300

Đây là bài viết đầu tiên của tôi trên codegolf.se, và có lẽ gần như không tối ưu; Tôi đã đọc rất nhiều bài viết ở đây nhưng đã chơi golf mã đầu tiên của tôi cách đây 50 giờ. Muốn thử, mặc dù!

EDIT: Đã xóa 1 byte, không cần xuất thêm dấu gạch ngang ở đó

EDIT 2: Đã xóa 9 byte, xóa một số khoảng trắng khỏi chuỗi ghi chú

EDIT 3: Đã xóa 19 byte bằng cách chuyển đổi filter()sang trình tạo

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]]])+'|')

Một chút vô duyên:

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

Thật là tuyệt vời! :)
Beta Decay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.