หมายเหตุถึง Tablature


9

ท้าทาย

รับรายการบันทึกย่อคุณจะต้องส่งคืนแท็บที่สอดคล้องกัน

หมายเหตุ

บันทึกจะต้องอยู่ในช่วงของ A ถึง G รวมและช่วงอ็อกเทฟเป็น 2 ถึง 6 รวม รูปแบบเป็นโน้ตคู่ที่มี#ความคมชัดและbเป็นตัวแทนของแบน เช่น: หรือA7F#3

แท็บ

Tablature เป็นวิธีการเขียนเพลงโดยใช้แผนภาพเป็นตัวแทนของเครื่องดนตรี มันมักจะแสดงเป็นห้าบรรทัดด้วยตัวเลขในพวกเขา

ตัวเลขที่เขียนบนเส้นแสดงถึงความไม่สบายใจที่ใช้เพื่อให้ได้ระดับเสียงที่ต้องการ ตัวอย่างเช่นหมายเลข 3 ที่เขียนไว้ที่บรรทัดบนสุดของเจ้าหน้าที่ระบุว่าผู้เล่นควรกดที่หงุดหงิดที่สามของ E สูง (สตริงแรก) Number 0 หมายถึง nut - นั่นคือสตริงเปิด

หมายเลข Fret อาจไม่มากกว่า 22 และกีตาร์หกสาย

tablature จะต้องอยู่ในรูปแบบ 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 |-----------------------------------|

การชนะ

รหัสที่สั้นที่สุดชนะ


เราจำเป็นต้องใช้สตริงที่เหมาะสมในผลลัพธ์ของเราหรือไม่? มีอะไรจะหยุดเราไม่ให้แสดงผล tablature ที่ใช้เฉพาะสตริง E เท่านั้น
danmcardle

@crazedgremlin คุณต้องคำนึงถึงอ็อกเทฟ การใช้สตริง E เท่านั้นหมายความว่าโน้ตจะไม่อยู่ในระดับแปดเสียงที่เหมาะสม
สลายตัวเบต้า

ในการเพิ่มโน้ตด้วยอ็อกเทฟหนึ่ง ๆ เราสามารถเพิ่มเฟร็ต 12 อันให้กับค่าเฟร็ท มีกฎที่จะป้องกันสิ่งนี้ที่ฉันพลาดไปหรือไม่?
danmcardle

@crazedgremlin คุณสามารถทำได้ แต่จะให้อ็อกเทฟสองตัวเท่านั้น
Beta Decay

ฉันแค่เป็นคนคล่องแคล่ว แต่คุณไม่เคยพูดว่าฉันไม่สามารถมีกีตาร์ที่ยาวจริง ๆ ที่มี 1,000 เฟรท
danmcardle

คำตอบ:


8

Python 3 - 329 328 319 300

นี่เป็นโพสต์แรกของฉันใน codegolf.se และอาจไม่เหมาะสมที่สุด ฉันได้อ่านบทความมากมายที่นี่ แต่ทำรหัสกอล์ฟครั้งแรกของฉันอาจจะ 50 ชั่วโมงที่ผ่านมา อยากลอง!

แก้ไข:ลบ 1 byte ไม่จำเป็นต้องออก dash พิเศษที่นั่น

แก้ไข 2:ลบ 9 ไบต์ลบช่องว่างบางส่วนออกจากสตริงข้อความ

แก้ไข 3:ลบ 19 ไบต์โดยแปลงfilter()เป็นตัวสร้าง

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

บิต ungolfed:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.