नोट टेबल्चर को


9

चुनौती

नोटों की सूची को देखते हुए, आपको संबंधित टैबलचर को वापस करना होगा।

टिप्पणियाँ

नोट ए से जी समावेशी और ओक्टेव रेंज 2 से 6 समावेशी की सीमा में होने चाहिए। #एक तेज और bएक फ्लैट का प्रतिनिधित्व करने के साथ प्रारूप नोट-सप्तक है । जैसे: A7या F#3

टैब्स

तबलावादक संगीत का एक तरीका है, जो आरेखीय रूप से उपकरण का प्रतिनिधित्व करता है। यह आमतौर पर उन पर संख्याओं के साथ पांच लाइनों के रूप में दर्शाया जाता है।

लाइनों पर जो संख्याएं लिखी जाती हैं वे वांछित पिच को प्राप्त करने के लिए उपयोग किए जाने वाले झल्लाहट का प्रतिनिधित्व करती हैं। उदाहरण के लिए, कर्मचारियों की शीर्ष पंक्ति पर लिखा नंबर 3 इंगित करता है कि खिलाड़ी को उच्च ई (पहले स्ट्रिंग) पर तीसरे झल्लाहट में नीचे दबाना चाहिए। संख्या 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 |-----------------------------------|

जीतना

सबसे छोटा कोड जीतता है


क्या हमें अपने आउटपुट में उपयुक्त स्ट्रिंग्स का उपयोग करने की आवश्यकता है? केवल टैब का उपयोग करने वाले टैब्लेट को आउटपुट करने से हमें रोकने के लिए क्या है?
danmcardle

@ crazedgremlin आपको ऑक्टेव्स को ध्यान में रखना होगा। केवल E स्ट्रिंग का उपयोग करने का अर्थ है कि नोट उपयुक्त सप्तक में नहीं होगा।
बीटा डिके

एक सप्तक द्वारा एक नोट बढ़ाने के लिए, हम झल्लाहट के मूल्य में 12 माल जोड़ सकते हैं। क्या इसे रोकने के लिए कोई नियम है जो मैंने याद किया?
danmcardle

@ crazedgremlin आप कर सकते हैं, लेकिन यह केवल दो सप्तक प्रदान करता है।
बीटा डेके

मैं सिर्फ पांडित्यपूर्ण हूं, लेकिन आपने कभी नहीं कहा कि मेरे पास 1000 फ्रीट के साथ एक बहुत लंबा गिटार नहीं हो सकता।
danmcardle

जवाबों:


8

अजगर 3 - 329 328 319 300

यह codegolf.se पर मेरी पहली पोस्ट है, और शायद लगभग इष्टतम नहीं है; मैंने यहाँ बहुत सी पोस्ट पढ़ी हैं लेकिन क्या मेरा पहला कोड गोल्फ कभी 50 घंटे पहले आया है। यद्यपि कोशिश करना चाहता था!

संपादित करें: 1 बाइट को हटा दिया गया था, वहां एक अतिरिक्त डैश का उत्पादन करने की आवश्यकता नहीं थी

EDIT 2: 9 बाइट्स निकाले, नोट स्ट्रिंग से कुछ रिक्त स्थान निकाले

EDIT 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

ये जबरदस्त है! :)
बीटा डेके
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.